Better state syncing and other improvements (#24)

This commit is contained in:
Fedor Korotkov
2023-03-01 11:42:16 -05:00
committed by GitHub
parent 8df31f7c2d
commit 165662bb0a
24 changed files with 276 additions and 128 deletions
@@ -31,7 +31,6 @@ func (controller *Controller) createServiceAccount(ctx *gin.Context) responder.R
}
serviceAccount.CreatedAt = time.Now()
serviceAccount.DeletedAt = time.Time{}
serviceAccount.UID = uuid.New().String()
serviceAccount.Generation = 0
+10 -24
View File
@@ -28,7 +28,6 @@ func (controller *Controller) createVM(ctx *gin.Context) responder.Responder {
vm.Status = v1.VMStatusPending
vm.CreatedAt = time.Now()
vm.DeletedAt = time.Time{}
vm.UID = uuid.New().String()
vm.Generation = 0
@@ -39,7 +38,7 @@ func (controller *Controller) createVM(ctx *gin.Context) responder.Responder {
return responder.Code(http.StatusConflict)
}
if err := txn.SetVM(&vm); err != nil {
if err := txn.SetVM(vm); err != nil {
return responder.Code(http.StatusInternalServerError)
}
@@ -68,14 +67,18 @@ func (controller *Controller) updateVM(ctx *gin.Context) responder.Responder {
return responder.Error(err)
}
if dbVM.TerminalState() && dbVM.Status != userVM.Status {
return responder.Code(http.StatusPreconditionFailed)
}
dbVM.Status = userVM.Status
dbVM.Generation++
if err := txn.SetVM(dbVM); err != nil {
if err := txn.SetVM(*dbVM); err != nil {
return responder.Code(http.StatusInternalServerError)
}
return responder.JSON(http.StatusOK, &dbVM)
return responder.JSON(http.StatusOK, dbVM)
})
}
@@ -92,7 +95,7 @@ func (controller *Controller) getVM(ctx *gin.Context) responder.Responder {
return responder.Error(err)
}
return responder.JSON(http.StatusOK, &vm)
return responder.JSON(http.StatusOK, vm)
})
}
@@ -107,7 +110,7 @@ func (controller *Controller) listVMs(ctx *gin.Context) responder.Responder {
return responder.Error(err)
}
return responder.JSON(http.StatusOK, &vms)
return responder.JSON(http.StatusOK, vms)
})
}
@@ -118,25 +121,8 @@ func (controller *Controller) deleteVM(ctx *gin.Context) responder.Responder {
name := ctx.Param("name")
if ctx.Query("force") != "" {
return controller.storeUpdate(func(txn storepkg.Transaction) responder.Responder {
if err := txn.DeleteVM(name); err != nil {
return responder.Error(err)
}
return responder.Code(http.StatusOK)
})
}
return controller.storeUpdate(func(txn storepkg.Transaction) responder.Responder {
vm, err := txn.GetVM(name)
if err != nil {
return responder.Error(err)
}
vm.DeletedAt = time.Now()
if err := txn.SetVM(vm); err != nil {
if err := txn.DeleteVM(name); err != nil {
return responder.Error(err)
}
+3 -4
View File
@@ -31,7 +31,6 @@ func (controller *Controller) createWorker(ctx *gin.Context) responder.Responder
worker.LastSeen = currentTime
}
worker.CreatedAt = currentTime
worker.DeletedAt = time.Time{}
worker.UID = uuid.New().String()
worker.Generation = 0
@@ -42,11 +41,11 @@ func (controller *Controller) createWorker(ctx *gin.Context) responder.Responder
return responder.Code(http.StatusConflict)
}
if err := txn.SetWorker(&worker); err != nil {
if err := txn.SetWorker(worker); err != nil {
return responder.Error(err)
}
return responder.JSON(200, &worker)
return responder.JSON(200, worker)
})
}
@@ -70,7 +69,7 @@ func (controller *Controller) updateWorker(ctx *gin.Context) responder.Responder
dbWorker.LastSeen = userWorker.LastSeen
dbWorker.Generation++
if err := txn.SetWorker(dbWorker); err != nil {
if err := txn.SetWorker(*dbWorker); err != nil {
return responder.Code(http.StatusInternalServerError)
}
-1
View File
@@ -92,7 +92,6 @@ func (controller *Controller) EnsureServiceAccount(serviceAccount *v1.ServiceAcc
}
serviceAccount.CreatedAt = time.Now()
serviceAccount.DeletedAt = time.Time{}
serviceAccount.UID = uuid.New().String()
serviceAccount.Generation = 0
+2 -2
View File
@@ -22,8 +22,8 @@ func runScheduler(store storepkg.Store) error {
}
func runSchedulerInner(store storepkg.Store) error {
var vms []*v1.VM
var workers []*v1.Worker
var vms []v1.VM
var workers []v1.Worker
var err error
err = store.View(func(txn storepkg.Transaction) error {
@@ -1,4 +1,3 @@
//nolint:dupl // maybe we'll figure out how to make DB resource accessors generic in the future
package badger
import (
@@ -41,7 +41,7 @@ func (txn *Transaction) GetVM(name string) (result *v1.VM, err error) {
return &vm, nil
}
func (txn *Transaction) SetVM(vm *v1.VM) (err error) {
func (txn *Transaction) SetVM(vm v1.VM) (err error) {
defer func() {
err = mapErr(err)
}()
@@ -66,7 +66,7 @@ func (txn *Transaction) DeleteVM(name string) (err error) {
return txn.badgerTxn.Delete(key)
}
func (txn *Transaction) ListVMs() (result []*v1.VM, err error) {
func (txn *Transaction) ListVMs() (result []v1.VM, err error) {
defer func() {
err = mapErr(err)
}()
@@ -90,7 +90,7 @@ func (txn *Transaction) ListVMs() (result []*v1.VM, err error) {
return nil, err
}
result = append(result, &vm)
result = append(result, vm)
}
return result, nil
@@ -41,7 +41,7 @@ func (txn *Transaction) GetWorker(name string) (result *v1.Worker, err error) {
return &worker, nil
}
func (txn *Transaction) SetWorker(worker *v1.Worker) (err error) {
func (txn *Transaction) SetWorker(worker v1.Worker) (err error) {
defer func() {
err = mapErr(err)
}()
@@ -66,7 +66,7 @@ func (txn *Transaction) DeleteWorker(name string) (err error) {
return txn.badgerTxn.Delete(key)
}
func (txn *Transaction) ListWorkers() (result []*v1.Worker, err error) {
func (txn *Transaction) ListWorkers() (result []v1.Worker, err error) {
defer func() {
err = mapErr(err)
}()
@@ -90,7 +90,7 @@ func (txn *Transaction) ListWorkers() (result []*v1.Worker, err error) {
return nil, err
}
result = append(result, &worker)
result = append(result, worker)
}
return result, nil
+4 -4
View File
@@ -9,14 +9,14 @@ type Store interface {
type Transaction interface {
GetVM(name string) (result *v1.VM, err error)
SetVM(vm *v1.VM) (err error)
SetVM(vm v1.VM) (err error)
DeleteVM(name string) (err error)
ListVMs() (result []*v1.VM, err error)
ListVMs() (result []v1.VM, err error)
GetWorker(name string) (result *v1.Worker, err error)
SetWorker(worker *v1.Worker) (err error)
SetWorker(worker v1.Worker) (err error)
DeleteWorker(name string) (err error)
ListWorkers() (result []*v1.Worker, err error)
ListWorkers() (result []v1.Worker, err error)
GetServiceAccount(name string) (result *v1.ServiceAccount, err error)
SetServiceAccount(serviceAccount *v1.ServiceAccount) (err error)