/// <summary> /// Ungracefully stop the run time system and the application running on it. /// Applications requests would be abruptly terminated, and the internal system state quickly stopped with minimal cleanup. /// </summary> private void FastKill() { if (!GlobalConfig.LivenessType.Equals(GlobalConfiguration.LivenessProviderType.MembershipTableGrain)) { // do not execute KillMyself if using MembershipTableGrain, since it will fail, as we've already stopped app scheduler turns. SafeExecute(() => scheduler.QueueTask(LocalSiloStatusOracle.KillMyself, ((SystemTarget)LocalSiloStatusOracle).SchedulingContext) .WaitWithThrow(stopTimeout)); } // incoming messages SafeExecute(incomingSystemAgent.Stop); SafeExecute(incomingPingAgent.Stop); SafeExecute(incomingAgent.Stop); // timers SafeExecute(InsideRuntimeClient.Current.Stop); if (platformWatchdog != null) { SafeExecute(platformWatchdog.Stop); // Silo may be dying before platformWatchdog was set up } SafeExecute(scheduler.Stop); SafeExecute(scheduler.PrintStatistics); SafeExecute(activationDirectory.PrintActivationDirectory); SafeExecute(messageCenter.Stop); SafeExecute(siloStatistics.Stop); SafeExecute(TraceLogger.Close); SafeExecute(GrainTypeManager.Stop); UnobservedExceptionsHandlerClass.ResetUnobservedExceptionHandler(); SystemStatus.Current = SystemStatus.Terminated; siloTerminatedEvent.Set(); }
/// <summary> /// Ungracefully stop the run time system and the application running on it. /// Applications requests would be abruptly terminated, and the internal system state quickly stopped with minimal cleanup. /// </summary> private void FastKill() { if (!GlobalConfig.LivenessType.Equals(GlobalConfiguration.LivenessProviderType.MembershipTableGrain)) { // do not execute KillMyself if using MembershipTableGrain, since it will fail, as we've already stopped app scheduler turns. SafeExecute(() => scheduler.QueueTask(this.membershipOracle.KillMyself, this.membershipOracleContext) .WaitWithThrow(stopTimeout)); } // incoming messages SafeExecute(incomingSystemAgent.Stop); SafeExecute(incomingPingAgent.Stop); SafeExecute(incomingAgent.Stop); // timers SafeExecute(runtimeClient.Stop); if (platformWatchdog != null) { SafeExecute(platformWatchdog.Stop); // Silo may be dying before platformWatchdog was set up } SafeExecute(scheduler.Stop); SafeExecute(scheduler.PrintStatistics); SafeExecute(activationDirectory.PrintActivationDirectory); SafeExecute(messageCenter.Stop); SafeExecute(siloStatistics.Stop); UnobservedExceptionsHandlerClass.ResetUnobservedExceptionHandler(); SafeExecute(() => this.SystemStatus = SystemStatus.Terminated); SafeExecute(() => AppDomain.CurrentDomain.UnhandledException -= this.DomainUnobservedExceptionHandler); SafeExecute(() => this.assemblyProcessor?.Dispose()); SafeExecute(() => (this.Services as IDisposable)?.Dispose()); SafeExecute(LogManager.Close); // Setting the event should be the last thing we do. // Do nothing after that! this.siloTerminatedTask.SetResult(0); }