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.