/// <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)); }
/// <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(); } } }
/// <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); }
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(); }
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(); } }
/// <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)); }