コード例 #1
0
        private void HandleDeleteReplication(object parameter)
        {
            var destination = parameter as ReplicationDestination;

            if (destination == null)
            {
                return;
            }
            ReplicationDestinations.Remove(destination);
            SelectedReplication = null;
        }
コード例 #2
0
        /// <summary>
        /// Refreshes the replication information.
        /// Expert use only.
        /// </summary>
        public override void RefreshReplicationInformation(IAsyncFilesCommands commands)
        {
            lock (this)
            {
                var          serverClient   = (IAsyncFilesCommandsImpl)commands;
                var          urlForFilename = serverClient.UrlFor();
                var          serverHash     = ServerHash.GetServerHash(urlForFilename);
                JsonDocument document       = null;

                try
                {
                    var destinations = serverClient.Synchronization.GetDestinationsAsync().Result;

                    FailureCounters.FailureCounts[urlForFilename] = new FailureCounter(); // we just hit the master, so we can reset its failure count

                    if (destinations != null)
                    {
                        document = new JsonDocument
                        {
                            DataAsJson = new RavenJObject {
                                { "Destinations", RavenJToken.FromObject(destinations) }
                            }
                        };
                    }
                }
                catch (Exception e)
                {
                    Log.ErrorException("Could not contact master for new replication information", e);
                    document = ReplicationInformerLocalCache.TryLoadReplicationInformationFromLocalCache(serverHash);
                }

                if (document == null)
                {
                    lastReplicationUpdate = SystemTime.UtcNow;
                    ReplicationDestinations.Clear(); // clear destinations that could be retrieved from local storage
                    return;
                }

                if (IsInvalidDestinationsDocument(document) == false)
                {
                    ReplicationInformerLocalCache.TrySavingReplicationInformationToLocalCache(serverHash, document);
                    UpdateReplicationInformationFromDocument(document);
                }
                lastReplicationUpdate = SystemTime.UtcNow;
            }
        }
コード例 #3
0
 public override void LoadFor(DatabaseDocument database)
 {
     ApplicationModel.Current.Server.Value.DocumentStore.OpenAsyncSession(database.Id)
     .LoadAsync <ReplicationDocument>("Raven/Replication/Destinations")
     .ContinueOnSuccessInTheUIThread(document =>
     {
         if (document == null)
         {
             return;
         }
         ReplicationData = document;
         ReplicationDestinations.Clear();
         foreach (var replicationDestination in ReplicationData.Destinations)
         {
             ReplicationDestinations.Add(replicationDestination);
         }
     });
 }
コード例 #4
0
 public override void LoadFor(DatabaseDocument _)
 {
     ApplicationModel.Current.Server.Value.DocumentStore.OpenAsyncSession(ApplicationModel.Current.Server.Value.SelectedDatabase.Value.Name)
     .LoadAsync <ReplicationDocument>("Raven/Replication/Destinations")
     .ContinueOnSuccessInTheUIThread(document =>
     {
         if (document == null)
         {
             return;
         }
         ReplicationData = document;
         ReplicationDestinations.Clear();
         OriginalReplicationDestinations = new ObservableCollection <ReplicationDestination>();
         foreach (var replicationDestination in ReplicationData.Destinations)
         {
             ReplicationDestinations.Add(replicationDestination);
             OriginalReplicationDestinations.Add(replicationDestination);
         }
     });
 }
コード例 #5
0
        private void RefreshReplicationInformationInternal(string url, Func <ReplicationDocumentWithClusterInformation> getReplicationDestinations)
        {
            lock (this)
            {
                var serverHash = ServerHash.GetServerHash(url);

                JsonDocument document;
                var          fromFailoverUrls = false;

                try
                {
                    var replicationDestinations = getReplicationDestinations();
                    document = replicationDestinations == null ? null : RavenJObject.FromObject(replicationDestinations).ToJsonDocument();
                    FailureCounters.FailureCounts[url] = new FailureCounter(); // we just hit the master, so we can reset its failure count
                }
                catch (Exception e)
                {
                    Log.ErrorException("Could not contact master for new replication information", e);
                    document = ReplicationInformerLocalCache.TryLoadReplicationInformationFromLocalCache(serverHash);

                    if (document == null)
                    {
                        if (FailoverServers != null && FailoverServers.Length > 0) // try to use configured failover servers
                        {
                            var failoverServers = new ReplicationDocument {
                                Destinations = new List <ReplicationDestination>()
                            };

                            foreach (var failover in FailoverServers)
                            {
                                failoverServers.Destinations.Add(failover);
                            }

                            document = new JsonDocument
                            {
                                DataAsJson = RavenJObject.FromObject(failoverServers)
                            };

                            fromFailoverUrls = true;
                        }
                    }
                }


                if (document == null)
                {
                    lastReplicationUpdate = SystemTime.UtcNow; // checked and not found
                    ReplicationDestinations.Clear();           // clear destinations that could be retrieved from local storage
                    return;
                }

                if (!fromFailoverUrls)
                {
                    ReplicationInformerLocalCache.TrySavingReplicationInformationToLocalCache(serverHash, document);
                }

                UpdateReplicationInformationFromDocument(document);

                lastReplicationUpdate = SystemTime.UtcNow;
            }
        }