Beispiel #1
0
 /** \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();
        }
Beispiel #3
0
        /** \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);
        }