コード例 #1
0
        internal DeactivateContainerOperation(
            ContainerActivatorService activator,
            ContainerDeactivationArgs deactivationArgs,
            TimeSpan timeout)
        {
            this.activator        = activator;
            this.deactivationArgs = deactivationArgs;
            this.timeout          = timeout;

            this.timeoutHelper       = new TimeoutHelper(timeout);
            this.maxRetryCount       = HostingConfig.Config.ContainerTerminationMaxRetryCount;
            this.retryDelay          = TimeSpan.FromSeconds(HostingConfig.Config.ContainerDeactivationRetryDelayInSec);
            this.deactivationTimeout = HostingConfig.Config.ContainerDeactivationTimeout;

            this.retryCount = 0;
        }
コード例 #2
0
ファイル: Utility.cs プロジェクト: zmyer/service-fabric
        internal static async Task CleanupOnErrorAsync(
            string traceType,
            bool autoRemove,
            bool isContainerRoot,
            string cgroupName,
            string containerName,
            string applicationId,
            IContainerActivatorService activatorService,
            TimeoutHelper timeoutHelper,
            FabricException originalEx)
        {
            HostingTrace.Source.WriteWarning(
                traceType,
                "CleanupOnErrorAsync(): Deactivating Container='{0}', AppId={1}.",
                containerName,
                applicationId);

            try
            {
                var deactivationArg = new ContainerDeactivationArgs()
                {
                    ContainerName           = containerName,
                    ConfiguredForAutoRemove = autoRemove,
                    IsContainerRoot         = isContainerRoot,
                    CgroupName             = cgroupName,
                    IsGracefulDeactivation = false
                };

                await Utility.ExecuteWithRetryOnTimeoutAsync(
                    (operationTimeout) =>
                {
                    return(activatorService.DeactivateContainerAsync(
                               deactivationArg,
                               operationTimeout));
                },
                    $"CleanupOnErrorAsync_DeactivateContainerAsync_{containerName}",
                    traceType,
                    HostingConfig.Config.DockerRequestTimeout,
                    timeoutHelper.RemainingTime);
            }
            catch (FabricException)
            {
                // Ignore.
            }

            throw originalEx;
        }
コード例 #3
0
        internal DeactivateContainerOperation(
            ContainerActivatorService activator,
            ContainerDeactivationArgs deactivationArgs,
            TimeSpan timeout)
        {
            this.activator        = activator;
            this.deactivationArgs = deactivationArgs;

            //
            // NonGracefulDeactivation (i.e. abort request) should never timeout.
            //
            this.timeout = deactivationArgs.IsGracefulDeactivation ? timeout : TimeSpan.MaxValue;

            this.timeoutHelper       = new TimeoutHelper(timeout);
            this.retryDelay          = TimeSpan.FromSeconds(HostingConfig.Config.ContainerDeactivationRetryDelayInSec);
            this.deactivationTimeout = HostingConfig.Config.ContainerDeactivationTimeout;

            this.retryCount = 0;
        }
コード例 #4
0
        private async Task CleanupOnErrorAsync(FabricException originalEx)
        {
            HostingTrace.Source.WriteWarning(
                TraceType,
                "CleanupOnErrorAsync(): Deactivating {0}",
                BuildContainerInfoMessage());

            try
            {
                var deactivationArg = new ContainerDeactivationArgs()
                {
                    ContainerName           = this.activationArgs.ContainerDescription.ContainerName,
                    ConfiguredForAutoRemove = this.activationArgs.ContainerDescription.AutoRemove,
                    IsContainerRoot         = this.activationArgs.ContainerDescription.IsContainerRoot,
                    CgroupName             = this.activationArgs.ProcessDescription.CgroupName,
                    IsGracefulDeactivation = false
                };

                await Utility.ExecuteWithRetriesAsync(
                    (operationTimeout) =>
                {
                    return(this.activator.DeactivateContainerAsync(
                               deactivationArg,
                               operationTimeout));
                },
                    $"CleanupOnErrorAsync_DeactivateContainerAsync_{this.ContainerName}",
                    TraceType,
                    HostingConfig.Config.DockerRequestTimeout,
                    this.timeoutHelper.RemainingTime);
            }
            catch (FabricException)
            {
                // Ignore.
            }

            throw originalEx;
        }
コード例 #5
0
        public Task DeactivateContainerAsync(ContainerDeactivationArgs deactivationArgs, TimeSpan timeout)
        {
            var operation = new DeactivateContainerOperation(this, deactivationArgs, timeout);

            return(operation.ExecuteAsync());
        }