コード例 #1
0
ファイル: MachineState.cs プロジェクト: yuexiaoyun/cloudb
 public static ServiceStatusTracker GetServiceTracker(IServiceAddress[] managers, IServiceConnector connector)
 {
     lock (TrackerCacheMap) {
         ServiceStatusTracker picked = null;
         int pickedCount             = 0;
         for (int i = 0; i < managers.Length; ++i)
         {
             ServiceStatusTracker g;
             if (TrackerCacheMap.TryGetValue(managers[i], out g))
             {
                 picked = g;
                 ++pickedCount;
             }
         }
         if (picked == null)
         {
             picked = new ServiceStatusTracker(connector);
             for (int i = 0; i < managers.Length; ++i)
             {
                 TrackerCacheMap[managers[i]] = picked;
             }
         }
         else if (pickedCount != managers.Length)
         {
             for (int i = 0; i < managers.Length; ++i)
             {
                 TrackerCacheMap[managers[i]] = picked;
             }
         }
         return(picked);
     }
 }
コード例 #2
0
        internal MessageCommunicator(IServiceConnector network, ServiceStatusTracker tracker)
        {
            this.network = network;
            this.tracker = tracker;

            queueMap = new Dictionary <IServiceAddress, RetryMessageQueue>();
        }
コード例 #3
0
        internal MessageCommunicator(IServiceConnector network, ServiceStatusTracker tracker)
        {
            this.network = network;
            this.tracker = tracker;

            queueMap = new Dictionary<IServiceAddress, RetryMessageQueue>();
        }
コード例 #4
0
        public NetworkTreeSystem(IServiceConnector connector, IServiceAddress[] managerAddresses,
		                         INetworkCache networkCache, ServiceStatusTracker serviceTracker)
        {
            this.connector = connector;
            this.managerAddresses = managerAddresses;
            this.networkCache = networkCache;
            this.serviceTracker = serviceTracker;

            failureFloodControl = new Dictionary<IServiceAddress, DateTime>();
            failureFloodControlBidc = new Dictionary<IServiceAddress, DateTime>();
        }
コード例 #5
0
ファイル: RootService.cs プロジェクト: erpframework/cloudb
        protected RootService(IServiceConnector connector, IServiceAddress address)
        {
            this.connector = connector;
            this.address = address;

            lockDb = new Dictionary<string, PathAccess>(128);
            pathInfoMap = new Dictionary<string, PathInfo>(128);
            loadPathInfoQueue = new List<PathInfo>(64);

            serviceTracker = new ServiceStatusTracker(connector);
            serviceTracker.StatusChange += ServiceTracker_OnStatusChange;
        }
コード例 #6
0
            public HeartbeatThread(ServiceStatusTracker tracker, IServiceConnector connector,
                                   List <TrackedService> monitoredServers)
            {
                this.tracker          = tracker;
                this.connector        = connector;
                this.monitoredServers = monitoredServers;

                thread = new Thread(Execute);
                thread.IsBackground = true;
                thread.Name         = "StatusTracker::Heatbeat";
                thread.Start();
            }
コード例 #7
0
ファイル: NetworkClient.cs プロジェクト: yuexiaoyun/cloudb
        public void ConnectNetwork()
        {
            if (IsConnected)
            {
                throw new ApplicationException("Already connected");
            }

            serviceTracker             = new ServiceStatusTracker(connector);
            treeSystem                 = new NetworkTreeSystem(connector, managerAddresses, localNetworkCache, serviceTracker);
            treeSystem.NodeHeapMaxSize = MaxTransactionNodeCacheHeapSize;
            connected = true;
        }
コード例 #8
0
ファイル: ManagerService.cs プロジェクト: erpframework/cloudb
        protected ManagerService(IServiceConnector connector, IServiceAddress address)
        {
            this.connector = connector;
            this.address = address;

            blockServersMap = new Dictionary<long, BlockServiceInfo>();
            blockServersList = new List<BlockServiceInfo>();
            rootServersList = new List<RootServiceInfo>();
            managerServersList = new List<ManagerServiceInfo>();

            rng = new Random();

            serviceTracker = new ServiceStatusTracker(connector);

            blockUpdateTask = new BlockUpdateTask(this);
        }
コード例 #9
0
        internal ReplicatedValueStore(IServiceAddress address,
		                              IServiceConnector connector,
		                              IDatabase localDb, Object dbWriteLock,
		                              ServiceStatusTracker tracker)
        {
            this.address = address;
            this.connector = connector;
            blockDatabase = localDb;
            blockDbWriteLock = dbWriteLock;
            this.tracker = tracker;
            comm = new MessageCommunicator(connector, tracker);

            cluster = new List<IServiceAddress>(9);
            ClearAllMachines();

            // Add listener for service status updates,
            tracker.StatusChange += TrackerOnStatusChange;
        }
コード例 #10
0
ファイル: NetworkClient.cs プロジェクト: yuexiaoyun/cloudb
        public void Disconnect()
        {
            if (connector != null)
            {
                try {
                    connector.Close();
                } finally {
                    try {
                        serviceTracker.Stop();
                    } finally {
                        connector      = null;
                        serviceTracker = null;
                        treeSystem     = null;
                    }

                    connected = false;
                }
            }
        }
コード例 #11
0
ファイル: NetworkClient.cs プロジェクト: erpframework/cloudb
        public void ConnectNetwork()
        {
            if (IsConnected)
                throw new ApplicationException("Already connected");

            serviceTracker = new ServiceStatusTracker(connector);
            treeSystem = new NetworkTreeSystem(connector, managerAddresses, localNetworkCache, serviceTracker);
            treeSystem.NodeHeapMaxSize = MaxTransactionNodeCacheHeapSize;
            connected = true;
        }
コード例 #12
0
ファイル: NetworkClient.cs プロジェクト: erpframework/cloudb
        public void Disconnect()
        {
            if (connector != null) {
                try {
                    connector.Close();
                } finally {
                    try {
                        serviceTracker.Stop();
                    } finally {
                        connector = null;
                        serviceTracker = null;
                        treeSystem = null;
                    }

                    connected = false;
                }
            }
        }
コード例 #13
0
ファイル: RootService.cs プロジェクト: erpframework/cloudb
            public PathConnection(RootService service, PathInfo pathInfo, IServiceConnector connector, IServiceAddress[] managerServers,
			                      INetworkCache cache, ServiceStatusTracker statusTracker)
            {
                this.service = service;
                this.pathInfo = pathInfo;
                treeSystem = new NetworkTreeSystem(connector, managerServers, cache, statusTracker);
            }
コード例 #14
0
ファイル: MachineState.cs プロジェクト: erpframework/cloudb
 public static ServiceStatusTracker GetServiceTracker(IServiceAddress[] managers, IServiceConnector connector)
 {
     lock (TrackerCacheMap) {
         ServiceStatusTracker picked = null;
         int pickedCount = 0;
         for (int i = 0; i < managers.Length; ++i) {
             ServiceStatusTracker g;
             if (TrackerCacheMap.TryGetValue(managers[i], out g)) {
                 picked = g;
                 ++pickedCount;
             }
         }
         if (picked == null) {
             picked = new ServiceStatusTracker(connector);
             for (int i = 0; i < managers.Length; ++i) {
                 TrackerCacheMap[managers[i]] = picked;
             }
         } else if (pickedCount != managers.Length) {
             for (int i = 0; i < managers.Length; ++i) {
                 TrackerCacheMap[managers[i]] = picked;
             }
         }
         return picked;
     }
 }
コード例 #15
0
            public HeartbeatThread(ServiceStatusTracker tracker, IServiceConnector connector,
			                       List<TrackedService> monitoredServers)
            {
                this.tracker = tracker;
                this.connector = connector;
                this.monitoredServers = monitoredServers;

                thread = new Thread(Execute);
                thread.IsBackground = true;
                thread.Name = "StatusTracker::Heatbeat";
                thread.Start();
            }