Exemplo n.º 1
0
        public void OnShardConnected(Common.Toplogies.Impl.StateTransfer.NodeIdentity shard)
        {
            if (collectionTasksMap != null && collectionTasksMap.Count > 0)
            {
                foreach (KeyValuePair <String, IStateTransferTask> task in collectionTasksMap)
                {
                    try
                    {
                        StateTxfrStatus previousStatus = task.Value.Status;

                        task.Value.OnShardConnected(shard);

                        if (previousStatus == StateTxfrStatus.Failed && task.Value.Status == StateTxfrStatus.Waiting)
                        {
                            waitingColTasks.AddLast(task.Key);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (LoggerManager.Instance.StateXferLogger.IsErrorEnabled)
                        {
                            LoggerManager.Instance.StateXferLogger.Error("DatabaseStateTransferManager.OnShardConnected()", ex.Message);
                        }
                    }
                }
            }
            else
            {
                if (LoggerManager.Instance.StateXferLogger.IsInfoEnabled)
                {
                    LoggerManager.Instance.StateXferLogger.Info("DatabaseStateTransferManager.OnShardConnected()", "No task to update ");
                }
            }
        }
Exemplo n.º 2
0
        private bool IsCompleted()
        {
            bool            isComplete   = true;
            StateTxfrStatus dbTaskStatus = StateTxfrStatus.CompletedSuccessfully;

            foreach (KeyValuePair <String, IStateTransferTask> pair in collectionTasksMap)
            {
                if (pair.Value.Status.Equals(StateTxfrStatus.Failed))
                {
                    dbTaskStatus = StateTxfrStatus.Failed;
                }

                if (pair.Value.Status.Equals(StateTxfrStatus.Waiting) || pair.Value.Status.Equals(StateTxfrStatus.Running))
                {
                    isComplete = false;
                    break;
                }
            }

            if (isComplete)
            {
                this.Status = dbTaskStatus;
            }
            return(isComplete);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Verify NodeStateTransferManager if no task is running/waiting/failed then state transfer is compelted on this node.
        /// </summary>
        /// <returns></returns>
        private void VerifyNST()
        {
            bool isComplete = true;

            if (this.dbStateTxferMgrMap != null && dbStateTxferMgrMap.Count > 0)
            {
                foreach (var pair in dbStateTxferMgrMap)
                {
                    StateTxfrStatus status = pair.Value.Status;
                    if (status == StateTxfrStatus.Running || status == StateTxfrStatus.Failed || status == StateTxfrStatus.Waiting)
                    {
                        isComplete = false;
                        break;
                    }
                }

                if (isComplete)
                {
                    lock (_inStTxfrMutex)
                    {
                        //_replication.NodeIsInStateTxfr = false;

                        IsTaskAvailable = false;
                    }

                    if (LoggerManager.Instance.StateXferLogger != null && LoggerManager.Instance.StateXferLogger.IsInfoEnabled)
                    {
                        LoggerManager.Instance.StateXferLogger.Info("NodeStateTxfrMgr.IsCompleted()", "State transfer of the node " + this.context.LocalAddress + " completed successfully.");
                    }
                }
            }
        }