MCPcopy Create free account
hub / github.com/acl-dev/acl / get_node

Method get_node

lib_acl_cpp/src/redis/redis_cluster.cpp:776–826  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

774
775
776redis_node* redis_cluster::get_node(string& line)
777{
778 std::vector<string>& tokens = line.split2(" ");
779 if (tokens.size() < 8) {
780 logger_warn("invalid tokens's size: %d < 8", (int) tokens.size());
781 return NULL;
782 }
783
784 bool myself = false;
785 char* node_type = tokens[2].c_str();
786 char* ptr = strchr(node_type, ',');
787 if (ptr != NULL && *(ptr + 1) != 0) {
788 *ptr++ = 0;
789 if (strcasecmp(node_type, "myself") == 0) {
790 myself = true;
791 }
792 node_type = ptr;
793 }
794
795 redis_node* node = NEW redis_node;
796 node->set_id(tokens[0].c_str());
797 node->set_addr(tokens[1].c_str());
798 node->set_myself(myself);
799 node->set_connected(strcasecmp(tokens[7].c_str(), "connected") == 0);
800 node->set_master_id(tokens[3].c_str());
801
802 if (strcasecmp(node_type, "master") == 0) {
803 node->set_master(node);
804 node->set_type("master");
805 masters_[tokens[0]] = node;
806 size_t n = tokens.size();
807 for (size_t i = 8; i < n; i++) {
808 add_slot_range(node, tokens[i].c_str());
809 }
810 } else if (strcasecmp(node_type, "slave") == 0) {
811 node->set_type("slave");
812 } else if (strcasecmp(node_type, "handshake") == 0) {
813 node->set_master(node);
814 node->set_type("handshake");
815 node->set_handshaking(true);
816 masters_[tokens[0]] = node;
817 size_t n = tokens.size();
818 for (size_t i = 8; i < n; i++) {
819 add_slot_range(node, tokens[i].c_str());
820 }
821 } else {
822 logger_warn("unknown node type: %s", node_type);
823 }
824
825 return node;
826}
827
828void redis_cluster::add_slot_range(redis_node* node, char* slots)
829{

Callers

nothing calls this directly

Calls 5

sizeMethod · 0.45
c_strMethod · 0.45
set_idMethod · 0.45
set_addrMethod · 0.45
set_typeMethod · 0.45

Tested by

no test coverage detected