コード例 #1
0
        public BucketKeysEnumerator(string dbName, string colName, string queryString, NodeContext context)
        {
            _dbName  = dbName;
            _colName = colName;
            if (context != null)
            {
                _databasesManager = context.DatabasesManager;
            }

            Alachisoft.NosDB.Common.Server.Engine.Impl.Query query = new Alachisoft.NosDB.Common.Server.Engine.Impl.Query();
            query.QueryText = queryString;

            Alachisoft.NosDB.Common.Server.Engine.Impl.ReadQueryOperation readQueryOperation = new Alachisoft.NosDB.Common.Server.Engine.Impl.ReadQueryOperation();
            readQueryOperation.Database   = dbName;
            readQueryOperation.Collection = colName;

            readQueryOperation.Query = query;
            if (_databasesManager != null)
            {
                response = _databasesManager.ExecuteReader(readQueryOperation);
            }

            if (response == null || !response.IsSuccessfull)
            {
                throw new Exception(Common.ErrorHandling.ErrorMessages.GetErrorMessage(response.ErrorCode) + ":Query failed on collection" + colName);
            }

            if (response != null && response.DataChunk != null && response.DataChunk.Documents != null && response.DataChunk.Documents.Count > 0)
            {
                lastDataChunk            = response.DataChunk;
                isLastChunk              = response.DataChunk.IsLastChunk;
                this.dataChunkEnumerator = response.DataChunk.Documents.GetEnumerator();
            }
        }
コード例 #2
0
        internal StateTxfrCorresponder(NodeContext context, IDispatcher dispatcher, StateTransferIdentity identity, bool isLocal)//,String dbName,String colName,NodeIdentity requestingShard, StateTransferType transferType)
        {
            _context    = context;
            _dispatcher = dispatcher;
            _isLocal    = isLocal;
            if (_context != null)
            {
                _databasesManager = _context.DatabasesManager;
            }

            corresponderIdentity = identity;
            _currentBucketkeys   = new ClusteredList <DocumentKey>();
            // Create Collection for keeping keys being transfered
            collectionCreated = CreateBucketKeysCollection();

            transferedBuckets = new ConcurrentQueue <IResourceRemovalInfo>();

            _statsIdentity = new StatsIdentity(context.LocalShardName, corresponderIdentity.DBName);
            loggingModule  = corresponderIdentity.DBName + ":" + corresponderIdentity.ColName + ":" + GetType().ToString();

            _resourceID = Guid.NewGuid().ToString();
        }
コード例 #3
0
 internal void Initialize(IDatabasesManager store)
 {
     _store         = store.GetDatabase(MiscUtil.SYSTEM_DATABASE);
     _isInitialized = true;
 }
コード例 #4
0
        //BucketRemovalInfo info;
        //IDatabasesManager _databasesManager;

        //public BucketRemoval(BucketRemovalInfo info, NodeContext context)
        //{
        //    this.info = info;
        //    if (context != null)
        //        _databasesManager = context.DatabasesManager;

        //}

        public static void Execute(BucketRemovalInfo info, IDatabasesManager _databasesManager, bool forLocal)
        {
            if (info.KeysEnumrator == null)
            {
                if (LoggerManager.Instance.StateXferLogger != null && LoggerManager.Instance.StateXferLogger.IsDebugEnabled)
                {
                    LoggerManager.Instance.StateXferLogger.Debug("AysncBucketRemoval.Execute", "Keys for Bucket " + info.BucketID + " is null");
                }
                return;
            }

            var operation = new LocalDeleteOperation();

            operation.OperationType = DatabaseOperationType.StateTransferDelete;
            operation.Collection    = info.Collection;
            operation.Database      = info.Database;
            operation.Documents     = new List <IJSONDocument>();
            operation.Context       = new OperationContext();
            operation.Context.Add(Common.Enum.ContextItem.AllowCappedDelete, true);
            if (forLocal)
            {
                operation.Context.Add(ContextItem.DoNotLog, true);
            }
            while (info.KeysEnumrator.MoveNext())
            {
                var docKey = info.KeysEnumrator.Current;
                if (docKey == null)
                {
                    continue;
                }


                var jdoc = new JSONDocument {
                    Key = docKey.Value as string
                };


                operation.Documents.Add(jdoc);
            }
            try
            {
                IDBResponse resposne = null;
                if (_databasesManager != null)
                {
                    resposne = _databasesManager.DeleteDocuments(operation);
                }

                if (resposne != null && !resposne.IsSuccessfull)
                {
                    throw new DatabaseException(ErrorMessages.GetErrorMessage(resposne.ErrorCode, resposne.ErrorParams));
                }
            }
            catch (Exception ex)
            {
                //Log AsyncBucketRemovalTask.Excetue fail to delete key on state txfer completed
                LoggerManager.Instance.StateXferLogger.Error("AsyncBucketRemovalTask", ex);
            }

            //try
            //{
            //    OperationParam param = new OperationParam();
            //    param.SetParamValue(ParamName.BucketID, info.BucketID);

            //    if (_databasesManager != null)
            //        _databasesManager.OnOperationRecieved(new StateTransferOperation(info.TaskIdentity, StateTransferOpCode.RemoveLocalBucket, param));
            //}
            //catch (Exception ex)
            //{
            //    if (LoggerManager.Instance.StateXferLogger != null && LoggerManager.Instance.StateXferLogger.IsErrorEnabled)
            //        LoggerManager.Instance.StateXferLogger.Error("AysncBucketRemoval.Execute", ex.Message);
            //}
        }
コード例 #5
0
 public DatabasesController(IDatabasesManager databasesManager)
 {
     this.databasesManager = databasesManager;
 }