You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kh...@apache.org on 2017/05/01 19:26:35 UTC

geode git commit: WIP: investigating altering server's working dir in the test

Repository: geode
Updated Branches:
  refs/heads/feature/GEODE-2681 [created] 54f0335e3


WIP: investigating altering server's working dir in the test


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/54f0335e
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/54f0335e
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/54f0335e

Branch: refs/heads/feature/GEODE-2681
Commit: 54f0335e3de97c0924f86ca308a96855811e86e5
Parents: c2e7d1f
Author: Ken Howe <kh...@pivotal.io>
Authored: Mon May 1 10:59:13 2017 -0700
Committer: Ken Howe <kh...@pivotal.io>
Committed: Mon May 1 12:16:47 2017 -0700

----------------------------------------------------------------------
 .../internal/cache/DiskStoreFactoryImpl.java    |  11 ++
 .../cli/functions/CreateDiskStoreFunction.java  |   2 +-
 .../ShowMissingDiskStoresFunction.java          |   2 -
 .../ShowMissingDiskStoresDUnitTest.java         | 111 +++++++++++++------
 4 files changed, 91 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/54f0335e/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreFactoryImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreFactoryImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreFactoryImpl.java
index 000bf0d..b0b6e4b 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreFactoryImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreFactoryImpl.java
@@ -35,6 +35,7 @@ import org.apache.geode.pdx.internal.TypeRegistry;
  * @since GemFire prPersistSprint2
  */
 public class DiskStoreFactoryImpl implements DiskStoreFactory {
+  public static boolean testhookResetWorkingDir;
   private final Cache cache;
   private final DiskStoreAttributes attrs = new DiskStoreAttributes();
 
@@ -189,6 +190,16 @@ public class DiskStoreFactoryImpl implements DiskStoreFactory {
   }
 
   public DiskStoreFactory setDiskDirsAndSizes(File[] diskDirs, int[] diskDirSizes) {
+    System.out.println("testhook = " + testhookResetWorkingDir);
+    if (testhookResetWorkingDir) {
+      // make sure the diskDirs are absolute path
+      for (int i=0; i<diskDirs.length; i++){
+        File dir = diskDirs[i];
+        if(!dir.isAbsolute()){
+          diskDirs[i] = new File(System.getProperty("user.dir"), dir.getPath());
+        }
+      }
+    }
     if (diskDirSizes.length != diskDirs.length) {
       throw new IllegalArgumentException(
           LocalizedStrings.AttributesFactory_NUMBER_OF_DISKSIZES_IS_0_WHICH_IS_NOT_EQUAL_TO_NUMBER_OF_DISK_DIRS_WHICH_IS_1

http://git-wip-us.apache.org/repos/asf/geode/blob/54f0335e/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java
index 944044b..b1f3fdc 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java
@@ -50,7 +50,7 @@ public class CreateDiskStoreFunction extends FunctionAdapter implements Internal
       final String diskStoreName = (String) args[0];
       final DiskStoreAttributes diskStoreAttrs = (DiskStoreAttributes) args[01];
 
-      GemFireCacheImpl cache = (GemFireCacheImpl) CacheFactory.getAnyInstance();
+      GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
 
       DistributedMember member = cache.getDistributedSystem().getDistributedMember();
 

http://git-wip-us.apache.org/repos/asf/geode/blob/54f0335e/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java
index 441486e..d177ed3 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java
@@ -19,8 +19,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.execute.FunctionAdapter;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;

http://git-wip-us.apache.org/repos/asf/geode/blob/54f0335e/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoresDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoresDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoresDUnitTest.java
index 766f25a..32fcf31 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoresDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoresDUnitTest.java
@@ -14,22 +14,15 @@
  */
 package org.apache.geode.management.internal.cli.commands;
 
-import static org.apache.geode.distributed.ConfigurationProperties.CLUSTER_CONFIGURATION_DIR;
-import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
 import static org.apache.geode.distributed.ConfigurationProperties.GROUPS;
 import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
 import static org.assertj.core.api.Assertions.assertThat;
 
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.DiskStoreFactory;
-import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionShortcut;
-import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.distributed.ServerLauncher;
-import org.apache.geode.internal.cache.DiskStoreAttributes;
+import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.cache.DiskStoreFactoryImpl;
-import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.CommandResult;
 import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
@@ -45,15 +38,8 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.TestName;
-import org.springframework.shell.support.util.FileUtils;
 
 import java.io.File;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
@@ -62,6 +48,8 @@ public class ShowMissingDiskStoresDUnitTest {
 
   // private static final String DISK_STORE = "diskStore";
   private static final String DISK_STORE_DIR = "myDiskStores";
+  private final String testRegionName = "regionA";
+
   private MemberVM locator;
   private MemberVM server1;
   private MemberVM server2;
@@ -78,23 +66,38 @@ public class ShowMissingDiskStoresDUnitTest {
   @Before
   public void before() throws Exception {
     locator = lsRule.startLocatorVM(0);
+    System.out.println("Locator is on port " + locator.getPort());
     gfshConnector.connect(locator);
     assertThat(gfshConnector.isConnected()).isTrue();
 
-    // start a server so that we can execute data commands that requires at least a server running
-    server1 = lsRule.startServerVM(1, locator.getPort());
-    server2 = lsRule.startServerVM(2, locator.getPort());
+    // start servers so that we can execute data commands that requires at least a server running
+    Properties localProps;
+    localProps = new Properties();
+    localProps.setProperty(GROUPS, "Group1");
+    server1 = lsRule.startServerVM(1, localProps, locator.getPort());
+    localProps = new Properties();
+    localProps.setProperty(GROUPS, "Group2");
+    server2 = lsRule.startServerVM(2, localProps, locator.getPort());
+
+    server1.invoke(() -> DiskStoreFactoryImpl.testhookResetWorkingDir = true);
+    server2.invoke(() -> DiskStoreFactoryImpl.testhookResetWorkingDir = true);
   }
 
   @Ignore("WIP: new test for GEODE-2681 fix")
   @Test
   public void missingDiskStores_gfshDoesntHang() throws Exception {
-    final String testRegionName = "regionA";
     CommandStringBuilder csb;
     // TODO: Need to ensure that the diskstores are created in "user.dir" as set by the
     // *StarterRules, see DiskStoreFactoryImpl.setDiskDirsAndSizes
     csb = new CommandStringBuilder(CliStrings.CREATE_DISK_STORE)
         .addOption(CliStrings.CREATE_DISK_STORE__NAME, "diskStore")
+        .addOption(CliStrings.CREATE_DISK_STORE__GROUP, "Group1")
+        .addOption(CliStrings.CREATE_DISK_STORE__DIRECTORY_AND_SIZE, "diskStoreDir");
+    gfshConnector.executeAndVerifyCommand(csb.getCommandString());
+
+    csb = new CommandStringBuilder(CliStrings.CREATE_DISK_STORE)
+        .addOption(CliStrings.CREATE_DISK_STORE__NAME, "diskStore")
+        .addOption(CliStrings.CREATE_DISK_STORE__GROUP, "Group2")
         .addOption(CliStrings.CREATE_DISK_STORE__DIRECTORY_AND_SIZE, "diskStoreDir");
     gfshConnector.executeAndVerifyCommand(csb.getCommandString());
 
@@ -102,13 +105,21 @@ public class ShowMissingDiskStoresDUnitTest {
       return new File(server1.getWorkingDir(), "diskStoreDir").exists()
           && new File(server2.getWorkingDir(), "diskStoreDir").exists();
     });
+    Thread.sleep(2000);
+    gfshConnector.executeCommand("list disk-stores" );
+//    Awaitility.await().atMost(10,TimeUnit.SECONDS).until(() ->
+//        gfshConnector.executeCommand("list disk-stores" + testRegionName).getStatus().equals(
+//            Result.Status.OK));
 
     csb = new CommandStringBuilder(CliStrings.CREATE_REGION)
         .addOption(CliStrings.CREATE_REGION__REGION, testRegionName)
         .addOption(CliStrings.CREATE_REGION__DISKSTORE, "diskStore")
         .addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT,
-            RegionShortcut.REPLICATE_PERSISTENT.toString());
+            RegionShortcut.PARTITION_PERSISTENT.toString());
     gfshConnector.executeAndVerifyCommand(csb.getCommandString());
+    Awaitility.await().atMost(10,TimeUnit.SECONDS).until(() ->
+        gfshConnector.executeCommand("describe region --name=" + testRegionName).getStatus().equals(
+            Result.Status.OK));
 
     // Add data to the region
     putUsingGfsh(gfshConnector, testRegionName, 1, "A");
@@ -118,36 +129,72 @@ public class ShowMissingDiskStoresDUnitTest {
     lsRule.stopMember(1);
     lsRule.stopMember(2);
 
-    AsyncInvocation restart1 = restartServerAsync(server1);
-    checkAsyncResults(restart1, gfshConnector, 5);
+    CommandResult result = gfshConnector.executeCommand("list members");
+    System.out.println(result.getContent());
+    result = gfshConnector.executeCommand("show missing-disk-stores");
 
-    AsyncInvocation restart2 = restartServerAsync(server2);
-    checkAsyncResults(restart2, gfshConnector, 5);
+//    AsyncInvocation restart1 = restartServer(server1, true);
+//    checkAsyncResults(restart1, gfshConnector, 5);
+//
+//    AsyncInvocation restart2 = restartServer(server2, true);
+//    checkAsyncResults(restart2, gfshConnector, 5);
 
-    for (AsyncInvocation ai : new AsyncInvocation[] {restart1, restart2}) {
+    int locatorPort = locator.getPort();
+    String memberWorkingDir1 = server1.getWorkingDir().getAbsolutePath();
+    String memberName1 = server1.getName();
+    int server1Port = server1.getPort();
+    AsyncInvocation restart = server1.getVM().invokeAsync("Restart server 1", () -> {
+      ServerLauncher serverLauncher =
+          new ServerLauncher.Builder().setWorkingDirectory(memberWorkingDir1)
+              .setMemberName(memberName1).set(LOCATORS, "localhost[" + locatorPort + "]")
+              .setServerPort(server1Port).build();
+      serverLauncher.start();
+    });
+
+    String memberWorkingDir2 = server2.getWorkingDir().getAbsolutePath();
+    String memberName2 = server2.getName();
+    int server2Port = server2.getPort();
+    server2.getVM().invoke("Restart server 2", () -> {
+      ServerLauncher serverLauncher =
+          new ServerLauncher.Builder().setWorkingDirectory(memberWorkingDir2)
+              .setMemberName(memberName2).set(LOCATORS, "localhost[" + locatorPort + "]")
+              .setServerPort(server2Port).build();
+      serverLauncher.start();
+    });
+
+    Awaitility.await().atMost(10,TimeUnit.SECONDS).until(() ->
+      gfshConnector.executeCommand("describe region --name=" + testRegionName).getStatus().equals(
+          Result.Status.OK));
+//    System.out.println(result);
+
+    for (AsyncInvocation ai : new AsyncInvocation[] {restart/*, restart2*/}) {
       if (ai.isAlive()) {
-        restart1.cancel(true);
+        ai.cancel(true);
       }
     }
   }
 
-  private AsyncInvocation restartServerAsync(MemberVM member) throws Exception {
+  private AsyncInvocation restartServer(MemberVM member, boolean async) throws Exception {
     String memberWorkingDir = member.getWorkingDir().getAbsolutePath();
+    String memberName = member.getName();
     int locatorPort = locator.getPort();
     AsyncInvocation restart = member.invokeAsync(() -> {
       ServerLauncher serverLauncher =
           new ServerLauncher.Builder().setWorkingDirectory(memberWorkingDir)
-              .setMemberName("server-1").set(LOCATORS, "localhost[" + locatorPort + "]").build();
+              .setMemberName(memberName).set(LOCATORS, "localhost[" + locatorPort + "]").build();
       serverLauncher.start();
     });
 
+    if (!async) {
+      Awaitility.await().until(() -> restart.isDone());
+    }
     return restart;
   }
 
   private void checkAsyncResults(AsyncInvocation ai, GfshShellConnectionRule gfsh, int secsToWait)
       throws Exception {
     try {
-      Awaitility.await().atLeast(secsToWait, TimeUnit.SECONDS).until(() -> ai.isDone());
+      Awaitility.await().atMost(secsToWait, TimeUnit.SECONDS).until(() -> ai.isDone());
     } catch (Exception e) {
       // e.printStackTrace();
     }
@@ -155,9 +202,9 @@ public class ShowMissingDiskStoresDUnitTest {
     CommandResult result;
 
     result = gfsh.executeCommand("list members");
-    System.out.println(result);
+    System.out.println(result.getContent());
     result = gfsh.executeCommand("show missing-disk-stores");
-    System.out.println(result);
+//    System.out.println(result.getContent());
   }
 
   private void putUsingGfsh(GfshShellConnectionRule gfsh, String regionName, int key, String val)