diff --git a/pkg/spaces/errors.go b/pkg/spaces/errors.go new file mode 100644 index 0000000000000000000000000000000000000000..c9e66fa698198eb8b01034eb2bad83286d60297f --- /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 482a953b1e79e8690c58748439ce66dc68430b0e..985cd6c5356b3e519bbcf5a3264ee5ab42053131 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 798dd96bb859e31a6b49ca5a882918519c3e020f..a489c0b56104fdd47c479f1cd89a960f097f4d70 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"` }