From f5f7521a1823739cce16f236519e7852d3ca55f0 Mon Sep 17 00:00:00 2001 From: sirkrypt0 <22522058+sirkrypt0@users.noreply.github.com> Date: Thu, 17 Jun 2021 16:34:04 +0200 Subject: [PATCH] Fix environment recovery As the environment is no longer stored in the meta information, Poseidon wasn't able to recover environments. It expected the environment id to be found in the meta data. We now recover the environment id from the job id. --- environment/manager.go | 11 ++++++++--- runner/manager.go | 8 ++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/environment/manager.go b/environment/manager.go index 398bba8..b3e4400 100644 --- a/environment/manager.go +++ b/environment/manager.go @@ -100,11 +100,15 @@ func (m *NomadEnvironmentManager) Load() error { jobLogger.Infof("Couldn't convert pool size to int: %v, skipping ...", err) continue } - environmentID, err := runner.NewEnvironmentID(configTaskGroup.Meta[nomad.ConfigMetaEnvironmentKey]) + environmentIDString, err := runner.EnvironmentIDFromTemplateJobID(*job.ID) if err != nil { - jobLogger.WithField("environmentID", configTaskGroup.Meta[nomad.ConfigMetaEnvironmentKey]). + jobLogger.WithError(err).Error("Couldn't retrieve environment id from template job") + } + environmentID, err := runner.NewEnvironmentID(environmentIDString) + if err != nil { + jobLogger.WithField("environmentID", environmentIDString). WithError(err). - Error("Couldn't convert environment id of template job to int") + Error("Couldn't retrieve environmentID from string") continue } _, err = m.runnerManager.CreateOrUpdateEnvironment(environmentID, uint(desiredIdleRunnersCount), job, false) @@ -112,6 +116,7 @@ func (m *NomadEnvironmentManager) Load() error { jobLogger.WithError(err).Info("Could not recover job.") continue } + jobLogger.Info("Successfully recovered environment") } return nil } diff --git a/runner/manager.go b/runner/manager.go index 0e4dafc..c7640e3 100644 --- a/runner/manager.go +++ b/runner/manager.go @@ -355,3 +355,11 @@ func IsEnvironmentTemplateID(jobID string) bool { parts := strings.Split(jobID, "-") return len(parts) == 2 && parts[0] == nomad.TemplateJobPrefix } + +func EnvironmentIDFromTemplateJobID(id string) (string, error) { + parts := strings.Split(id, "-") + if len(parts) < 2 { + return "", fmt.Errorf("invalid template job id: %w", ErrorInvalidJobID) + } + return parts[1], nil +}