This is an automated email from the ASF dual-hosted git repository. boglesby pushed a commit to branch feature/GEODE-6205 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 5f3f91e3cdad52e9674b6b7e92942afa2b4df08a Author: Barry Oglesby <bogle...@pivotal.io> AuthorDate: Fri Dec 14 18:01:40 2018 -0800 GEODE-6205: Set disk-dir in gfsh either absolute or relative based on input directory --- .../cli/commands/DiskStoreCommandsDUnitTest.java | 79 +++++++++++++++++++++- .../cli/commands/CreateDiskStoreCommand.java | 4 +- 2 files changed, 79 insertions(+), 4 deletions(-) diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java index 7a2e855..69d1acf 100644 --- a/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java +++ b/geode-core/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java @@ -15,9 +15,12 @@ package org.apache.geode.management.internal.cli.commands; +import static org.apache.geode.internal.lang.SystemUtils.CURRENT_DIRECTORY; import static org.assertj.core.api.Assertions.assertThat; import java.io.File; +import java.io.IOException; +import java.io.Serializable; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -37,8 +40,11 @@ import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.apache.geode.cache.Cache; +import org.apache.geode.cache.DiskStore; import org.apache.geode.cache.Region; import org.apache.geode.cache.configuration.CacheConfig; +import org.apache.geode.cache.configuration.DiskDirType; +import org.apache.geode.cache.configuration.DiskDirsType; import org.apache.geode.cache.configuration.DiskStoreType; import org.apache.geode.distributed.Locator; import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService; @@ -56,7 +62,7 @@ import org.apache.geode.test.junit.rules.ServerStarterRule; @Category(PersistenceTest.class) @RunWith(JUnitParamsRunner.class) -public class DiskStoreCommandsDUnitTest { +public class DiskStoreCommandsDUnitTest implements Serializable { private static final String GROUP = "GROUP1"; private static final String REGION_1 = "REGION1"; private static final String DISKSTORE = "DISKSTORE"; @@ -65,10 +71,10 @@ public class DiskStoreCommandsDUnitTest { public ClusterStartupRule rule = new ClusterStartupRule(); @Rule - public GfshCommandRule gfsh = new GfshCommandRule(); + public transient GfshCommandRule gfsh = new GfshCommandRule(); @Rule - public TemporaryFolder tempDir = new TemporaryFolder(); + public transient TemporaryFolder tempDir = new TemporaryFolder(); private void createDiskStoreAndRegion(MemberVM jmxManager, int serverCount) { gfsh.executeAndAssertThat(String.format( @@ -461,4 +467,71 @@ public class DiskStoreCommandsDUnitTest { .containsOutput("Could not find disk-dirs:"); assertThat(Files.exists(nonExistingDiskStorePath)).isFalse(); } + + @Test + @Parameters(method = "getDiskDirNames") + public void validateDiskStoreDiskDirectoryPath(String diskDirectoryName) + throws Exception { + // Start locator and server + MemberVM locator = rule.startLocatorVM(0); + MemberVM server = rule.startServerVM(1, locator.getPort()); + + // Connect gfsh + gfsh.connectAndVerify(locator); + + // Create a disk store with the input disk-dir name + gfsh.executeAndAssertThat( + String.format("create disk-store --name=%s --dir=%s", DISKSTORE, diskDirectoryName)) + .statusIsSuccess(); + + // Verify the server defines the disk store with the disk-dir path + server.invoke(() -> { + verifyDiskStoreInServer(DISKSTORE, diskDirectoryName); + }); + + // Verify the cluster config stores the disk store with the input disk-dir path + locator.invoke(() -> { + verifyDiskStoreInClusterConfiguration(diskDirectoryName); + }); + + // Stop and start the server + rule.stop(1); + server = rule.startServerVM(2, locator.getPort()); + + // Verify the server still defines the disk store with the disk-dir path + server.invoke(() -> { + verifyDiskStoreInServer(DISKSTORE, diskDirectoryName); + }); + } + + private String[] getDiskDirNames() throws IOException { + tempDir.create(); + return new String[] {tempDir.newFolder(DISKSTORE).getAbsolutePath(), DISKSTORE}; + } + + private void verifyDiskStoreInServer(String diskStoreName, String diskDirectoryName) { + DiskStore diskStore = ClusterStartupRule.getCache().findDiskStore(diskStoreName); + assertThat(diskStore).isNotNull(); + File[] diskDirs = diskStore.getDiskDirs(); + assertThat(diskDirs.length).isEqualTo(1); + File diskDir = diskDirs[0]; + String absoluteDiskDirectoryName = diskDirectoryName.startsWith(File.separator) + ? diskDirectoryName : CURRENT_DIRECTORY + File.separator + diskDirectoryName; + assertThat(diskDir.getAbsolutePath()).isEqualTo(absoluteDiskDirectoryName); + } + + private void verifyDiskStoreInClusterConfiguration(String absoluteDirectoryName) { + InternalLocator internalLocator = ClusterStartupRule.getLocator(); + InternalConfigurationPersistenceService cc = + internalLocator.getConfigurationPersistenceService(); + CacheConfig config = cc.getCacheConfig("cluster"); + List<DiskStoreType> diskStores = config.getDiskStores(); + assertThat(diskStores.size()).isEqualTo(1); + DiskStoreType diskStore = diskStores.get(0); + DiskDirsType diskDirsType = diskStore.getDiskDirs(); + List<DiskDirType> diskDirs = diskDirsType.getDiskDirs(); + assertThat(diskDirs.size()).isEqualTo(1); + DiskDirType diskDir = diskDirs.get(0); + assertThat(diskDir.getContent()).isEqualTo(absoluteDirectoryName); + } } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDiskStoreCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDiskStoreCommand.java index 87f84a2..51e08aa 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDiskStoreCommand.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateDiskStoreCommand.java @@ -133,7 +133,9 @@ public class CreateDiskStoreCommand extends SingleGfshCommand { List<DiskDirType> diskDirs = diskDirsType.getDiskDirs(); for (int i = 0; i < diskStoreAttributes.getDiskDirs().length; i++) { DiskDirType diskDir = new DiskDirType(); - diskDir.setContent(diskStoreAttributes.getDiskDirs()[i].getName()); + File diskDirFile = diskStoreAttributes.getDiskDirs()[i]; + diskDir.setContent( + diskDirFile.isAbsolute() ? diskDirFile.getAbsolutePath() : diskDirFile.getName()); diskDir.setDirSize(Integer.toString(diskStoreAttributes.getDiskDirSizes()[i])); diskDirs.add(diskDir);