/** \fn int GetNodeNum( SDBConst.NodeStatus status) * \brief Get the count of node with given status * \param status The specified status as below: * * SDB_NODE_ALL * SDB_NODE_ACTIVE * SDB_NODE_INACTIVE * SDB_NODE_UNKNOWN * \return The count of node * \exception SequoiaDB.BaseException * \exception System.Exception */ public int GetNodeNum(SDBConst.NodeStatus status) { try { int total = 0; BsonDocument detail = GetDetail(); if (detail[SequoiadbConstants.FIELD_GROUP].IsBsonArray) { BsonArray nodes = detail[SequoiadbConstants.FIELD_GROUP].AsBsonArray; total = nodes.Count; //foreach (BsonDocument node in nodes) //{ // Node rnode = ExtractNode(node); // SDBConst.NodeStatus sta = rnode.GetStatus(); // if (SDBConst.NodeStatus.SDB_NODE_ALL == status || rnode.GetStatus() == status) // ++total; //} } return(total); } catch (KeyNotFoundException) { throw new BaseException("SDB_CLS_NODE_NOT_EXIST"); } catch (FormatException) { throw new BaseException("SDB_INVALIDARG"); } }
public void RGTest() { String hostName = "192.168.20.166"; int port = 45000; // check whether it is in the cluster environment or not if (!Constants.isClusterEnv(sdb)) { Console.WriteLine("It's not a cluster environment."); return; } group = sdb.GetReplicaGroup(groupName); if (group == null) { group = sdb.CreateReplicaGroup(groupName); } ReplicaGroup group1 = sdb.GetReplicaGroup(group.GroupID); Assert.AreEqual(group.GroupName, group1.GroupName); ReplicaGroup group2 = sdb.GetReplicaGroup(1); Assert.IsNotNull(group2); node = group.GetNode(hostName, port); if (node == null) { string dbpath = config.conf.Groups[0].Nodes[0].DBPath; Dictionary <string, string> map = new Dictionary <string, string>(); map.Add("diaglevel", config.conf.Groups[0].Nodes[0].DiagLevel); node = group.CreateNode(hostName, port, dbpath, map); } group.Start(); int num = group.GetNodeNum(SDBConst.NodeStatus.SDB_NODE_ALL); Assert.IsTrue(num > 0); BsonDocument detail = group.GetDetail(); string gn = detail["GroupName"].AsString; Assert.IsTrue(groupName.Equals(gn)); SequoiaDB.Node master = group.GetMaster(); Assert.IsNotNull(master); SequoiaDB.Node slave = group.GetSlave(); Assert.IsNotNull(slave); Assert.IsTrue(node.Stop()); Assert.IsTrue(node.Start()); SDBConst.NodeStatus status = node.GetStatus(); Assert.IsTrue(status == SDBConst.NodeStatus.SDB_NODE_ACTIVE); Sequoiadb db = node.Connect(config.conf.UserName, config.conf.Password); db.Disconnect(); node.Stop(); group.Stop(); }
/** \fn SDBConst.NodeStatus GetStatus() * \brief Get the status of current node * \return The status of current node * \exception SequoiaDB.BaseException * \exception System.Exception * \deprecated Since v2.8, the status of node are invalid, nerver use this api again. */ public SDBConst.NodeStatus GetStatus() { SDBConst.NodeStatus status = SDBConst.NodeStatus.SDB_NODE_UNKNOWN; string command = SequoiadbConstants.ADMIN_PROMPT + SequoiadbConstants.SNAP_CMD + " " + SequoiadbConstants.DATABASE; BsonDocument condition = new BsonDocument(); BsonDocument dummyObj = new BsonDocument(); condition.Add(SequoiadbConstants.FIELD_GROUPID, group.GroupID); condition.Add(SequoiadbConstants.FIELD_NODEID, nodeID); SDBMessage rtn = AdminCommand(command, condition, dummyObj, dummyObj, dummyObj); int flags = rtn.Flags; if (flags == 0) { status = SDBConst.NodeStatus.SDB_NODE_ACTIVE; } else if (flags == (int)Errors.errors.SDB_NET_CANNOT_CONNECT) { status = SDBConst.NodeStatus.SDB_NODE_INACTIVE; } return(status); }