|
35 | 35 | import org.apache.logging.log4j.LogManager; |
36 | 36 | import org.apache.logging.log4j.Logger; |
37 | 37 | import org.apache.logging.log4j.message.ParameterizedMessage; |
| 38 | +import org.opensearch.Version; |
38 | 39 | import org.opensearch.action.ActionListener; |
39 | 40 | import org.opensearch.action.ActionRunnable; |
40 | 41 | import org.opensearch.action.admin.cluster.repositories.delete.DeleteRepositoryRequest; |
|
79 | 80 | import java.util.stream.Collectors; |
80 | 81 | import java.util.stream.Stream; |
81 | 82 |
|
| 83 | +import static org.opensearch.repositories.blobstore.BlobStoreRepository.REMOTE_STORE_INDEX_SHALLOW_COPY; |
| 84 | + |
82 | 85 | /** |
83 | 86 | * Service responsible for maintaining and providing access to snapshot repositories on nodes. |
84 | 87 | * |
@@ -160,6 +163,7 @@ public void registerRepository(final PutRepositoryRequest request, final ActionL |
160 | 163 |
|
161 | 164 | final RepositoryMetadata newRepositoryMetadata = new RepositoryMetadata(request.name(), request.type(), request.settings()); |
162 | 165 | validate(request.name()); |
| 166 | + validateRepositoryMetadataSettings(clusterService, request.name(), request.settings()); |
163 | 167 |
|
164 | 168 | final ActionListener<ClusterStateUpdateResponse> registrationListener; |
165 | 169 | if (request.verify()) { |
@@ -605,6 +609,26 @@ private static void validate(final String repositoryName) { |
605 | 609 | } |
606 | 610 | } |
607 | 611 |
|
| 612 | + public static void validateRepositoryMetadataSettings( |
| 613 | + ClusterService clusterService, |
| 614 | + final String repositoryName, |
| 615 | + final Settings repositoryMetadataSettings |
| 616 | + ) { |
| 617 | + // We can add more validations here for repository settings in the future. |
| 618 | + Version minVersionInCluster = clusterService.state().getNodes().getMinNodeVersion(); |
| 619 | + if (REMOTE_STORE_INDEX_SHALLOW_COPY.get(repositoryMetadataSettings) && !minVersionInCluster.onOrAfter(Version.V_2_9_0)) { |
| 620 | + throw new RepositoryException( |
| 621 | + repositoryName, |
| 622 | + "setting " |
| 623 | + + REMOTE_STORE_INDEX_SHALLOW_COPY.getKey() |
| 624 | + + " cannot be enabled as some of the nodes in cluster are on version older than " |
| 625 | + + Version.V_2_9_0 |
| 626 | + + ". Minimum node version in cluster is: " |
| 627 | + + minVersionInCluster |
| 628 | + ); |
| 629 | + } |
| 630 | + } |
| 631 | + |
608 | 632 | private static void ensureRepositoryNotInUse(ClusterState clusterState, String repository) { |
609 | 633 | if (isRepositoryInUse(clusterState, repository)) { |
610 | 634 | throw new IllegalStateException("trying to modify or unregister repository that is currently used"); |
|
0 commit comments