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