41
41
import org .elasticsearch .threadpool .ThreadPool ;
42
42
import org .elasticsearch .transport .TransportService ;
43
43
44
- import java .io .IOException ;
45
44
import java .util .ArrayList ;
46
45
import java .util .Arrays ;
47
46
import java .util .Collections ;
@@ -100,20 +99,23 @@ public void registerRepository(final RegisterRepositoryRequest request, final Ac
100
99
registrationListener = listener ;
101
100
}
102
101
102
+ // Trying to create the new repository on master to make sure it works
103
+ try {
104
+ closeRepository (createRepository (newRepositoryMetaData ));
105
+ } catch (Exception e ) {
106
+ registrationListener .onFailure (e );
107
+ return ;
108
+ }
109
+
103
110
clusterService .submitStateUpdateTask (request .cause , new AckedClusterStateUpdateTask <ClusterStateUpdateResponse >(request , registrationListener ) {
104
111
@ Override
105
112
protected ClusterStateUpdateResponse newResponse (boolean acknowledged ) {
106
113
return new ClusterStateUpdateResponse (acknowledged );
107
114
}
108
115
109
116
@ Override
110
- public ClusterState execute (ClusterState currentState ) throws IOException {
117
+ public ClusterState execute (ClusterState currentState ) {
111
118
ensureRepositoryNotInUse (currentState , request .name );
112
- // Trying to create the new repository on master to make sure it works
113
- if (!registerRepository (newRepositoryMetaData )) {
114
- // The new repository has the same settings as the old one - ignore
115
- return currentState ;
116
- }
117
119
MetaData metaData = currentState .metaData ();
118
120
MetaData .Builder mdBuilder = MetaData .builder (currentState .metaData ());
119
121
RepositoriesMetaData repositories = metaData .custom (RepositoriesMetaData .TYPE );
@@ -127,6 +129,10 @@ public ClusterState execute(ClusterState currentState) throws IOException {
127
129
128
130
for (RepositoryMetaData repositoryMetaData : repositories .repositories ()) {
129
131
if (repositoryMetaData .name ().equals (newRepositoryMetaData .name ())) {
132
+ if (newRepositoryMetaData .equals (repositoryMetaData )) {
133
+ // Previous version is the same as this one no update is needed.
134
+ return currentState ;
135
+ }
130
136
found = true ;
131
137
repositoriesMetaData .add (newRepositoryMetaData );
132
138
} else {
@@ -352,37 +358,8 @@ public Repository repository(String repositoryName) {
352
358
throw new RepositoryMissingException (repositoryName );
353
359
}
354
360
355
- /**
356
- * Creates a new repository and adds it to the list of registered repositories.
357
- * <p>
358
- * If a repository with the same name but different types or settings already exists, it will be closed and
359
- * replaced with the new repository. If a repository with the same name exists but it has the same type and settings
360
- * the new repository is ignored.
361
- *
362
- * @param repositoryMetaData new repository metadata
363
- * @return {@code true} if new repository was added or {@code false} if it was ignored
364
- */
365
- private boolean registerRepository (RepositoryMetaData repositoryMetaData ) throws IOException {
366
- Repository previous = repositories .get (repositoryMetaData .name ());
367
- if (previous != null ) {
368
- RepositoryMetaData previousMetadata = previous .getMetadata ();
369
- if (previousMetadata .equals (repositoryMetaData )) {
370
- // Previous version is the same as this one - ignore it
371
- return false ;
372
- }
373
- }
374
- Repository newRepo = createRepository (repositoryMetaData );
375
- if (previous != null ) {
376
- closeRepository (previous );
377
- }
378
- Map <String , Repository > newRepositories = new HashMap <>(repositories );
379
- newRepositories .put (repositoryMetaData .name (), newRepo );
380
- repositories = newRepositories ;
381
- return true ;
382
- }
383
-
384
361
/** Closes the given repository. */
385
- private void closeRepository (Repository repository ) throws IOException {
362
+ private void closeRepository (Repository repository ) {
386
363
logger .debug ("closing repository [{}][{}]" , repository .getMetadata ().type (), repository .getMetadata ().name ());
387
364
repository .close ();
388
365
}
0 commit comments