コード例 #1
0
 public void RequestResume2(string serverName, Guid guid, uint flags)
 {
     ReplayRpcClientWrapper.RunRpcOperation(serverName, new Guid?(guid), TasksRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
     {
         ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <string, Guid, uint>(0L, "RequestResume2(): Now making RequestResume RPC to server {0} for guid {1} (flags={2}).", serverName, guid, flags);
         return(rpcClient.RequestResume2(guid, flags));
     });
 }
コード例 #2
0
 private static void RunConfigurationUpdater(string serverName, int timeoutMs)
 {
     ReplayRpcClientWrapper.RunRpcOperation(serverName, null, timeoutMs, TasksRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
     {
         ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <string>(0L, "RunConfigurationUpdater(): Now making RunConfigurationUpdater RPC to server {0}.", serverName);
         return(rpcClient.RunConfigurationUpdater());
     });
 }
コード例 #3
0
 public void NotifyChangedReplayConfiguration(string serverName, Guid dbGuid, ServerVersion serverVersion, bool waitForCompletion, bool isHighPriority, ReplayConfigChangeHints changeHint)
 {
     if (ReplayRpcVersionControl.IsNotifyChangedReplayConfigurationRpcSupported(serverVersion))
     {
         ReplayRpcClientWrapper.NotifyChangedReplayConfiguration(serverName, dbGuid, waitForCompletion, !waitForCompletion, isHighPriority, changeHint, 10000);
         return;
     }
     ReplayRpcClientWrapper.RunConfigurationUpdater(serverName, 10000);
 }
コード例 #4
0
        private static void RunRpcOperation(AmServerName serverName, Guid?dbGuid, int timeoutMs, IHaRpcExceptionWrapper rpcExceptionWrapperInstance, ReplayRpcClientWrapper.InternalRpcOperation rpcOperation)
        {
            string databaseName = null;

            if (dbGuid != null)
            {
                databaseName = dbGuid.Value.ToString();
            }
            ReplayRpcClientWrapper.RunRpcOperationDbName(serverName, databaseName, timeoutMs, rpcExceptionWrapperInstance, rpcOperation);
        }
コード例 #5
0
 internal static void RequestSuspend2(string serverName, Guid guid, string suspendComment, uint flags)
 {
     if (suspendComment == null)
     {
         suspendComment = string.Empty;
     }
     ReplayRpcClientWrapper.RunRpcOperation(serverName, new Guid?(guid), TasksRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
     {
         ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <string, Guid, uint>(0L, "RequestSuspend2(): Now making RequestSuspend RPC to server {0} for guid {1} (flags={2}).", serverName, guid, flags);
         return(rpcClient.RequestSuspend2(guid, suspendComment, flags));
     });
 }
コード例 #6
0
        private static void RunRpcOperationDbName(AmServerName serverName, string databaseName, int timeoutMs, IHaRpcExceptionWrapper rpcExceptionWrapperInstance, ReplayRpcClientWrapper.InternalRpcOperation rpcOperation)
        {
            RpcErrorExceptionInfo errorInfo = null;

            rpcExceptionWrapperInstance.ClientRetryableOperation(serverName.Fqdn, delegate
            {
                using (ReplayRpcClient replayRpcClient = ReplayRpcClientWrapper.RpcClientFactory(serverName, timeoutMs))
                {
                    errorInfo = rpcOperation(replayRpcClient);
                }
            });
            rpcExceptionWrapperInstance.ClientRethrowIfFailed(databaseName, serverName.Fqdn, errorInfo);
        }
コード例 #7
0
 public RpcDatabaseCopyStatus2[] GetCopyStatus(string serverName, RpcGetDatabaseCopyStatusFlags2 collectionFlags2, Guid[] dbGuids, int timeoutMs)
 {
     if (dbGuids == null || dbGuids.Length == 0)
     {
         dbGuids = new Guid[]
         {
             Guid.Empty
         };
     }
     RpcDatabaseCopyStatus2[] statusResults = null;
     ReplayRpcClientWrapper.RunRpcOperation(serverName, null, timeoutMs, TasksRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
     {
         RpcErrorExceptionInfo result;
         try
         {
             if (ReplayRpcVersionControl.IsGetCopyStatusEx4RpcSupported(ReplayRpcClientWrapper.GetServerVersion(serverName)))
             {
                 ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <string>(0L, "GetCopyStatus(): Now making RpccGetCopyStatusEx4() RPC to server {0}.", serverName);
                 RpcErrorExceptionInfo rpcErrorExceptionInfo = rpcClient.RpccGetCopyStatusEx4(collectionFlags2, dbGuids, ref statusResults);
                 if (!rpcErrorExceptionInfo.IsFailed())
                 {
                     ReplayRpcClientWrapper.DeserializeExtendedErrorInfo(statusResults);
                 }
                 result = rpcErrorExceptionInfo;
             }
             else
             {
                 RpcDatabaseCopyStatus[] array = null;
                 ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <string>(0L, "GetCopyStatus(): Now making GetCopyStatusEx2() RPC to server {0}.", serverName);
                 RpcErrorExceptionInfo copyStatusEx = rpcClient.GetCopyStatusEx2(ReplayRpcClientWrapper.ConvertToLegacyCopyStatusFlags(collectionFlags2), dbGuids, ref array);
                 if (!copyStatusEx.IsFailed() && array != null)
                 {
                     statusResults = ReplayRpcClientWrapper.ConvertLegacyCopyStatusArray(array);
                 }
                 result = copyStatusEx;
             }
         }
         catch (RpcException ex)
         {
             if (ReplayRpcErrorCode.IsRpcTimeoutError(ex.ErrorCode))
             {
                 throw new ReplayServiceDownException(serverName, ex.Message, ex);
             }
             throw;
         }
         return(result);
     });
     return(statusResults);
 }
コード例 #8
0
 private static void NotifyChangedReplayConfiguration(string serverName, Guid dbGuid, bool waitForCompletion, bool exitAfterEnqueueing, bool isHighPriority, ReplayConfigChangeHints changeHint, int timeoutMs)
 {
     ReplayRpcClientWrapper.RunRpcOperation(serverName, new Guid?(dbGuid), timeoutMs, TasksRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
     {
         ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug(0L, "NotifyChangedReplayConfiguration(): Now making RPC to server {0}, for dbGuid {1}. WaitForCompletion={2}, ExitAfterEnqueueing={3}, IsHighPriority={4}, ChangeHint={5}", new object[]
         {
             serverName,
             dbGuid,
             waitForCompletion,
             exitAfterEnqueueing,
             isHighPriority,
             changeHint
         });
         return(rpcClient.RpccNotifyChangedReplayConfiguration(dbGuid, waitForCompletion, exitAfterEnqueueing, isHighPriority, (int)changeHint));
     });
 }
コード例 #9
0
        internal static void RunDestroyCluster(AmServerName rpcServerName, string clusterName, out string verboseLog)
        {
            string lambdaLog = null;

            try
            {
                ReplayRpcClientWrapper.RunRpcOperation(rpcServerName, DagRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
                {
                    ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <AmServerName, string>(0L, "RunAddNodeToCluster(): Now making RPC to server {0} to destroy cluster {1}.", rpcServerName, clusterName);
                    return(rpcClient.RpccDestroyCluster(clusterName, out lambdaLog));
                });
            }
            finally
            {
                verboseLog = lambdaLog;
            }
        }
コード例 #10
0
        public static void RunInstallFailoverClustering(AmServerName serverName, out string verboseLog)
        {
            string lambdaLog = null;

            try
            {
                ReplayRpcClientWrapper.RunRpcOperation(serverName, DagRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
                {
                    ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <AmServerName>(0L, "RunAddNodeToCluster(): Now making RPC to server {0} to install failover-clustering.", serverName);
                    return(rpcClient.RpccInstallFailoverClustering(out lambdaLog));
                });
            }
            finally
            {
                verboseLog = lambdaLog;
            }
        }
コード例 #11
0
        internal static void RunForceCleanupNode(AmServerName rpcServerName, out string verboseLog)
        {
            string lambdaLog = null;

            try
            {
                ReplayRpcClientWrapper.RunRpcOperation(rpcServerName, DagRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
                {
                    ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <AmServerName>(0L, "RunForceCleanupNode(): Now making RPC to server {0} to force cleanup itself from the cluster.", rpcServerName);
                    return(rpcClient.RpccForceCleanupNode(out lambdaLog));
                });
            }
            finally
            {
                verboseLog = lambdaLog;
            }
        }
コード例 #12
0
        internal static void RunEvictNodeFromCluster(AmServerName rpcServerName, AmServerName convictedNode, out string verboseLog)
        {
            string lambdaLog = null;

            try
            {
                ReplayRpcClientWrapper.RunRpcOperation(rpcServerName, null, 900000, DagRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
                {
                    ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <AmServerName, AmServerName>(0L, "RunAddNodeToCluster(): Now making RPC to server {0} to evict {1} from the cluster.", rpcServerName, convictedNode);
                    return(rpcClient.RpccEvictNodeFromCluster(convictedNode.Fqdn, out lambdaLog));
                });
            }
            finally
            {
                verboseLog = lambdaLog;
            }
        }
コード例 #13
0
        public RpcCopyStatusContainer GetCopyStatusWithHealthState(string serverName, RpcGetDatabaseCopyStatusFlags2 collectionFlags2, Guid[] dbGuids, int timeoutMs)
        {
            if (dbGuids == null || dbGuids.Length == 0)
            {
                dbGuids = new Guid[]
                {
                    Guid.Empty
                };
            }
            RpcCopyStatusContainer container = null;

            if (ReplayRpcVersionControl.IsGetCopyStatusWithHealthStateRpcSupported(ReplayRpcClientWrapper.GetServerVersion(serverName)))
            {
                ReplayRpcClientWrapper.RunRpcOperation(serverName, null, timeoutMs, TasksRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
                {
                    RpcErrorExceptionInfo result;
                    try
                    {
                        ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <string>(0L, "GetCopyStatusWithHealthState(): Now making RpccGetCopyStatusWithHealthState() RPC to server {0}.", serverName);
                        RpcErrorExceptionInfo rpcErrorExceptionInfo = rpcClient.RpccGetCopyStatusWithHealthState(collectionFlags2, dbGuids, ref container);
                        if (!rpcErrorExceptionInfo.IsFailed())
                        {
                            ReplayRpcClientWrapper.DeserializeExtendedErrorInfo(container.CopyStatuses);
                        }
                        result = rpcErrorExceptionInfo;
                    }
                    catch (RpcException ex)
                    {
                        if (ReplayRpcErrorCode.IsRpcTimeoutError(ex.ErrorCode))
                        {
                            throw new ReplayServiceDownException(serverName, ex.Message, ex);
                        }
                        throw;
                    }
                    return(result);
                });
            }
            else
            {
                container = new RpcCopyStatusContainer();
                container.HealthStates = null;
                container.CopyStatuses = this.GetCopyStatus(serverName, collectionFlags2, dbGuids, timeoutMs);
            }
            return(container);
        }
コード例 #14
0
 public void RequestSuspend3(string serverName, Guid guid, string suspendComment, uint flags, uint initiator)
 {
     if (suspendComment == null)
     {
         suspendComment = string.Empty;
     }
     ReplayRpcClientWrapper.RunRpcOperation(serverName, new Guid?(guid), TasksRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
     {
         ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug(0L, "RequestSuspend3(): Now making RequestSuspend RPC to server {0} for guid {1} (flags={2}, initiator={3}).", new object[]
         {
             serverName,
             guid,
             flags,
             initiator
         });
         return(rpcClient.RequestSuspend3(guid, suspendComment, flags, initiator));
     });
 }
コード例 #15
0
        public void RpccEnableReplayLag(string serverName, Guid dbGuid, ActionInitiatorType actionInitiator)
        {
            ServerVersion serverVersion = ReplayRpcClientWrapper.GetServerVersion(serverName);

            if (!ReplayRpcVersionControl.IsDisableReplayLagRpcSupported(serverVersion))
            {
                ExTraceGlobals.ReplayServiceRpcTracer.TraceError <string, ServerVersion, ServerVersion>(0L, "RpccEnableReplayLag(): RPC to server '{0}' not supported. Server version: {1:x}. Supported version: {2:x}.", serverName, serverVersion, ReplayRpcVersionControl.GetCopyStatusEx4RpcSupportVersion);
                throw new ReplayLagRpcUnsupportedException(serverName, serverVersion.ToString(), ReplayRpcVersionControl.GetCopyStatusEx4RpcSupportVersion.ToString());
            }
            ReplayRpcClientWrapper.RunRpcOperation(serverName, new Guid?(dbGuid), TasksRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
            {
                if (ReplayRpcVersionControl.IsDisableReplayLagRpcV2Supported(serverVersion))
                {
                    ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <string, Guid, ActionInitiatorType>(0L, "RpccEnableReplayLag(): Now making RpccEnableReplayLag2 RPC to server {0} for guid {1} (actionInitiator = {2}).", serverName, dbGuid, actionInitiator);
                    return(rpcClient.RpccEnableReplayLag2(dbGuid, (uint)actionInitiator));
                }
                ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug <string, Guid, ActionInitiatorType>(0L, "RpccEnableReplayLag(): Now making RpccEnableReplayLag RPC to server {0} for guid {1} (actionInitiator = {2}).", serverName, dbGuid, actionInitiator);
                return(rpcClient.RpccEnableReplayLag(dbGuid));
            });
        }
コード例 #16
0
        internal static void RunCreateCluster(AmServerName rpcServerName, string clusterName, AmServerName firstNode, string[] ipaddrs, uint[] netmasks, out string verboseLog)
        {
            string lambdaLog = null;

            try
            {
                ReplayRpcClientWrapper.RunRpcOperation(rpcServerName, null, 900000, DagRpcExceptionWrapper.Instance, delegate(ReplayRpcClient rpcClient)
                {
                    ExTraceGlobals.ReplayServiceRpcTracer.TraceDebug(0L, "RunAddNodeToCluster(): Now making RPC to server {0} to CreateCluster {1}, firstNode={2}, ipaddrs={3}, netmasks={4}.", new object[]
                    {
                        rpcServerName,
                        clusterName,
                        firstNode,
                        string.Join(",", ipaddrs),
                        netmasks
                    });
                    return(rpcClient.RpccCreateCluster(clusterName, firstNode.Fqdn, ipaddrs, netmasks, out lambdaLog));
                });
            }
            finally
            {
                verboseLog = lambdaLog;
            }
        }
コード例 #17
0
 internal static void RunConfigurationUpdater(string serverName)
 {
     ReplayRpcClientWrapper.RunConfigurationUpdater(serverName, 10000);
 }
コード例 #18
0
        private static void RunRpcOperation(string serverName, Guid?dbGuid, int timeoutMs, IHaRpcExceptionWrapper rpcExceptionWrapperInstance, ReplayRpcClientWrapper.InternalRpcOperation rpcOperation)
        {
            AmServerName serverName2 = new AmServerName(serverName);

            ReplayRpcClientWrapper.RunRpcOperation(serverName2, dbGuid, timeoutMs, rpcExceptionWrapperInstance, rpcOperation);
        }
コード例 #19
0
 private static void RunRpcOperation(AmServerName serverName, IHaRpcExceptionWrapper rpcExceptionWrapperInstance, ReplayRpcClientWrapper.InternalRpcOperation rpcOperation)
 {
     ReplayRpcClientWrapper.RunRpcOperation(serverName, null, -1, rpcExceptionWrapperInstance, rpcOperation);
 }
コード例 #20
0
 public void NotifyChangedReplayConfigurationAsync(string serverName, Guid dbGuid, ReplayConfigChangeHints changeHint)
 {
     ReplayRpcClientWrapper.NotifyChangedReplayConfiguration(serverName, dbGuid, false, true, false, changeHint, 10000);
 }