示例#1
0
        /// <summary>
        /// Handle Transfer Bucket, Actually transfer bucket data to requesting node/shard
        /// </summary>
        /// <param name="operation"></param>
        /// <returns></returns>
        private object HandleTransferBucketKeys(IStateTransferOperation operation)
        {
            ICorresponder corrosponder = null;

            lock (collectionCorresponderMap)
            {
                //if (!collectionCorresponderMap.ContainsKey(operation.TaskIdentity))
                //{
                //    if (LoggerManager.Instance.StateXferLogger.IsDebugEnabled)
                //        LoggerManager.Instance.StateXferLogger.Debug("DatabaseStateTransferManager.HandleTransferBucketKeys","Creating StateTxferCorrosponder for :"+operation.TaskIdentity.ToString());

                //    collectionCorresponderMap[operation.TaskIdentity] = new StateTxfrCorresponder(context, this, operation.TaskIdentity);//.DBName, operation.TaskIdentity.ColName, operation.TaskIdentity.NodeInfo, operation.TaskIdentity.Type);
                //}

                corrosponder = collectionCorresponderMap[operation.TaskIdentity];
            }

            if (corrosponder == null)
            {
                Exception ex = new StateTransferException("No corrosponder found for :" + operation.TaskIdentity.ToString());
                if (LoggerManager.Instance.StateXferLogger.IsErrorEnabled)
                {
                    LoggerManager.Instance.StateXferLogger.Error("DatabaseStateTransferManager.HandleTransferBucketKeys", ex);
                }
                return(ex);
            }

            return(corrosponder.GetBucketKeys(operation.Params));
        }
示例#2
0
 /// <summary>
 /// Handle Signal End Of State Transfer, remove corrosponder associated with state transfer
 /// </summary>
 /// <param name="operation"></param>
 private void HandleDestroyCorresponder(IStateTransferOperation operation)
 {
     if (this.collectionCorresponderMap != null)
     {
         lock (collectionCorresponderMap)
         {
             if (collectionCorresponderMap.ContainsKey(operation.TaskIdentity))
             {
                 ICorresponder cor = collectionCorresponderMap[operation.TaskIdentity] as StateTxfrCorresponder;
                 if (cor != null)
                 {
                     //mark transfer compelete and remove from corresponderMap
                     cor.TransferCompleted();
                     collectionCorresponderMap.Remove(operation.TaskIdentity);
                 }
             }
             //else
             //{
             //   if (LoggerManager.Instance.StateXferLogger != null && LoggerManager.Instance.StateXferLogger.IsErrorEnabled)
             //   {
             //     LoggerManager.Instance.StateXferLogger.Error("DatabaseStateTransferManager.HandleSignalEndOfStateTransfer", "Coresponder not found for " + operation.TaskIdentity.ToString());
             //}
             //}
             OnCorresponderDestroyed();
         }
     }
 }
示例#3
0
        /// <summary>
        /// AckState Transfer Compelete for buckets, remove buckets being transfered from local bucket list on this node
        /// </summary>
        /// <param name="operation"></param>
        /// <returns></returns>
        private object HandleAckBucketTxfer(IStateTransferOperation operation)
        {
            try
            {
                lock (collectionCorresponderMap)
                {
                    if (!collectionCorresponderMap.ContainsKey(operation.TaskIdentity))
                    {
                        throw new Alachisoft.NosDB.Core.Toplogies.Exceptions.StateTransferException("no corrosponder found for " + operation.TaskIdentity.ToString());
                    }
                }

                ICorresponder corrosponder = collectionCorresponderMap[operation.TaskIdentity];

                corrosponder.BucketTransferCompeleted(operation.Params);
            }
            catch (Exception anyException)
            {
                if (LoggerManager.Instance.StateXferLogger != null && LoggerManager.Instance.StateXferLogger.IsErrorEnabled)
                {
                    LoggerManager.Instance.StateXferLogger.Error("DatabaseStateTransferManager.handleAckStateTxfr()", anyException.ToString());
                }

                return(anyException);
            }

            return(null);
        }
示例#4
0
        internal void OnDropCollection(String collection)
        {
            if (LoggerManager.Instance.StateXferLogger != null && LoggerManager.Instance.StateXferLogger.IsInfoEnabled)
            {
                LoggerManager.Instance.StateXferLogger.Info("DatabaseStateTransferManager.OnDropCollection()", "collection " + collection + " being dropped");
            }

            IStateTransferTask task = null;

            lock (_schMutex)
            {
                lock (collectionTasksMap)
                {
                    if (collectionTasksMap.ContainsKey(collection))
                    {
                        task = collectionTasksMap[collection];
                        collectionTasksMap.Remove(collection);
                    }
                }

                if (task != null)
                {
                    waitingColTasks.Remove(collection);
                    runningColTasks.Remove(collection);
                    task.Stop();
                }
            }

            lock (collectionCorresponderMap)
            {
                foreach (KeyValuePair <StateTransferIdentity, ICorresponder> pair in collectionCorresponderMap)
                {
                    if (pair.Key.ColName.Equals(collection, StringComparison.OrdinalIgnoreCase))
                    {
                        ICorresponder crossponder = collectionCorresponderMap[pair.Key];

                        if (crossponder != null)
                        {
                            crossponder.Dispose();

                            if (resourceManager != null)
                            {
                                resourceManager.UnregisterResource(crossponder.ResourceID);
                            }
                        }
                    }
                }
            }

            VerifyDST();
        }
示例#5
0
        public void Stop()
        {
            lock (_schMutex)
            {
                if (LoggerManager.Instance.StateXferLogger != null && LoggerManager.Instance.StateXferLogger.IsInfoEnabled)
                {
                    LoggerManager.Instance.StateXferLogger.Info("DatabaseStateTransferManager.Stop()", "State Transfer Stopping for " + this.dbName);
                }


                foreach (var ColName in runningColTasks)
                {
                    IStateTransferTask task = collectionTasksMap[ColName];

                    if (task != null)
                    {
                        task.Stop();
                    }
                }

                collectionTasksMap.Clear();

                if (LoggerManager.Instance.StateXferLogger != null && LoggerManager.Instance.StateXferLogger.IsInfoEnabled)
                {
                    LoggerManager.Instance.StateXferLogger.Info("DatabaseStateTransferManager.Stop()", "State Transfer Stopped for " + this.dbName);
                }
            }

            lock (collectionCorresponderMap)
            {
                foreach (KeyValuePair <StateTransferIdentity, ICorresponder> pair in collectionCorresponderMap)
                {
                    ICorresponder crossponder = collectionCorresponderMap[pair.Key];

                    if (crossponder != null)
                    {
                        if (resourceManager != null)
                        {
                            resourceManager.UnregisterResource(crossponder.ResourceID);
                        }

                        crossponder.Dispose();
                    }
                }

                collectionCorresponderMap.Clear();
            }
        }
示例#6
0
        /// <summary>
        /// Handle Transfer Bucket, Actually transfer bucket data to requesting node/shard
        /// </summary>
        /// <param name="operation"></param>
        /// <returns></returns>
        private object HandleTransferBucketData(IStateTransferOperation operation)
        {
            ICorresponder corrosponder = null;

            lock (collectionCorresponderMap)
            {
                if (collectionCorresponderMap.ContainsKey(operation.TaskIdentity))
                {
                    corrosponder = collectionCorresponderMap[operation.TaskIdentity];
                }
            }

            if (corrosponder == null)
            {
                Exception ex = new StateTransferException("No corrosponder found for :" + operation.TaskIdentity.ToString());
                if (LoggerManager.Instance.StateXferLogger.IsErrorEnabled)
                {
                    LoggerManager.Instance.StateXferLogger.Error("DatabaseStateTransferManager.HandleTransferBucketData", ex);
                }
                return(ex);
            }
            return(corrosponder.GetBucketData(operation.Params));
        }