RepositoryCreationService is the service which is used to create repositories in runtime. The service can be used in a standalone or cluster environment.
RepositoryConfigurationService
depends on the next components:
DBCreator which is used to create new database for each unbinded datasource.
BackupManager which is used to create repository from backup.
RPCService which is used for communicating between cluster-nodes.
RPCService may not be configured. In this case, RepositoryService will work as a standalone service.
The user executes reserveRepositoryName(String repositoryName)
-
client-node calls coordinator-node to reserve repositoryName
. If this
name is already reserved or repository with this name exists,
client-node will fetch RepositoryCreationException
. If not, Client will
get token string.
Instead of executing createRepository(String backupId,
RepositoryEntry rEntry, String token)
, Coordinator-node checks the
token, and creates Repository.
When the repository has been created, the user-node broadcasts a message to
all clusterNodes
with RepositoryEntry
, so each cluster node starts new
Repository.
There are two ways to create a repository: make it in single step - just
call createRepository(String backupId, RepositoryEntry)
; or reserve
repositoryName
at first (reserveRepositoryName(String repositoryName)
,
then create the reserved repository (createRepository(String backupId,
RepositoryEntry rEntry, String token)
.
Each datasource in RepositoryEntry
of a new Repository must have
unbinded datasources. This means such a datasource must not have database behind it.
This restriction is to avoid corruption with existing
repositories data.
RPCService
is an optional component, but
RepositoryCreatorService
cannot communicate with other cluster-nodes
without it.