diff --git a/internal/daemon/controller/tickers.go b/internal/daemon/controller/tickers.go index e5d6b06c5..d15b8c2bd 100644 --- a/internal/daemon/controller/tickers.go +++ b/internal/daemon/controller/tickers.go @@ -36,7 +36,7 @@ func (c *Controller) startStatusTicking(cancelCtx context.Context) { return case <-timer.C: - if err := c.updateController(cancelCtx); err != nil { + if err := c.upsertController(cancelCtx); err != nil { event.WriteError(cancelCtx, op, err, event.WithInfoMsg("error fetching repository for status update")) } timer.Reset(statusInterval) @@ -54,36 +54,13 @@ func (c *Controller) upsertController(ctx context.Context) error { opts = append(opts, server.WithAddress(c.conf.RawConfig.Controller.PublicClusterAddr)) } - controller := server.NewController(c.conf.RawConfig.Controller.Name, opts...) - repo, err := c.ServersRepoFn() - if err != nil { - return errors.Wrap(ctx, err, op, errors.WithMsg("error fetching repository for status upsert")) - } - - _, err = repo.UpsertController(ctx, controller) - if err != nil { - return errors.Wrap(ctx, err, op, errors.WithMsg("error performing status upsert")) - } - - return nil -} - -func (c *Controller) updateController(ctx context.Context) error { - const op = "controller.(Controller).updateController" - var opts []server.Option - if c.conf.RawConfig.Controller.Description != "" { - opts = append(opts, server.WithDescription(c.conf.RawConfig.Controller.Description)) - } - if c.conf.RawConfig.Controller.PublicClusterAddr != "" { - opts = append(opts, server.WithAddress(c.conf.RawConfig.Controller.PublicClusterAddr)) - } controller := server.NewController(c.conf.RawConfig.Controller.Name, opts...) repo, err := c.ServersRepoFn() if err != nil { return errors.Wrap(ctx, err, op, errors.WithMsg("error fetching repository for status update")) } - _, err = repo.UpdateController(ctx, controller) + _, err = repo.UpsertController(ctx, controller) if err != nil { return errors.Wrap(ctx, err, op, errors.WithMsg("error performing status update")) } diff --git a/internal/server/repository_controller.go b/internal/server/repository_controller.go index bdf4cb26c..238352c28 100644 --- a/internal/server/repository_controller.go +++ b/internal/server/repository_controller.go @@ -76,40 +76,3 @@ func (r *Repository) UpsertController(ctx context.Context, controller *Controlle return int(rowsUpdated), nil } - -func (r *Repository) UpdateController(ctx context.Context, controller *Controller) (int, error) { - const op = "server.(Repository).UpdateController" - - if controller == nil { - return db.NoRowsAffected, errors.New(ctx, errors.InvalidParameter, op, "controller is nil") - } - if controller.PrivateId == "" { - return db.NoRowsAffected, errors.New(ctx, errors.InvalidParameter, op, "controller private_id is empty") - } - if controller.Address == "" { - return db.NoRowsAffected, errors.New(ctx, errors.InvalidParameter, op, "controller address is empty") - } - - var rowsUpdated int - _, err := r.writer.DoTx( - ctx, - db.StdRetryCnt, - db.ExpBackoff{}, - func(reader db.Reader, w db.Writer) error { - var err error - rowsUpdated, err = w.Update(ctx, controller, []string{"description", "address"}, nil, db.WithWhere("private_id = ?", controller.PrivateId)) - if err != nil { - return errors.Wrap(ctx, err, op+":Update") - } - if rowsUpdated > 1 { - return errors.New(ctx, errors.MultipleRecords, op, "more than 1 resource would have been updated") - } - return nil - }, - ) - if err != nil { - return db.NoRowsAffected, err - } - - return rowsUpdated, nil -} diff --git a/internal/server/repository_controller_test.go b/internal/server/repository_controller_test.go index 7161eceac..cae413292 100644 --- a/internal/server/repository_controller_test.go +++ b/internal/server/repository_controller_test.go @@ -81,105 +81,3 @@ func TestRepository_UpsertController(t *testing.T) { }) } } - -func TestRepository_UpdateController(t *testing.T) { - ctx := context.Background() - conn, _ := db.TestSetup(t, "postgres") - rw := db.New(conn) - wrapper := db.TestWrapper(t) - testKms := kms.TestKms(t, conn, wrapper) - testRepo, err := NewRepository(ctx, rw, rw, testKms) - require.NoError(t, err) - - iamRepo := iam.TestRepo(t, conn, wrapper) - iam.TestScopes(t, iamRepo) - - tests := []struct { - name string - originalController *Controller - updatedController *Controller - wantCount int - wantErr bool - }{ - { - name: "nil-controller", - wantErr: true, - }, - { - name: "empty-id", - updatedController: NewController("", WithAddress("127.0.0.1")), - wantErr: true, - }, - { - name: "empty-address", - updatedController: NewController("test-controller"), - wantErr: true, - }, - { - name: "controller-not-found", - updatedController: NewController("test-controller", WithAddress("127.0.0.1"), WithDescription("new ipv4 description")), - wantErr: true, - }, - { - name: "valid-ipv4-controller", - originalController: NewController("ipv4-controller", WithAddress("127.0.0.1"), WithDescription("ipv4 description")), - updatedController: NewController("ipv4-controller", WithAddress("127.0.0.2"), WithDescription("new ipv4 description")), - wantCount: 1, - }, - { - name: "valid-ipv6-controller", - originalController: NewController("test-ipv6-controller", WithAddress("[2001:4860:4860:0:0:0:0:8888]"), WithDescription("ipv6 description")), - updatedController: NewController("test-ipv6-controller", WithAddress("[2001:4860:4860:0:0:0:0:9999]"), WithDescription("new ipv6 description")), - wantCount: 1, - }, - { - name: "valid-abbreviated-ipv6-controller", - originalController: NewController("test-abbreviated-ipv6-controller", WithAddress("[2001:4860:4860::8888]"), WithDescription("abbreviated ipv6 description")), - updatedController: NewController("test-abbreviated-ipv6-controller", WithAddress("[2001:4860:4860::9999]"), WithDescription("new abbreviated ipv6 description")), - wantCount: 1, - }, - { - name: "valid-controller-short-name", - originalController: NewController("test", WithAddress("127.0.0.1"), WithDescription("short name description")), - updatedController: NewController("test", WithAddress("127.0.0.2"), WithDescription("new short name description")), - wantCount: 1, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - assert, require := assert.New(t), require.New(t) - - var originalControllerEntry *Controller - // Insert the original controller attributes if they exist - if tt.originalController != nil { - _, err := testRepo.UpsertController(ctx, tt.originalController) - require.NoError(err) - - // Retrieve the original controller in the database - controllerList, err := testRepo.ListControllers(ctx, []Option{}...) - require.NoError(err) - originalControllerEntry = controllerList[len(controllerList)-1] - } - - // Update the controller with the updated attributes - got, err := testRepo.UpdateController(ctx, tt.updatedController) - if tt.wantErr { - require.Error(err) - assert.Equal(0, got) - return - } - require.NoError(err) - assert.Equal(tt.wantCount, got) - - // Retrieve the updated controller in the database and assert updated successfully - controllerList, err := testRepo.ListControllers(ctx, []Option{}...) - require.NoError(err) - updatedControllerEntry := controllerList[len(controllerList)-1] - - assert.Equal(tt.updatedController.PrivateId, updatedControllerEntry.PrivateId) - assert.Equal(tt.updatedController.Address, updatedControllerEntry.Address) - assert.Equal(tt.updatedController.Description, updatedControllerEntry.Description) - assert.True(updatedControllerEntry.UpdateTime.AsTime().After(originalControllerEntry.UpdateTime.AsTime())) - }) - } -}