Example #1
0
        /// <summary>
        /// Compare the current RS (CurrentReplicaSetStatus) with what it should be ie the list of instances in our role (Endpoints)
        /// </summary>
        /// <param name="CurrentReplicaSetStatus"></param>
        /// <param name="Endpoints"></param>
        /// <returns></returns>
        public static bool AreReplicaSetConfigEqual(ReplicaSetStatus CurrentReplicaSetStatus, List<NodeEndPoint> Endpoints)
        {
            if (CurrentReplicaSetStatus.Members.Count != Endpoints.Count)
                return false;

            //Check  that every endpoints is in the replicatset config
            foreach (NodeEndPoint node in Endpoints)
            {
                if (CurrentReplicaSetStatus.Members.FirstOrDefault(m => node == new NodeEndPoint(m.Adress,Int32.Parse(m.Port))) == null)
                    return false;
            }

            return true;
        }
Example #2
0
 private bool IsCurrentConfigurationCorrect(ReplicaSetStatus CurrentReplicaSetStatus)
 {
     List<NodeEndPoint> ThisRSendpoints = MongoDBAzurePlatform.Instance.GetReplicaSetMembers(RoleEnvironment.CurrentRoleInstance.Id);
     return MongoHelper.AreReplicaSetConfigEqual(CurrentReplicaSetStatus, ThisRSendpoints);
 }
Example #3
0
        /// <summary>
        /// Récupère le status des replicaSets
        /// </summary>
        /// <returns></returns>
        public static ReplicaSetStatus GetReplicaSetStatus(NodeEndPoint nodeEndpoint)
        {
            MongoServer server = CreateMongoServer(nodeEndpoint);

            try
            {
                var statusCommand = new CommandDocument { { "replSetGetStatus", 1 } };
                CommandResult result = server.RunAdminCommand(statusCommand);

                if (!result.Ok)
                    return null;

                ReplicaSetStatus status = new ReplicaSetStatus();

                foreach (var item in result.Response)
                {
                    switch (item.Name)
                    {
                        case "set":
                            status.ReplicasetName = item.Value.AsString;
                            break;
                        case "date":
                            status.Date = item.Value.AsDateTime;
                            break;
                        case "members":
                            foreach (var item2 in item.Value.AsBsonArray)
                            {
                                ReplicaSetNode node = new ReplicaSetNode();
                                foreach (var member in item2.AsBsonDocument)
                                {
                                    switch (member.Name)
                                    {
                                        case "_id":
                                            node.Id = member.Value.AsInt32;
                                            break;
                                        case "name":
                                            string[] fullAdress = member.Value.AsString.Split(':');
                                            if (fullAdress.Length > 1)
                                            {
                                                node.Adress = fullAdress[0];
                                                node.Port = fullAdress[1];
                                            }
                                            else
                                                node.Adress = member.Value.AsString;
                                            break;
                                        case "health":
                                            node.Health = member.Value.AsDouble == 0 ? "Down" : "Up";
                                            break;
                                        case "stateStr":
                                            node.StateStr = member.Value.AsString;
                                            break;
                                        case "state":
                                            node.State = ReplicaSetNode.GetStateFromInt(member.Value.AsInt32);
                                            break;
                                        case "optimeDate":
                                            node.OpTime = member.Value.AsDateTime;
                                            break;
                                        case "errmsg":
                                            node.ErrMsg = member.Value.AsString;
                                            break;
                                        default:
                                            break;
                                    }
                                }
                                status.Members.Add(node);
                            }
                            break;
                        default:
                            break;
                    }
                }

                return status;
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("(EMPTYCONFIG)"))
                {
                    ReplicaSetStatus status = new ReplicaSetStatus();
                    status.IsEmptyConfig = true;
                    Trace.TraceWarning(string.Format("MongoHelper.GetStatus Exception : {0}", ex));
                    return status;
                }
                else
                {
                    Trace.TraceError(string.Format("MongoHelper.GetStatus Exception : {0}", ex));
                    return null;
                }
            }
        }