Don't accidentally reset a server's state when starting it after a system reboot; closes pterodactyl/panel#2695

This commit is contained in:
Dane Everitt 2020-11-10 21:21:20 -08:00
parent 488ef9de54
commit ffb6bd72ef
No known key found for this signature in database
GPG Key ID: EEA66103B3D71F53
2 changed files with 9 additions and 11 deletions

View File

@ -250,13 +250,12 @@ func rootCmdRun(*cobra.Command, []string) {
if err := s.Environment.Attach(); err != nil { if err := s.Environment.Attach(); err != nil {
s.Log().WithField("error", errors.WithStackIf(err)).Warn("failed to attach to running server environment") s.Log().WithField("error", errors.WithStackIf(err)).Warn("failed to attach to running server environment")
} }
} else {
return // At this point we've determined that the server should indeed be in an offline state, so we'll
} // make a call to set that state just to ensure we don't ever accidentally end up with some invalid
// state being tracked.
// Addresses potentially invalid data in the stored file that can cause Wings to lose
// track of what the actual server state is.
s.Environment.SetState(environment.ProcessOfflineState) s.Environment.SetState(environment.ProcessOfflineState)
}
}) })
} }

View File

@ -15,15 +15,14 @@ import (
// Attach to the instance and then automatically emit an event whenever the resource usage for the // Attach to the instance and then automatically emit an event whenever the resource usage for the
// server process changes. // server process changes.
func (e *Environment) pollResources(ctx context.Context) error { func (e *Environment) pollResources(ctx context.Context) error {
l := log.WithField("container_id", e.Id)
l.Debug("starting resource polling for container")
defer l.Debug("stopped resource polling for container")
if e.st.Load() == environment.ProcessOfflineState { if e.st.Load() == environment.ProcessOfflineState {
return errors.New("cannot enable resource polling on a stopped server") return errors.New("cannot enable resource polling on a stopped server")
} }
l := log.WithField("container_id", e.Id)
l.Debug("starting resource polling for container")
defer l.Debug("stopped resource polling for container")
stats, err := e.client.ContainerStats(context.Background(), e.Id, true) stats, err := e.client.ContainerStats(context.Background(), e.Id, true)
if err != nil { if err != nil {
return errors.WithStackIf(err) return errors.WithStackIf(err)