20
20
import org .opensearch .core .compress .NoneCompressor ;
21
21
import org .opensearch .core .xcontent .NamedXContentRegistry ;
22
22
import org .opensearch .gateway .remote .ClusterMetadataManifest ;
23
+ import org .opensearch .gateway .remote .ClusterMetadataManifest .UploadedIndexMetadata ;
23
24
import org .opensearch .gateway .remote .ClusterMetadataManifest .UploadedMetadata ;
24
25
import org .opensearch .gateway .remote .ClusterMetadataManifest .UploadedMetadataAttribute ;
25
26
import org .opensearch .gateway .remote .RemoteClusterStateUtils ;
37
38
import java .io .IOException ;
38
39
import java .io .InputStream ;
39
40
import java .util .List ;
41
+ import java .util .Map ;
40
42
import java .util .function .Function ;
41
43
import java .util .stream .Stream ;
42
44
43
45
import static java .util .stream .Collectors .toList ;
44
46
import static org .opensearch .gateway .remote .ClusterMetadataManifest .CODEC_V0 ;
47
+ import static org .opensearch .gateway .remote .ClusterMetadataManifest .CODEC_V1 ;
45
48
import static org .opensearch .gateway .remote .ClusterMetadataManifest .CODEC_V2 ;
46
49
import static org .opensearch .gateway .remote .ClusterMetadataManifest .MANIFEST_CURRENT_CODEC_VERSION ;
47
50
import static org .opensearch .gateway .remote .model .RemoteClusterMetadataManifest .MANIFEST ;
@@ -214,18 +217,20 @@ public void testGetUploadedMetadata() throws IOException {
214
217
}
215
218
216
219
public void testSerDe () throws IOException {
217
- ClusterMetadataManifest manifest = getClusterMetadataManifest ();
218
- RemoteClusterMetadataManifest remoteObjectForUpload = new RemoteClusterMetadataManifest (
219
- manifest ,
220
- clusterUUID ,
221
- compressor ,
222
- namedXContentRegistry
223
- );
224
- try (InputStream inputStream = remoteObjectForUpload .serialize ()) {
225
- remoteObjectForUpload .setFullBlobName (BlobPath .cleanPath ());
226
- assertThat (inputStream .available (), greaterThan (0 ));
227
- ClusterMetadataManifest readManifest = remoteObjectForUpload .deserialize (inputStream );
228
- assertThat (readManifest , is (manifest ));
220
+ for (int codecVersion : ClusterMetadataManifest .CODEC_VERSIONS ) {
221
+ ClusterMetadataManifest manifest = getClusterMetadataManifestForCodecVersion (codecVersion );
222
+ RemoteClusterMetadataManifest remoteObjectForUpload = new RemoteClusterMetadataManifest (
223
+ manifest ,
224
+ clusterUUID ,
225
+ compressor ,
226
+ namedXContentRegistry
227
+ );
228
+ try (InputStream inputStream = remoteObjectForUpload .serialize ()) {
229
+ remoteObjectForUpload .setFullBlobName (BlobPath .cleanPath ());
230
+ assertThat (inputStream .available (), greaterThan (0 ));
231
+ ClusterMetadataManifest readManifest = remoteObjectForUpload .deserialize (inputStream );
232
+ validateManifest (manifest , readManifest );
233
+ }
229
234
}
230
235
231
236
String blobName = "/usr/local/manifest__1__2__3__4__5__6" ;
@@ -261,9 +266,13 @@ public void testGetManifestCodecVersion() {
261
266
}
262
267
263
268
private ClusterMetadataManifest getClusterMetadataManifest () {
264
- return ClusterMetadataManifest .builder ()
265
- .opensearchVersion (Version .CURRENT )
266
- .codecVersion (MANIFEST_CURRENT_CODEC_VERSION )
269
+ return getClusterMetadataManifestForCodecVersion (MANIFEST_CURRENT_CODEC_VERSION );
270
+ }
271
+
272
+ private ClusterMetadataManifest getClusterMetadataManifestForCodecVersion (int codecVersion ) {
273
+ ClusterMetadataManifest .Builder builder = ClusterMetadataManifest .builder ();
274
+ builder .opensearchVersion (Version .CURRENT )
275
+ .codecVersion (codecVersion )
267
276
.nodeId ("test-node" )
268
277
.clusterUUID ("test-uuid" )
269
278
.previousClusterUUID ("_NA_" )
@@ -272,6 +281,64 @@ private ClusterMetadataManifest getClusterMetadataManifest() {
272
281
.stateVersion (VERSION )
273
282
.committed (true )
274
283
.coordinationMetadata (new UploadedMetadataAttribute ("test-attr" , "uploaded-file" ))
275
- .build ();
284
+ .indices (List .of (new UploadedIndexMetadata ("test-index" , "tst-idx" , "uploaded-index-file" , codecVersion )))
285
+ .clusterUUIDCommitted (true );
286
+
287
+ if (codecVersion == CODEC_V1 ) {
288
+ builder .globalMetadataFileName ("global-metadata-file-name" );
289
+ }
290
+ if (codecVersion >= CODEC_V2 ) {
291
+ builder .coordinationMetadata (new UploadedMetadataAttribute ("uploaded_coordination" , "coordination-metadata-file" ));
292
+ builder .settingMetadata (new UploadedMetadataAttribute ("uploaded_settings" , "settings-metadata-file" ));
293
+ builder .templatesMetadata (new UploadedMetadataAttribute ("uploaded_templates" , "templates-metadata-file" ));
294
+ builder .customMetadataMap (Map .of ("uploaded_custom" , new UploadedMetadataAttribute ("uploaded_custom" , "custom-metadata-file" )));
295
+ builder .routingTableVersion (1L );
296
+ builder .indicesRouting (List .of (new UploadedIndexMetadata ("test-index" , "tst-idx" , "uploaded_routing" , "routing--" )));
297
+ builder .discoveryNodesMetadata (new UploadedMetadataAttribute ("uploaded_discovery" , "discovery-metadata-file" ));
298
+ builder .clusterBlocksMetadata (new UploadedMetadataAttribute ("uploaded_blocks" , "blocks-metadata-file" ));
299
+ builder .metadataVersion (1L );
300
+ builder .transientSettingsMetadata (
301
+ new UploadedMetadataAttribute ("uploaded_transient_settings" , "transient-settings-metadata-file" )
302
+ );
303
+ builder .hashesOfConsistentSettings (new UploadedMetadataAttribute ("uploaded_hashes_settings" , "hashes-settings-metadata-file" ));
304
+ builder .clusterStateCustomMetadataMap (
305
+ Map .of ("uploaded_custom" , new UploadedMetadataAttribute ("uploaded_custom" , "custom-metadata-file" ))
306
+ );
307
+ }
308
+
309
+ return builder .build ();
310
+ }
311
+
312
+ private void validateManifest (ClusterMetadataManifest writeManifest , ClusterMetadataManifest readManifest ) {
313
+ assertThat (readManifest .getOpensearchVersion (), is (writeManifest .getOpensearchVersion ()));
314
+ assertThat (readManifest .getCodecVersion (), is (writeManifest .getCodecVersion ()));
315
+ assertThat (readManifest .getNodeId (), is (writeManifest .getNodeId ()));
316
+ assertThat (readManifest .getClusterUUID (), is (writeManifest .getClusterUUID ()));
317
+ assertThat (readManifest .getPreviousClusterUUID (), is (writeManifest .getPreviousClusterUUID ()));
318
+ assertThat (readManifest .getStateUUID (), is (writeManifest .getStateUUID ()));
319
+ assertThat (readManifest .getClusterTerm (), is (writeManifest .getClusterTerm ()));
320
+ assertThat (readManifest .getStateVersion (), is (writeManifest .getStateVersion ()));
321
+ assertThat (readManifest .isCommitted (), is (writeManifest .isCommitted ()));
322
+ assertThat (readManifest .getPreviousClusterUUID (), is (writeManifest .getPreviousClusterUUID ()));
323
+ assertThat (readManifest .isClusterUUIDCommitted (), is (writeManifest .isClusterUUIDCommitted ()));
324
+ assertThat (readManifest .getIndices (), is (writeManifest .getIndices ()));
325
+ if (writeManifest .getCodecVersion () == CODEC_V1 ) {
326
+ assertThat (readManifest .getGlobalMetadataFileName (), is (writeManifest .getGlobalMetadataFileName ()));
327
+ }
328
+ if (writeManifest .getCodecVersion () >= CODEC_V2 ) {
329
+ assertThat (readManifest .getCoordinationMetadata (), is (writeManifest .getCoordinationMetadata ()));
330
+ assertThat (readManifest .getSettingsMetadata (), is (writeManifest .getSettingsMetadata ()));
331
+ assertThat (readManifest .getTemplatesMetadata (), is (writeManifest .getTemplatesMetadata ()));
332
+ assertThat (readManifest .getCustomMetadataMap (), is (writeManifest .getCustomMetadataMap ()));
333
+ assertThat (readManifest .getRoutingTableVersion (), is (writeManifest .getRoutingTableVersion ()));
334
+ assertThat (readManifest .getIndicesRouting (), is (writeManifest .getIndicesRouting ()));
335
+ assertThat (readManifest .getDiscoveryNodesMetadata (), is (writeManifest .getDiscoveryNodesMetadata ()));
336
+ assertThat (readManifest .getClusterBlocksMetadata (), is (writeManifest .getClusterBlocksMetadata ()));
337
+ assertThat (readManifest .getMetadataVersion (), is (writeManifest .getMetadataVersion ()));
338
+ assertThat (readManifest .getDiffManifest (), is (writeManifest .getDiffManifest ()));
339
+ assertThat (readManifest .getTransientSettingsMetadata (), is (writeManifest .getTransientSettingsMetadata ()));
340
+ assertThat (readManifest .getHashesOfConsistentSettings (), is (writeManifest .getHashesOfConsistentSettings ()));
341
+ assertThat (readManifest .getClusterStateCustomMap (), is (writeManifest .getClusterStateCustomMap ()));
342
+ }
276
343
}
277
344
}
0 commit comments