mirror of
https://github.com/cirruslabs/orchard.git
synced 2026-10-20 01:25:15 +02:00
Better state syncing and other improvements (#24)
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user