Potential fix for servers being marked as stopping after being marked as offline
This commit is contained in:
parent
1d36811dfe
commit
66c9be357c
|
@ -60,8 +60,10 @@ func (e *Environment) Attach() error {
|
||||||
go func() {
|
go func() {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
defer e.stream.Close()
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
e.stream.Close()
|
|
||||||
e.SetState(environment.ProcessOfflineState)
|
e.SetState(environment.ProcessOfflineState)
|
||||||
e.SetStream(nil)
|
e.SetStream(nil)
|
||||||
}()
|
}()
|
||||||
|
@ -78,7 +80,7 @@ func (e *Environment) Attach() error {
|
||||||
|
|
||||||
// Block the completion of this routine until the container is no longer running. This allows
|
// Block the completion of this routine until the container is no longer running. This allows
|
||||||
// the pollResources function to run until it needs to be stopped. Because the container
|
// the pollResources function to run until it needs to be stopped. Because the container
|
||||||
// can be polled for resource usage, even when sropped, we need to have this logic present
|
// can be polled for resource usage, even when stopped, we need to have this logic present
|
||||||
// in order to cancel the context and therefore stop the routine that is spawned.
|
// in order to cancel the context and therefore stop the routine that is spawned.
|
||||||
ok, err := e.client.ContainerWait(ctx, e.Id, container.WaitConditionNotRunning)
|
ok, err := e.client.ContainerWait(ctx, e.Id, container.WaitConditionNotRunning)
|
||||||
select {
|
select {
|
||||||
|
@ -272,6 +274,8 @@ func (e *Environment) Destroy() error {
|
||||||
Force: true,
|
Force: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
e.SetState(environment.ProcessOfflineState)
|
||||||
|
|
||||||
// Don't trigger a destroy failure if we try to delete a container that does not
|
// Don't trigger a destroy failure if we try to delete a container that does not
|
||||||
// exist on the system. We're just a step ahead of ourselves in that case.
|
// exist on the system. We're just a step ahead of ourselves in that case.
|
||||||
//
|
//
|
||||||
|
@ -280,8 +284,6 @@ func (e *Environment) Destroy() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
e.SetState(environment.ProcessOfflineState)
|
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,9 +64,11 @@ func (s *Server) StartEventListeners() {
|
||||||
// to terminate again.
|
// to terminate again.
|
||||||
if s.Environment.State() != environment.ProcessStoppingState {
|
if s.Environment.State() != environment.ProcessStoppingState {
|
||||||
s.Environment.SetState(environment.ProcessStoppingState)
|
s.Environment.SetState(environment.ProcessStoppingState)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
s.Log().Warn("stopping server instance, violating throttle limits")
|
s.Log().Warn("stopping server instance, violating throttle limits")
|
||||||
s.PublishConsoleOutputFromDaemon("Your server is being stopped for outputting too much data in a short period of time.")
|
s.PublishConsoleOutputFromDaemon("Your server is being stopped for outputting too much data in a short period of time.")
|
||||||
|
|
||||||
// Completely skip over server power actions and terminate the running instance. This gives the
|
// Completely skip over server power actions and terminate the running instance. This gives the
|
||||||
// server 15 seconds to finish stopping gracefully before it is forcefully terminated.
|
// server 15 seconds to finish stopping gracefully before it is forcefully terminated.
|
||||||
if err := s.Environment.WaitForStop(config.Get().Throttles.StopGracePeriod, true); err != nil {
|
if err := s.Environment.WaitForStop(config.Get().Throttles.StopGracePeriod, true); err != nil {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user