/// <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; } }
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); } }); }
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); } }); }
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; } }