コード例 #1
0
        public void SendTransactionToSlaves(ClusterTransaction txn)
        {
            var msg = txn.AsMessage();

            foreach (var slave in _slaves)
            {
                msg.WriteTo(slave.TcpClient.GetStream());
            }
        }
コード例 #2
0
ファイル: NodeCore.cs プロジェクト: zhuliangbing/BrightstarDB
 private void QueueTransaction(ClusterTransaction txn)
 {
     if (txn is ClusterUpdateTransaction)
     {
         var cut = txn as ClusterUpdateTransaction;
         _storeInfo[txn.StoreId].Queue(txn.JobId);
         _serverCore.QueueTransaction(txn.JobId, txn.StoreId,
                                      cut.Preconditions, cut.Deletes,
                                      cut.Inserts);
     }
     else if (txn is ClusterSparqlTransaction)
     {
         var sut = txn as ClusterSparqlTransaction;
         _storeInfo[txn.StoreId].Queue(txn.JobId);
         _serverCore.QueueUpdate(txn.JobId, txn.StoreId, sut.Expression);
     }
 }
コード例 #3
0
ファイル: NodeCore.cs プロジェクト: zhuliangbing/BrightstarDB
 public bool ProcessSyncTransaction(ClusterTransaction txn)
 {
     if (_state == CoreState.SyncToMaster)
     {
         if (HaveTransaction(txn))
         {
             // Already have a job with this GUID
             return(true);
         }
         if (HavePrecedingTransaction(txn))
         {
             QueueTransaction(txn);
             return(true);
         }
     }
     return(false);
 }
コード例 #4
0
ファイル: NodeCore.cs プロジェクト: zhuliangbing/BrightstarDB
        public bool ProcessSlaveTransaction(ClusterTransaction txn)
        {
            // check we have store info
            if (!_storeInfo.ContainsKey(txn.StoreId))
            {
                // we need to create the store
                CreateStore(txn.StoreId);
            }

            if (!HavePrecedingTransaction(txn))
            {
                if (_state == CoreState.SyncToMaster)
                {
                    // TODO: buffer this transaction locally to replay when sync is finished
                    return(true);
                }
                // We must have missed at least one message. Resync to master
                StartSyncToMaster();
                return(false);
            }
            QueueTransaction(txn);
            return(true);
        }
コード例 #5
0
ファイル: NodeComms.cs プロジェクト: GTuritto/BrightstarDB
 public void SendTransactionToSlaves(ClusterTransaction txn)
 {
     var msg = txn.AsMessage();
     foreach(var slave in _slaves)
     {
         msg.WriteTo(slave.TcpClient.GetStream());
     }
 }
コード例 #6
0
ファイル: NodeCore.cs プロジェクト: zhuliangbing/BrightstarDB
 private bool HavePrecedingTransaction(ClusterTransaction txn)
 {
     return(_storeInfo[txn.StoreId].Last.Equals(txn.PrevTxnId));
 }
コード例 #7
0
ファイル: NodeCore.cs プロジェクト: zhuliangbing/BrightstarDB
 private bool HaveTransaction(ClusterTransaction txn)
 {
     // TODO: If not in cached transaction list, check back through txn log
     return(_storeInfo[txn.StoreId].HaveTransaction(txn.JobId));
 }
コード例 #8
0
ファイル: NodeCore.cs プロジェクト: GTuritto/BrightstarDB
 private bool HavePrecedingTransaction(ClusterTransaction txn)
 {
     return _storeInfo[txn.StoreId].Last.Equals(txn.PrevTxnId);
 }
コード例 #9
0
ファイル: NodeCore.cs プロジェクト: GTuritto/BrightstarDB
 private void QueueTransaction(ClusterTransaction txn)
 {
     if (txn is ClusterUpdateTransaction)
     {
         var cut = txn as ClusterUpdateTransaction;
         _storeInfo[txn.StoreId].Queue(txn.JobId);
         _serverCore.QueueTransaction(txn.JobId, txn.StoreId,
                                      cut.Preconditions, cut.Deletes,
                                      cut.Inserts);                
     } else if (txn is ClusterSparqlTransaction)
     {
         var sut = txn as ClusterSparqlTransaction;
         _storeInfo[txn.StoreId].Queue(txn.JobId);
         _serverCore.QueueUpdate(txn.JobId, txn.StoreId, sut.Expression);
     }
 }
コード例 #10
0
ファイル: NodeCore.cs プロジェクト: GTuritto/BrightstarDB
        public bool ProcessSlaveTransaction(ClusterTransaction txn)
        {
            // check we have store info
            if (!_storeInfo.ContainsKey(txn.StoreId))
            {
                // we need to create the store
                CreateStore(txn.StoreId);
            }

            if (!HavePrecedingTransaction(txn))
            {
                if (_state == CoreState.SyncToMaster)
                {
                    // TODO: buffer this transaction locally to replay when sync is finished
                    return true;
                }
                // We must have missed at least one message. Resync to master
                StartSyncToMaster();
                return false;
            } 
            QueueTransaction(txn);
            return true;
        }
コード例 #11
0
ファイル: NodeCore.cs プロジェクト: GTuritto/BrightstarDB
 private bool HaveTransaction(ClusterTransaction txn)
 {
     // TODO: If not in cached transaction list, check back through txn log
     return _storeInfo[txn.StoreId].HaveTransaction(txn.JobId);
 }
コード例 #12
0
ファイル: NodeCore.cs プロジェクト: GTuritto/BrightstarDB
 public bool ProcessSyncTransaction(ClusterTransaction txn)
 {
     if(_state == CoreState.SyncToMaster)
     {
         if (HaveTransaction(txn))
         {
             // Already have a job with this GUID
             return true;
         }
         if (HavePrecedingTransaction(txn))
         {
             QueueTransaction(txn);
             return true;
         }
     }
     return false;
 }