18 #ifndef OBJECTQUERYMODEL_ROUNDROBINPOLICY_CC
19 #define OBJECTQUERYMODEL_ROUNDROBINPOLICY_CC
27 this->
storageNodes = std::vector<NodePartitionDataPtr>();
28 pthread_mutex_init(&
idMutex,
nullptr);
42 for (
int i = 0; i < activeStorageNodes.size(); i++) {
43 bool alreadyContains =
false;
44 for (
int j = 0; j < oldNodes.size(); j++) {
45 if ((*activeStorageNodes[i]) == (*oldNodes[j])) {
49 oldNodes.erase(oldNodes.begin() + j);
50 alreadyContains =
true;
54 if (!alreadyContains) {
58 for (
auto oldNode : oldNodes) {
66 std::vector<NodePartitionDataPtr> newData = std::vector<NodePartitionDataPtr>();
68 auto nodeData = (*storageNodes)[i];
70 std::make_shared<NodePartitionData>(nodeData->getNodeId(),
72 nodeData->getAddress(),
73 std::pair<std::string, std::string>(
"",
""));
74 PDB_COUT << newNode->toString() << std::endl;
75 newData.push_back(newNode);
82 PDB_COUT <<
"Updating existing node " << newNode->toString() << std::endl;
87 PDB_COUT <<
"Updating new node " << newNode->toString() << std::endl;
92 PDB_COUT <<
"Deleting node " << deadNode->toString() << std::endl;
96 std::shared_ptr<std::unordered_map<NodeID, Handle<Vector<Handle<Object>>>>>
99 auto partitionedData =
100 std::make_shared<std::unordered_map<NodeID, Handle<Vector<Handle<Object>>>>>();
103 <<
"FATAL ERROR: there is no storage node in the cluster, please check conf/serverlist"
110 pthread_mutex_unlock(&
idMutex);
111 partitionedData->insert(
113 return partitionedData;
std::shared_ptr< std::unordered_map< NodeID, Handle< Vector< Handle< Object > > > > > partition(Handle< Vector< Handle< Object >>> toPartition)
std::vector< NodePartitionDataPtr > createNodePartitionData(Handle< Vector< Handle< NodeDispatcherData >>> storageNodes)
static unsigned int curNodeId
std::shared_ptr< NodePartitionData > NodePartitionDataPtr
void updateStorageNodes(Handle< Vector< Handle< NodeDispatcherData >>> storageNodes)
NodePartitionDataPtr updateNewNode(NodePartitionDataPtr newNode)
std::vector< NodePartitionDataPtr > storageNodes
NodePartitionDataPtr handleDeadNode(NodePartitionDataPtr deadNode)
NodePartitionDataPtr updateExistingNode(NodePartitionDataPtr newNodeData, NodePartitionDataPtr oldNodeData)