Skip to content

Commit

Permalink
Fix path.data as comma separated string (#76202) (#79272)
Browse files Browse the repository at this point in the history
For multiple data paths, there are several allowed varieties of
specifcying the paths. The yaml list forms, both single and multi line,
are allowed, but another form is a string containing commas that is
parsed as a list. This latter form was broken recently by the
refactoring of path.data parsing to emit deprecation warnings for MDP.
This commit fixes the comma separated string case and adds a test.

closes #76181
  • Loading branch information
rjernst authored Oct 18, 2021
1 parent dce0347 commit 94773fc
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
10 changes: 8 additions & 2 deletions server/src/main/java/org/elasticsearch/env/Environment.java
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,13 @@ public Environment(final Settings settings, final Path configPath) {

final Settings.Builder finalSettings = Settings.builder().put(settings);
if (PATH_DATA_SETTING.exists(settings)) {
finalSettings.putList(PATH_DATA_SETTING.getKey(), Arrays.stream(dataFiles).map(Path::toString).collect(Collectors.toList()));
if (dataPathUsesList(settings)) {
finalSettings.putList(PATH_DATA_SETTING.getKey(),
Arrays.stream(dataFiles).map(Path::toString).collect(Collectors.toList()));
} else {
assert dataFiles.length == 1;
finalSettings.put(PATH_DATA_SETTING.getKey(), dataFiles[0]);
}
}
finalSettings.put(PATH_HOME_SETTING.getKey(), homeFile);
finalSettings.put(PATH_LOGS_SETTING.getKey(), logsFile.toString());
Expand Down Expand Up @@ -303,7 +309,7 @@ public static boolean dataPathUsesList(Settings settings) {
return false;
}
String rawDataPath = settings.get(PATH_DATA_SETTING.getKey());
return rawDataPath.startsWith("[");
return rawDataPath.startsWith("[") || rawDataPath.contains(",");
}

public static FileStore getFileStore(final Path path) throws IOException {
Expand Down
15 changes: 15 additions & 0 deletions server/src/test/java/org/elasticsearch/env/EnvironmentTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.CoreMatchers.startsWith;
import static org.hamcrest.Matchers.arrayWithSize;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
Expand Down Expand Up @@ -72,6 +73,15 @@ public void testPathDataNotSetInEnvironmentIfNotSet() {
assertFalse(Environment.PATH_DATA_SETTING.exists(environment.settings()));
}

public void testPathDataLegacyCommaList() {
final Settings settings = Settings.builder()
.put("path.home", createTempDir().toAbsolutePath())
.put("path.data", createTempDir().toAbsolutePath() + "," + createTempDir().toAbsolutePath())
.build();
final Environment environment = new Environment(settings, null);
assertThat(environment.dataFiles(), arrayWithSize(2));
}

public void testPathLogsWhenNotSet() {
final Path pathHome = createTempDir().toAbsolutePath();
final Settings settings = Settings.builder().put("path.home", pathHome).build();
Expand Down Expand Up @@ -173,6 +183,11 @@ public void testSingleDataPathListCheck() {
.putList(Environment.PATH_DATA_SETTING.getKey(), createTempDir().toString()).build();
assertThat(Environment.dataPathUsesList(settings), is(true));
}
{
final Settings settings = Settings.builder()
.put(Environment.PATH_DATA_SETTING.getKey(), createTempDir().toString() + "," + createTempDir().toString()).build();
assertThat(Environment.dataPathUsesList(settings), is(true));
}
}

private void assertPath(final String actual, final Path expected) {
Expand Down

0 comments on commit 94773fc

Please sign in to comment.