public Task UpdateReplicationInformationIfNeededAsync(AsyncServerClient serverClient, bool force = false) { var localLeaderNode = LeaderNode; var updateRecently = lastUpdate.AddMinutes(5) > SystemTime.UtcNow; if (force == false && updateRecently && localLeaderNode != null) { if (Log.IsDebugEnabled) { Log.Debug($"Will not update replication information because we have a leader:{localLeaderNode} and we recently updated the topology."); } return(new CompletedTask()); } //This will prevent setting leader node to null if it was updated already. if (SetLeaderNodeToNullIfPrevIsTheSame(localLeaderNode) == false) { return(new CompletedTask()); } return(UpdateReplicationInformationForCluster(serverClient, new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials, null), operationMetadata => { return serverClient.DirectGetReplicationDestinationsAsync(operationMetadata, null, timeout: ReplicationDestinationsTopologyTimeout).ContinueWith(t => { if (t.IsFaulted || t.IsCanceled) { return null; } return t.Result; }); })); }
public Task UpdateReplicationInformationIfNeededAsync(AsyncServerClient serverClient, bool force = false) { if (force == false && lastUpdate.AddMinutes(5) > SystemTime.UtcNow && LeaderNode != null) return new CompletedTask(); LeaderNode = null; return UpdateReplicationInformationForCluster(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials, null), operationMetadata => { return serverClient.DirectGetReplicationDestinationsAsync(operationMetadata, TimeSpan.FromSeconds(GetReplicationDestinationsTimeoutInSeconds)).ContinueWith(t => { if (t.IsFaulted || t.IsCanceled) return null; return t.Result; }); }); }
public Task UpdateReplicationInformationIfNeededAsync(AsyncServerClient serverClient) { // Default database doesn't have replication topology endpoint if (MultiDatabase.GetRootDatabaseUrl(serverClient.Url) == serverClient.Url) { return(Task.CompletedTask); } return(UpdateReplicationInformationIfNeededInternalAsync(serverClient.Url, () => AsyncHelpers.RunSync(() => serverClient.DirectGetReplicationDestinationsAsync(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials, null))))); }
public void RefreshReplicationInformation(AsyncServerClient serverClient) { RefreshReplicationInformationInternal(serverClient.Url, () => AsyncHelpers.RunSync(() => serverClient.DirectGetReplicationDestinationsAsync(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials, null)))); }
internal ReplicationDocumentWithClusterInformation DirectGetReplicationDestinations(OperationMetadata operationMetadata, IRequestTimeMetric requestTimeMetric) { return(AsyncHelpers.RunSync(() => asyncServerClient.DirectGetReplicationDestinationsAsync(operationMetadata, requestTimeMetric))); }
public Task UpdateReplicationInformationIfNeeded(AsyncServerClient serverClient) { return(UpdateReplicationInformationIfNeededInternal(serverClient.Url, () => AsyncHelpers.RunSync(() => serverClient.DirectGetReplicationDestinationsAsync(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials))))); }
public void RefreshReplicationInformation(AsyncServerClient serverClient) { RefreshReplicationInformationInternal(serverClient.Url, () => serverClient.DirectGetReplicationDestinationsAsync(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials)).ResultUnwrap()); }
public Task UpdateReplicationInformationIfNeededAsync(AsyncServerClient serverClient, bool force = false) { return(UpdateReplicationInformationIfNeededInternalAsync(serverClient.Url, () => AsyncHelpers.RunSync(() => serverClient.DirectGetReplicationDestinationsAsync(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials, null), null)), force)); }