You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bo...@apache.org on 2018/12/20 18:40:39 UTC

[geode] 01/01: GEODE-6205: Set disk-dir in gfsh either absolute or relative based on input directory

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 <bo...@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);