-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConsistencyHash.cpp
More file actions
70 lines (55 loc) · 1.8 KB
/
ConsistencyHash.cpp
File metadata and controls
70 lines (55 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "ConsistencyHash.h"
#include <iostream>
ConsistencyHash::ConsistencyHash(int virtualNodeNum) :
virtualNodeNum_(virtualNodeNum),
md5_(),
nodes_(),
hashMap_() {
}
bool ConsistencyHash::addHashNodesFromString(std::string nodeName) {
auto iter = nodes_.find(nodeName);
if (iter != nodes_.end()) {
return false;
}
std::shared_ptr<HashNode> node = std::make_shared<HashNode>(&md5_, nodeName, virtualNodeNum_);
nodes_[nodeName] = node;
std::vector<HashNode::KeyType> nodeKeys = node->getNodeKeys();
for (auto iter = nodeKeys.begin(); iter != nodeKeys.end(); ++iter) {
hashMap_.insert({
*iter, node
});
}
return true;
}
bool ConsistencyHash::deleteHashNodesFromString(std::string nodeName) {
auto iter = nodes_.find(nodeName);
if (iter == nodes_.end()) {
return true;
}
std::vector<HashNode::KeyType> nodeKeys = iter->second->getNodeKeys();
for (auto iter = nodeKeys.begin(); iter != nodeKeys.end(); ++iter) {
hashMap_.erase(*iter);
}
return true;
}
ConsistencyHash::MappingNodeIter
ConsistencyHash::getMappingNodeFromKey(HashNode::KeyType key) {
auto iter = hashMap_.upper_bound(key);
if (iter == hashMap_.end()) {
iter = hashMap_.begin();
}
if (hashMap_.end() != iter) {
iter->second->increaseMappedCount();
}
return iter;
}
void ConsistencyHash::ShowNodeMsg() {
for (auto iter = hashMap_.begin(); iter != hashMap_.end(); ++iter) {
std::cout << iter->second->getInitName() << std::endl;
}
}
void ConsistencyHash::ShowMappingStatisticMsg() {
for (auto iter = nodes_.begin(); iter != nodes_.end(); ++iter) {
std::cout << iter->second->getInitName() << " " << iter->second->getMappedCount() << endl;
}
}