Beispiel #1
0
 /// <summary>
 /// Создать объект репликации
 /// </summary>
 /// <param name="replicationInfo">Информация о реплицируемом объекте</param>
 public void CreateReplicationObject(ReplicationInfo replicationInfo)
 {
     lock (_replicationObjects)
     {
         _replicationObjects.Add(replicationInfo);
     }
 }
Beispiel #2
0
 /// <summary>
 /// Удалить объект репликации
 /// </summary>
 /// <param name="replicationInfo">Информация о реплицируемом объекте</param>
 public void DeleteReplicationObject(ReplicationInfo replicationInfo)
 {
     lock (_replicationObjects)
     {
         _replicationObjects.RemoveAll(r => String.Compare(r.Uid.ToString(), replicationInfo.Uid.ToString(), StringComparison.OrdinalIgnoreCase) == 0);
     }
 }
        /// <summary>
        /// Уведомить об изменении объекта
        /// </summary>
        /// <param name="replicationInfo">Информация о реплицируемом объекте</param>
        /// <param name="operationType">Тип операции репликации</param>
        public void SimulateObjectChanged(ReplicationInfo replicationInfo, OperationType operationType)
        {
            var newProperties = replicationInfo.Properties;
            var uid           = replicationInfo.Uid.ToString();

            if (typeof(T).FullName == replicationInfo.FullName)
            {
                IReplicationObject replicationObject;
                if (operationType == OperationType.Create)
                {
                    replicationObject = new T();
                    SetReplicationObjectProperties(replicationObject, newProperties);
                    replicationObject.PropertyChanged += PropertyChangedHandler;
                    _replicationObjects.Add(replicationObject);
                }
                else
                {
                    replicationObject = _replicationObjects.FirstOrDefault(ro => String.Compare(ro.Uid, uid, StringComparison.OrdinalIgnoreCase) == 0) ?? new T();
                    SetReplicationObjectProperties(replicationObject, newProperties);
                    if (operationType == OperationType.Delete)
                    {
                        _replicationObjects.RemoveAll(r => r.Uid == uid);
                    }
                }
                RaiseObjectReplicated(replicationObject, operationType);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Отправить уведомление об изменении состоянии объекта
        /// </summary>
        /// <param name="replicationInfo">Информация о реплицируемом объекте</param>
        /// <param name="operationType">Тип операции репликации</param>
        /// <param name="sender">Отправитель</param>
        public void SendObjectChanged(ReplicationInfo replicationInfo, OperationType operationType, IReplicationCallbackContract sender)
        {
            IReplicationCallbackContract[] subscribersCopy;

            lock (_subscribers)
            {
                subscribersCopy = _subscribers.Where(s => s != sender).ToArray();
            }

            foreach (var subscriber in subscribersCopy)
            {
                if (((ICommunicationObject)subscriber).State == CommunicationState.Opened)
                {
                    try
                    {
                        subscriber.SimulateObjectChanged(replicationInfo, operationType);
                    }
                    catch (Exception ex)
                    {
                        //TODO сделать лог
                    }
                }
                else
                {
                    RemoveSubscriber(subscriber);
                }
            }
        }
Beispiel #5
0
 public RedisInfo()
 {
     Replication = new ReplicationInfo();
     Clients = new ClientInfo();
     Server = new ServerInfo();
     Memory = new MemoryInfo();
     Persistence = new PersistenceInfo();
     Stats = new StatsInfo();
     CPU = new CPUInfo();
     Keyspace = new KeyspaceInfo();
 }
Beispiel #6
0
 public RedisInfo()
 {
     Replication = new ReplicationInfo();
     Clients     = new ClientInfo();
     Server      = new ServerInfo();
     Memory      = new MemoryInfo();
     Persistence = new PersistenceInfo();
     Stats       = new StatsInfo();
     CPU         = new CPUInfo();
     Keyspace    = new KeyspaceInfo();
 }
Beispiel #7
0
 /// <summary>
 /// Обновить объект репликации
 /// </summary>
 /// <param name="replicationInfo">Информация о реплицируемом объекте</param>
 public void UpdateReplicationObject(ReplicationInfo replicationInfo)
 {
     lock (_replicationObjects)
     {
         var existedReplicationClass = _replicationObjects.FirstOrDefault(r => String.Compare(r.Uid.ToString(), replicationInfo.Uid.ToString(), StringComparison.OrdinalIgnoreCase) == 0);
         if (existedReplicationClass != null)
         {
             existedReplicationClass.UpdateProperties(replicationInfo.Properties);
         }
     }
 }
        public void ConstructMissing()
        {
            allValues.Clear();
            var             server = InfoTestsHelper.Create("Replication", allValues);
            ReplicationInfo info   = new ReplicationInfo(server);

            Assert.IsNull(info.Role);
            Assert.IsNull(info.LastSync);
            Assert.IsNull(info.MasterLinkStatus);
            Assert.IsNull(info.IsMasterSyncInProgress);
            Assert.IsNull(info.SlaveReplOffset);
        }
        public void Construct()
        {
            var server = InfoTestsHelper.Create("Replication", allValues);

            Assert.Throws <ArgumentNullException>(() => new ReplicationInfo(null));
            ReplicationInfo info = new ReplicationInfo(server);

            Assert.AreEqual(ReplicationRole.Slave, info.Role);
            Assert.AreEqual(MasterLinkStatus.Up, info.MasterLinkStatus);
            Assert.AreEqual(10, info.LastSync);
            Assert.AreEqual(11, info.SlaveReplOffset);
            Assert.AreEqual(1, info.IsMasterSyncInProgress);
            Assert.AreEqual(server, info.Main);
        }
Beispiel #10
0
        /// <summary>
        /// Подготовить объект для репликации
        /// </summary>
        /// <param name="replicationInfo">Информация о реплицируемом объекте</param>
        /// <param name="operationType">Тип операции</param>
        public void PrepareReplicationObject(ReplicationInfo replicationInfo, OperationType operationType)
        {
            switch (operationType)
            {
            case OperationType.Create:
                CreateReplicationObject(replicationInfo);
                break;

            case OperationType.Update:
                UpdateReplicationObject(replicationInfo);
                break;

            case OperationType.Delete:
                DeleteReplicationObject(replicationInfo);
                break;
            }
        }
Beispiel #11
0
 public void SetObject(ReplicationInfo replicationInfo, OperationType operationType)
 {
     ReplicatedObjectsSubsystem.PrepareReplicationObject(replicationInfo, operationType);
     SubscribersDistributer.SendObjectChanged(replicationInfo, operationType, GetSubscriber());
 }