public void testFailLoadShardPathIndexUUIDMissmatch() throws IOException { try (final NodeEnvironment env = newNodeEnvironment(Settings.builder().build())) { Settings.Builder builder = Settings.builder() .put(IndexMetaData.SETTING_INDEX_UUID, "foobar") .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT); Settings settings = builder.build(); ShardId shardId = new ShardId("foo", "foobar", 0); Path[] paths = env.availableShardPaths(shardId); Path path = randomFrom(paths); int id = randomIntBetween(1, 10); ShardStateMetaData.FORMAT.write( new ShardStateMetaData(id, true, "0xDEADBEEF", AllocationId.newInitializing()), path); Exception e = expectThrows( IllegalStateException.class, () -> ShardPath.loadShardPath( logger, env, shardId, IndexSettingsModule.newIndexSettings(shardId.getIndex(), settings))); assertThat(e.getMessage(), containsString("expected: foobar on shard path")); } }
public void testLoadShardPath() throws IOException { try (final NodeEnvironment env = newNodeEnvironment(Settings.builder().build())) { Settings.Builder builder = Settings.builder() .put(IndexMetaData.SETTING_INDEX_UUID, "0xDEADBEEF") .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT); Settings settings = builder.build(); ShardId shardId = new ShardId("foo", "0xDEADBEEF", 0); Path[] paths = env.availableShardPaths(shardId); Path path = randomFrom(paths); ShardStateMetaData.FORMAT.write( new ShardStateMetaData(2, true, "0xDEADBEEF", AllocationId.newInitializing()), path); ShardPath shardPath = ShardPath.loadShardPath( logger, env, shardId, IndexSettingsModule.newIndexSettings(shardId.getIndex(), settings)); assertEquals(path, shardPath.getDataPath()); assertEquals("0xDEADBEEF", shardPath.getShardId().getIndex().getUUID()); assertEquals("foo", shardPath.getShardId().getIndexName()); assertEquals(path.resolve("translog"), shardPath.resolveTranslog()); assertEquals(path.resolve("index"), shardPath.resolveIndex()); } }
public void testFailLoadShardPathOnMultiState() throws IOException { try (final NodeEnvironment env = newNodeEnvironment(Settings.builder().build())) { final String indexUUID = "0xDEADBEEF"; Settings.Builder builder = Settings.builder() .put(IndexMetaData.SETTING_INDEX_UUID, indexUUID) .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT); Settings settings = builder.build(); ShardId shardId = new ShardId("foo", indexUUID, 0); Path[] paths = env.availableShardPaths(shardId); assumeTrue("This test tests multi data.path but we only got one", paths.length > 1); int id = randomIntBetween(1, 10); ShardStateMetaData.FORMAT.write( new ShardStateMetaData(id, true, indexUUID, AllocationId.newInitializing()), paths); Exception e = expectThrows( IllegalStateException.class, () -> ShardPath.loadShardPath( logger, env, shardId, IndexSettingsModule.newIndexSettings(shardId.getIndex(), settings))); assertThat(e.getMessage(), containsString("more than one shard state found")); } }
public void testGetRootPaths() throws IOException { boolean useCustomDataPath = randomBoolean(); final Settings indexSettings; final Settings nodeSettings; final String indexUUID = "0xDEADBEEF"; Settings.Builder indexSettingsBuilder = Settings.builder() .put(IndexMetaData.SETTING_INDEX_UUID, indexUUID) .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT); final Path customPath; if (useCustomDataPath) { final Path path = createTempDir(); final boolean includeNodeId = randomBoolean(); indexSettings = indexSettingsBuilder.put(IndexMetaData.SETTING_DATA_PATH, "custom").build(); nodeSettings = Settings.builder() .put( Environment.PATH_SHARED_DATA_SETTING.getKey(), path.toAbsolutePath().toAbsolutePath()) .put(NodeEnvironment.ADD_NODE_LOCK_ID_TO_CUSTOM_PATH.getKey(), includeNodeId) .build(); if (includeNodeId) { customPath = path.resolve("custom").resolve("0"); } else { customPath = path.resolve("custom"); } } else { customPath = null; indexSettings = indexSettingsBuilder.build(); nodeSettings = Settings.EMPTY; } try (final NodeEnvironment env = newNodeEnvironment(nodeSettings)) { ShardId shardId = new ShardId("foo", indexUUID, 0); Path[] paths = env.availableShardPaths(shardId); Path path = randomFrom(paths); ShardStateMetaData.FORMAT.write( new ShardStateMetaData(2, true, indexUUID, AllocationId.newInitializing()), path); ShardPath shardPath = ShardPath.loadShardPath( logger, env, shardId, IndexSettingsModule.newIndexSettings( shardId.getIndex(), indexSettings, nodeSettings)); boolean found = false; for (Path p : env.nodeDataPaths()) { if (p.equals(shardPath.getRootStatePath())) { found = true; break; } } assertTrue( "root state paths must be a node path but wasn't: " + shardPath.getRootStatePath(), found); found = false; if (useCustomDataPath) { assertNotEquals(shardPath.getRootDataPath(), shardPath.getRootStatePath()); assertEquals(customPath, shardPath.getRootDataPath()); } else { assertNull(customPath); for (Path p : env.nodeDataPaths()) { if (p.equals(shardPath.getRootDataPath())) { found = true; break; } } assertTrue( "root state paths must be a node path but wasn't: " + shardPath.getRootDataPath(), found); } } }