Ejemplo n.º 1
0
        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;
                });
            });
        }
Ejemplo n.º 3
0
        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)))));
        }
Ejemplo n.º 4
0
 public void RefreshReplicationInformation(AsyncServerClient serverClient)
 {
     RefreshReplicationInformationInternal(serverClient.Url, () => AsyncHelpers.RunSync(() => serverClient.DirectGetReplicationDestinationsAsync(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials, null))));
 }
Ejemplo n.º 5
0
 internal ReplicationDocumentWithClusterInformation DirectGetReplicationDestinations(OperationMetadata operationMetadata, IRequestTimeMetric requestTimeMetric)
 {
     return(AsyncHelpers.RunSync(() => asyncServerClient.DirectGetReplicationDestinationsAsync(operationMetadata, requestTimeMetric)));
 }
Ejemplo n.º 6
0
 public Task UpdateReplicationInformationIfNeeded(AsyncServerClient serverClient)
 {
     return(UpdateReplicationInformationIfNeededInternal(serverClient.Url, () => AsyncHelpers.RunSync(() => serverClient.DirectGetReplicationDestinationsAsync(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials)))));
 }
Ejemplo n.º 7
0
 public void RefreshReplicationInformation(AsyncServerClient serverClient)
 {
     RefreshReplicationInformationInternal(serverClient.Url, () => serverClient.DirectGetReplicationDestinationsAsync(new OperationMetadata(serverClient.Url, serverClient.PrimaryCredentials)).ResultUnwrap());
 }
Ejemplo n.º 8
0
 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));
 }