Esempio n. 1
0
        public CountersReplicationTopology Flatten()
        {
            var topology = new CountersReplicationTopology();

            topology.Servers.Add(ServerUrl);

            var queue = new Queue <CountersReplicationTopologyNodeBase>();

            queue.Enqueue(this);

            while (queue.Count > 0)
            {
                var node = queue.Dequeue();

                foreach (var dst in node.Destinations)
                {
                    HandleLink(topology, node, dst);
                    queue.Enqueue(dst);
                }

                foreach (var source in node.Sources)
                {
                    HandleLink(topology, node, source);
                    queue.Enqueue(source);
                }
            }

            return(topology);
        }
Esempio n. 2
0
        private static void HandleLink(CountersReplicationTopology topology, CountersReplicationTopologyNodeBase source, CountersReplicationTopologyNodeBase target)
        {
            topology.Servers.Add(source.ServerUrl);
            topology.Servers.Add(target.ServerUrl);

            CountersReplicationTopologyConnection connection = null;

            if (target is CountersReplicationTopologyDestinationNode)
            {
                var destinationNode = (CountersReplicationTopologyDestinationNode)target;
                // going to destination
                connection             = topology.GetConnection(source.ServerUrl, target.ServerUrl) ?? new CountersReplicationTopologyConnection();
                connection.Source      = source.ServerUrl;
                connection.Destination = target.ServerUrl;
                connection.SourceToDestinationState = destinationNode.State;
                connection.SendServerId             = destinationNode.SendServerId;
                connection.Errors = destinationNode.Errors;
            }
            else if (target is CountersReplicationTopologySourceNode)
            {
                // going to source
                var sourceNode = (CountersReplicationTopologySourceNode)target;
                connection             = topology.GetConnection(target.ServerUrl, source.ServerUrl) ?? new CountersReplicationTopologyConnection();
                connection.Source      = target.ServerUrl;
                connection.Destination = source.ServerUrl;
                connection.DestinationToSourceState = sourceNode.State;
                connection.StoredServerId           = sourceNode.StoredServerId;
                connection.LastEtag = sourceNode.LastEtag;
            }

            topology.Connections.Add(connection);
        }