Save worker info on sign-on (not just on registration)
This commit is contained in:
parent
aa41ae2ba2
commit
50088b4c94
@ -47,6 +47,8 @@ func registerOrSignOn(ctx context.Context, configWrangler worker.FileConfigWrang
|
||||
log.Fatal().Err(err).Msg("loading configuration")
|
||||
}
|
||||
|
||||
log.Info().Interface("config", cfg).Msg("loaded configuration")
|
||||
|
||||
if cfg.Manager == "" {
|
||||
log.Fatal().Msg("no manager configured")
|
||||
}
|
||||
@ -126,11 +128,12 @@ func register(ctx context.Context, cfg worker.WorkerConfig, client api.ClientWit
|
||||
// signOn tells the Manager we're alive and returns the status the Manager tells us to go to.
|
||||
func signOn(ctx context.Context, cfg worker.WorkerConfig, client api.ClientWithResponsesInterface) (api.WorkerStatus, error) {
|
||||
logger := log.With().Str("manager", cfg.Manager).Logger()
|
||||
logger.Info().Msg("signing on at Manager")
|
||||
logger.Info().Interface("taskTypes", cfg.TaskTypes).Msg("signing on at Manager")
|
||||
|
||||
req := api.SignOnJSONRequestBody{
|
||||
Nickname: mustHostname(),
|
||||
SupportedTaskTypes: cfg.TaskTypes,
|
||||
SoftwareVersion: appinfo.ApplicationVersion,
|
||||
}
|
||||
resp, err := client.SignOnWithResponse(ctx, req)
|
||||
if err != nil {
|
||||
|
@ -43,6 +43,7 @@ type PersistenceService interface {
|
||||
|
||||
CreateWorker(ctx context.Context, w *persistence.Worker) error
|
||||
FetchWorker(ctx context.Context, uuid string) (*persistence.Worker, error)
|
||||
SaveWorker(ctx context.Context, w *persistence.Worker) error
|
||||
SaveWorkerStatus(ctx context.Context, w *persistence.Worker) error
|
||||
|
||||
// ScheduleTask finds a task to execute by the given worker, and assigns it to that worker.
|
||||
|
@ -89,14 +89,8 @@ func (f *Flamenco) SignOn(e echo.Context) error {
|
||||
}
|
||||
|
||||
logger.Info().Msg("worker signing on")
|
||||
|
||||
w := requestWorkerOrPanic(e)
|
||||
w.Status = api.WorkerStatusStarting
|
||||
err = f.persist.SaveWorkerStatus(e.Request().Context(), w)
|
||||
w, err := f.workerUpdateAfterSignOn(e, req)
|
||||
if err != nil {
|
||||
logger.Warn().Err(err).
|
||||
Str("newStatus", string(w.Status)).
|
||||
Msg("error storing Worker in database")
|
||||
return sendAPIError(e, http.StatusInternalServerError, "error storing worker in database")
|
||||
}
|
||||
|
||||
@ -109,6 +103,33 @@ func (f *Flamenco) SignOn(e echo.Context) error {
|
||||
return e.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
func (f *Flamenco) workerUpdateAfterSignOn(e echo.Context, update api.SignOnJSONBody) (*persistence.Worker, error) {
|
||||
logger := requestLogger(e)
|
||||
w := requestWorkerOrPanic(e)
|
||||
|
||||
// Update the worker for with the new sign-on info.
|
||||
w.Status = api.WorkerStatusStarting
|
||||
w.Address = e.RealIP()
|
||||
w.Name = update.Nickname
|
||||
|
||||
// Remove trailing spaces from task types, and convert to lower case.
|
||||
for idx := range update.SupportedTaskTypes {
|
||||
update.SupportedTaskTypes[idx] = strings.TrimSpace(strings.ToLower(update.SupportedTaskTypes[idx]))
|
||||
}
|
||||
w.SupportedTaskTypes = strings.Join(update.SupportedTaskTypes, ",")
|
||||
|
||||
// Save the new Worker info to the database.
|
||||
err := f.persist.SaveWorker(e.Request().Context(), w)
|
||||
if err != nil {
|
||||
logger.Warn().Err(err).
|
||||
Str("newStatus", string(w.Status)).
|
||||
Msg("error storing Worker in database")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return w, nil
|
||||
}
|
||||
|
||||
func (f *Flamenco) SignOff(e echo.Context) error {
|
||||
logger := requestLogger(e)
|
||||
|
||||
|
@ -52,7 +52,7 @@ func (w *Worker) TaskTypes() []string {
|
||||
|
||||
func (db *DB) CreateWorker(ctx context.Context, w *Worker) error {
|
||||
if err := db.gormDB.Create(w).Error; err != nil {
|
||||
return fmt.Errorf("error creating new worker: %v", err)
|
||||
return fmt.Errorf("error creating new worker: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -67,8 +67,15 @@ func (db *DB) FetchWorker(ctx context.Context, uuid string) (*Worker, error) {
|
||||
}
|
||||
|
||||
func (db *DB) SaveWorkerStatus(ctx context.Context, w *Worker) error {
|
||||
if err := db.gormDB.Model(w).Updates(Worker{Status: w.Status}).Error; err != nil {
|
||||
return fmt.Errorf("error saving worker: %v", err)
|
||||
if err := db.gormDB.Model(w).Select("status").Updates(Worker{Status: w.Status}).Error; err != nil {
|
||||
return fmt.Errorf("error saving worker: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *DB) SaveWorker(ctx context.Context, w *Worker) error {
|
||||
if err := db.gormDB.Save(w).Error; err != nil {
|
||||
return fmt.Errorf("error saving worker: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -66,3 +66,62 @@ func TestCreateFetchWorker(t *testing.T) {
|
||||
|
||||
assert.EqualValues(t, w.SupportedTaskTypes, fetchedWorker.SupportedTaskTypes)
|
||||
}
|
||||
|
||||
func TestSaveWorker(t *testing.T) {
|
||||
db := CreateTestDB(t)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
|
||||
defer cancel()
|
||||
|
||||
w := Worker{
|
||||
UUID: uuid.New().String(),
|
||||
Name: "дрон",
|
||||
Address: "fe80::5054:ff:fede:2ad7",
|
||||
LastActivity: "",
|
||||
Platform: "linux",
|
||||
Software: "3.0",
|
||||
Status: api.WorkerStatusAwake,
|
||||
SupportedTaskTypes: "blender,ffmpeg,file-management",
|
||||
}
|
||||
|
||||
err := db.CreateWorker(ctx, &w)
|
||||
assert.NoError(t, err)
|
||||
|
||||
fetchedWorker, err := db.FetchWorker(ctx, w.UUID)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, fetchedWorker)
|
||||
|
||||
// Update all updatable fields of the Worker
|
||||
updatedWorker := *fetchedWorker
|
||||
updatedWorker.Name = "7 မှ 9"
|
||||
updatedWorker.Address = "fe80::cafe:f00d"
|
||||
updatedWorker.LastActivity = "Rendering"
|
||||
updatedWorker.Platform = "windows"
|
||||
updatedWorker.Software = "3.1"
|
||||
updatedWorker.Status = api.WorkerStatusAsleep
|
||||
updatedWorker.SupportedTaskTypes = "blender,ffmpeg,file-management,misc"
|
||||
|
||||
// Saving only the status should just do that.
|
||||
err = db.SaveWorkerStatus(ctx, &updatedWorker)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "7 မှ 9", updatedWorker.Name, "Saving status should not touch the name")
|
||||
|
||||
// Check saved worker
|
||||
fetchedWorker, err = db.FetchWorker(ctx, w.UUID)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, fetchedWorker)
|
||||
assert.Equal(t, updatedWorker.Status, fetchedWorker.Status, "new status should have been saved")
|
||||
assert.NotEqual(t, updatedWorker.Name, fetchedWorker.Name, "non-status fields should not have been updated")
|
||||
|
||||
// Saving the entire worker should save everything.
|
||||
err = db.SaveWorker(ctx, &updatedWorker)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Check saved worker
|
||||
fetchedWorker, err = db.FetchWorker(ctx, w.UUID)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, fetchedWorker)
|
||||
assert.Equal(t, updatedWorker.Status, fetchedWorker.Status, "new status should have been saved")
|
||||
assert.Equal(t, updatedWorker.Name, fetchedWorker.Name, "non-status fields should also have been updated")
|
||||
assert.Equal(t, updatedWorker.Software, fetchedWorker.Software, "non-status fields should also have been updated")
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ func NewConfigWrangler() FileConfigWrangler {
|
||||
func (fcw FileConfigWrangler) DefaultConfig() WorkerConfig {
|
||||
return WorkerConfig{
|
||||
Manager: "",
|
||||
TaskTypes: []string{"sleep", "blender-render", "file-management", "exr-merge", "debug"},
|
||||
TaskTypes: []string{"sleep", "blender", "file-management", "exr-merge", "debug"},
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -56,8 +56,8 @@ func (w *Worker) runStateAsleep(ctx context.Context) {
|
||||
return
|
||||
case <-time.After(durationSleepCheck):
|
||||
}
|
||||
if !w.isState(api.WorkerStatusAwake) {
|
||||
logger.Debug().Msg("state fetching interrupted by state change")
|
||||
if !w.isState(api.WorkerStatusAsleep) {
|
||||
logger.Debug().Str("newStatus", string(w.state)).Msg("state fetching interrupted by state change")
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -289,7 +289,8 @@ components:
|
||||
supported_task_types:
|
||||
type: array
|
||||
items: {type: string}
|
||||
required: [nickname, supported_task_types]
|
||||
software_version: {type: string}
|
||||
required: [nickname, supported_task_types, software_version]
|
||||
|
||||
WorkerStateChange:
|
||||
type: object
|
||||
|
@ -18,61 +18,62 @@ import (
|
||||
// Base64 encoded, gzipped, json marshaled Swagger object
|
||||
var swaggerSpec = []string{
|
||||
|
||||
"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",
|
||||
"XNc2bDQAAA==",
|
||||
}
|
||||
|
||||
// GetSwagger returns the content of the embedded swagger specification file
|
||||
|
@ -254,6 +254,7 @@ type WorkerRegistration struct {
|
||||
// WorkerSignOn defines model for WorkerSignOn.
|
||||
type WorkerSignOn struct {
|
||||
Nickname string `json:"nickname"`
|
||||
SoftwareVersion string `json:"software_version"`
|
||||
SupportedTaskTypes []string `json:"supported_task_types"`
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user