From fa4e96c669ff2083482ed8e219fa6ae8d7960ab9 Mon Sep 17 00:00:00 2001 From: Alena Petraki <a.petraki@perx.ru> Date: Tue, 7 May 2024 11:26:14 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=E2=80=9Cfailed=20to=20run=20space=20migrations:=20namespace=20?= =?UTF-8?q?xxx.migrations=20already=20exists=E2=80=9D=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B5=20=D0=BA=20=D0=BE?= =?UTF-8?q?=D0=BA=D1=80=D1=83=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D1=82=D1=80=D0=B0=D0=BD=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/spaces/errors.go | 12 ++++++++++++ pkg/spaces/space.go | 22 ++++++++++++++++------ pkg/spaces/storage.go | 1 + 3 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 pkg/spaces/errors.go diff --git a/pkg/spaces/errors.go b/pkg/spaces/errors.go new file mode 100644 index 00000000..c9e66fa6 --- /dev/null +++ b/pkg/spaces/errors.go @@ -0,0 +1,12 @@ +package spaces + +import ( + "git.perx.ru/perxis/perxis-go/pkg/errors" + "git.perx.ru/perxis/perxis-go/pkg/service" +) + +var ( + ErrNotFound = service.ErrNotFound + ErrStateConflict = errors.New("state conflicts with current space state") + ErrOrgIDRequired = errors.New("organization id required") +) diff --git a/pkg/spaces/space.go b/pkg/spaces/space.go index 482a953b..985cd6c5 100644 --- a/pkg/spaces/space.go +++ b/pkg/spaces/space.go @@ -10,9 +10,17 @@ const ( StateReady // Пространство готово к использованию StatePreparing // Пространство готовится в использованию StateMaintenance // Пространство находится на обслуживании - StateMigration // Пространство в состоянии выполнения миграций - StateDeleting // Пространство удаляется, данные будут удалены - StateError // Произошла ошибка при конфигурации пространства (см. Space.Error) + + // StateMigrationScheduled Для пространства запланирована миграция + // При планировании запуска миграции пространства это состояние выступает в роли Lock'а, который не + // позволяет запустить несколько миграций одновременно. Логика планировщика миграций сначала пытается + // установить для пространства состояние StateMigrationScheduled, что удается только в двух случаях: + // пространство находится в состоянии StateReady или же в состояниях StateMigration, StateMigrationScheduled, + // но последнее обновление состояния было более 15-ти минут назад + StateMigrationScheduled + StateMigration // Пространство в состоянии выполнения миграций + StateDeleting // Пространство удаляется, данные будут удалены + StateError // Произошла ошибка при конфигурации пространства (см. Space.Error) ) func (s State) String() string { @@ -25,6 +33,8 @@ func (s State) String() string { return "Preparing" case StateMaintenance: return "Maintenance" + case StateMigrationScheduled: + return "MigrationScheduled" case StateMigration: return "Migration" case StateDeleting: @@ -55,10 +65,10 @@ type Space struct { } type StateInfo struct { - State State `json:"state" bson:"state"` - Info string `json:"info" bson:"info"` + State State `json:"state" bson:"state,omitempty"` + Info string `json:"info" bson:"info,omitempty"` Time time.Time `json:"time,omitempty" bson:"time,omitempty"` - DBVersion uint32 `json:"db_version" bson:"db_version"` + DBVersion uint32 `json:"db_version" bson:"db_version,omitempty"` } func (s Space) Clone() *Space { diff --git a/pkg/spaces/storage.go b/pkg/spaces/storage.go index 798dd96b..a489c0b5 100644 --- a/pkg/spaces/storage.go +++ b/pkg/spaces/storage.go @@ -21,4 +21,5 @@ type Filter struct { Name []string `json:"name,omitempty" bson:"name"` State []State `json:"state,omitempty" bson:"state"` TransferToOrg []string `json:"transfer_to_org" bson:"transfer_to_org"` + Q []string `json:"q" bson:"q"` } -- GitLab