Example #1
0
        private Response HandleTransactionMessage(Message txnMessage)
        {
            bool handledOk = false;

            switch (txnMessage.Header.ToLowerInvariant())
            {
            case "txn":
                var updateTransaction = ClusterUpdateTransaction.FromMessage(txnMessage);
                handledOk = _requestHandler.ProcessSlaveTransaction(updateTransaction);
                break;

            case "spu":
                var sparqlTransaction = ClusterSparqlTransaction.FromMessage(txnMessage);
                handledOk = _requestHandler.ProcessSlaveTransaction(sparqlTransaction);
                break;

            case "+store":
                handledOk = _requestHandler.CreateStore(txnMessage.Args);
                break;

            case "-store":
                handledOk = _requestHandler.DeleteStore(txnMessage.Args);
                break;
            }
            return(new Response(handledOk ? Message.ACK : Message.NAK));
        }
Example #2
0
        /// <summary>
        /// Handler function for messages that can be received by the slave
        /// through the initial sync connection with the master
        /// </summary>
        /// <param name="msg">The message received</param>
        /// <returns>The response to send to the message</returns>
        private Response HandleSyncMessage(Message msg)
        {
            bool handledOk = false;

            switch (msg.Header.ToLowerInvariant())
            {
            case "txn":
                var txn = ClusterUpdateTransaction.FromMessage(msg);
                handledOk = _requestHandler.ProcessSyncTransaction(txn);
                break;

            case "+store":
                handledOk = _requestHandler.CreateStore(msg.Args);
                break;

            case "-store":
                handledOk = _requestHandler.DeleteStore(msg.Args);
                break;

            case "endsync":
                var syncStatus = msg.Args.Split(' ')[0];
                _requestHandler.SlaveSyncCompleted(syncStatus);
                handledOk = true;
                break;
            }
            if (handledOk)
            {
                return(new Response(Message.ACK));
            }
            return(new Response(Message.NAK, true));
        }
Example #3
0
 private bool SendTransactions(SyncContext context, Func <SyncContext, Message, bool> messageSink, IEnumerable <ITransactionInfo> transactionsToSend, string storeId,
                               Guid prevId)
 {
     foreach (var txn in transactionsToSend.Where(t => t.TransactionStatus == TransactionStatus.CompletedOk))
     {
         if (txn.TransactionType == TransactionType.UpdateTransaction)
         {
             var job = _serverCore.LoadTransaction(storeId, txn);
             if (job is UpdateTransaction)
             {
                 var updateJob       = job as UpdateTransaction;
                 var syncTransaction = new ClusterUpdateTransaction
                 {
                     StoreId       = storeId,
                     PrevTxnId     = prevId,
                     JobId         = txn.JobId,
                     Preconditions = updateJob.Preconditions,
                     Deletes       = updateJob.DeletePatterns,
                     Inserts       = updateJob.InsertData
                 };
                 if (!messageSink(context, syncTransaction.AsMessage()))
                 {
                     // If message sink stops accepting messages, fail the entire sync process immediately
                     return(false);
                 }
             }
             else
             {
                 return(false);
             }
         }
         else if (txn.TransactionType == TransactionType.SparqlUpdateTransaction)
         {
             var job = _serverCore.LoadTransaction(storeId, txn);
             if (job is SparqlUpdateJob)
             {
                 var sparqlJob       = job as SparqlUpdateJob;
                 var syncTransaction = new ClusterSparqlTransaction
                 {
                     StoreId    = storeId,
                     PrevTxnId  = prevId,
                     JobId      = txn.JobId,
                     Expression = sparqlJob.Expression
                 };
                 if (!messageSink(context, syncTransaction.AsMessage()))
                 {
                     // If message sink stops accepting messages, fail the entire sync process immediately
                     return(false);
                 }
             }
         }
         else
         {
             return(false);
         }
     }
     return(true);
 }
Example #4
0
        public Guid ProcessTransaction(ClusterUpdateTransaction txn)
        {
            if (_state != CoreState.RunningMaster)
            {
                throw new NotMasterException();
            }

            // Do some validation
            // Check store exists
            txn.JobId     = Guid.NewGuid();
            txn.PrevTxnId = _storeInfo[txn.StoreId].Queue(txn.JobId);
            _serverCore.QueueTransaction(txn.JobId, txn.StoreId, txn.Preconditions, txn.Deletes, txn.Inserts);
            _nodeComms.SendTransactionToSlaves(txn);
            return(txn.JobId);
        }
 public static ClusterUpdateTransaction FromMessage(Message msg)
 {
     var args = msg.Args.Split(' ');
     var txn = new ClusterUpdateTransaction
                   {
                       StoreId = args[0],
                       JobId = Guid.Parse(args[1]),
                       PrevTxnId = Guid.Parse(args[2]),
                   };
     using(var reader = msg.GetContentReader())
     {
         txn.Preconditions = ReadSection(reader);
         txn.Deletes = ReadSection(reader);
         txn.Inserts = ReadSection(reader);
     }
     return txn;
 }
Example #6
0
        public static ClusterUpdateTransaction FromMessage(Message msg)
        {
            var args = msg.Args.Split(' ');
            var txn  = new ClusterUpdateTransaction
            {
                StoreId   = args[0],
                JobId     = Guid.Parse(args[1]),
                PrevTxnId = Guid.Parse(args[2]),
            };

            using (var reader = msg.GetContentReader())
            {
                txn.Preconditions = ReadSection(reader);
                txn.Deletes       = ReadSection(reader);
                txn.Inserts       = ReadSection(reader);
            }
            return(txn);
        }
 public JobInfo ExecuteTransaction(string storeName, string preconditions, string deletePatterns, string insertData)
 {
     try
     {
         var ctxn = new ClusterUpdateTransaction()
                        {
                            StoreId = storeName,
                            Deletes = deletePatterns,
                            Inserts = insertData,
                            Preconditions = preconditions
                        };
         var jobId = NodeCore.ProcessTransaction(ctxn);
         return new JobInfo { JobId = jobId.ToString(), JobPending = true };
     }
     catch (Exception ex)
     {
         Logging.LogError(BrightstarDB.BrightstarEventId.ServerCoreException, "Error queueing transaction {0} {1} {2}", storeName, deletePatterns, insertData);
         throw new BrightstarClientException("Error queueing transaction in store " + storeName + ". " + ex.Message, ex);
     }
 }
Example #8
0
 private bool SendTransactions(SyncContext context, Func<SyncContext, Message, bool> messageSink, IEnumerable<ITransactionInfo> transactionsToSend, string storeId,
                               Guid prevId)
 {
     foreach (var txn in transactionsToSend.Where(t => t.TransactionStatus == TransactionStatus.CompletedOk))
     {
         if (txn.TransactionType == TransactionType.UpdateTransaction)
         {
             var job = _serverCore.LoadTransaction(storeId, txn);
             if (job is UpdateTransaction)
             {
                 var updateJob = job as UpdateTransaction;
                 var syncTransaction = new ClusterUpdateTransaction
                                           {
                                               StoreId = storeId,
                                               PrevTxnId = prevId,
                                               JobId = txn.JobId,
                                               Preconditions = updateJob.Preconditions,
                                               Deletes = updateJob.DeletePatterns,
                                               Inserts = updateJob.InsertData
                                           };
                 if (!messageSink(context, syncTransaction.AsMessage()))
                 {
                     // If message sink stops accepting messages, fail the entire sync process immediately
                     return false;
                 }
             }
             else
             {
                 return false;
             }
         }
         else if (txn.TransactionType == TransactionType.SparqlUpdateTransaction)
         {
             var job = _serverCore.LoadTransaction(storeId, txn);
             if (job is SparqlUpdateJob)
             {
                 var sparqlJob = job as SparqlUpdateJob;
                 var syncTransaction = new ClusterSparqlTransaction
                                           {
                                               StoreId = storeId,
                                               PrevTxnId = prevId,
                                               JobId = txn.JobId,
                                               Expression = sparqlJob.Expression
                                           };
                 if (!messageSink(context, syncTransaction.AsMessage()))
                 {
                     // If message sink stops accepting messages, fail the entire sync process immediately
                     return false;
                 }
             }
         }
         else
         {
             return false;
         }
     }
     return true;
 }
Example #9
0
        public Guid ProcessTransaction(ClusterUpdateTransaction txn)
        {
            if (_state != CoreState.RunningMaster)
            {
                throw new NotMasterException();
            }

            // Do some validation
            // Check store exists
            txn.JobId = Guid.NewGuid();
            txn.PrevTxnId = _storeInfo[txn.StoreId].Queue(txn.JobId);
            _serverCore.QueueTransaction(txn.JobId, txn.StoreId, txn.Preconditions, txn.Deletes, txn.Inserts);
            _nodeComms.SendTransactionToSlaves(txn);
            return txn.JobId;
        }
Example #10
0
 public void LogTransaction(ClusterUpdateTransaction txn)
 {
     throw new System.NotImplementedException();
 }
 public void LogTransaction(ClusterUpdateTransaction txn)
 {
     throw new System.NotImplementedException();
 }