This is an automated email from the ASF dual-hosted git repository.
mkevo pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 9f2ba7b9d6 GEODE-7875: fix create index gfsh command on partitioned
region (#7629)
9f2ba7b9d6 is described below
commit 9f2ba7b9d6976adcf28383c566c9f80af67219e3
Author: Mario Kevo <[email protected]>
AuthorDate: Thu Jun 9 11:14:13 2022 +0200
GEODE-7875: fix create index gfsh command on partitioned region (#7629)
* GEODE-7875: fix create index gfsh command on partitioned region
---
.../commands/IndexCommandsIntegrationTestBase.java | 6 ++--
.../cli/commands/CreateIndexCommandDUnitTest.java | 37 +++++++++++++++++++---
.../internal/cli/commands/CreateIndexCommand.java | 5 ++-
.../cli/functions/CreateIndexFunction.java | 6 ++--
4 files changed, 42 insertions(+), 12 deletions(-)
diff --git
a/geode-dunit/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommandsIntegrationTestBase.java
b/geode-dunit/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommandsIntegrationTestBase.java
index 1359dc4189..d9f2a472fd 100644
---
a/geode-dunit/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommandsIntegrationTestBase.java
+++
b/geode-dunit/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommandsIntegrationTestBase.java
@@ -136,7 +136,9 @@ public class IndexCommandsIntegrationTestBase {
csb.addOption(CliStrings.CREATE_INDEX__REGION, SEPARATOR + regionName);
csb.addOption(CliStrings.CREATE_INDEX__TYPE, "hash");
- gfsh.executeAndAssertThat(csb.toString()).statusIsError();
+ gfsh.executeAndAssertThat(csb.toString())
+ .statusIsSuccess()
+ .containsOutput("Index \"indexA\" already exists. Create failed due
to duplicate name.");
}
@Test
@@ -170,7 +172,7 @@ public class IndexCommandsIntegrationTestBase {
createSimpleIndexA();
gfsh.executeAndAssertThat(
"create index --name=indexA --expression=key --region=" + SEPARATOR +
"regionA")
- .statusIsError()
+ .statusIsSuccess()
.containsOutput("Index \"indexA\" already exists. Create failed due
to duplicate name");
}
diff --git
a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommandDUnitTest.java
b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommandDUnitTest.java
index 75c8db4e41..1790cb36bd 100644
---
a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommandDUnitTest.java
+++
b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommandDUnitTest.java
@@ -48,13 +48,14 @@ public class CreateIndexCommandDUnitTest {
@ClassRule
public static GfshCommandRule gfsh = new GfshCommandRule();
- private static MemberVM locator, server1, server2;
+ private static MemberVM locator;
+ private static MemberVM server1;
@BeforeClass
public static void beforeClass() throws Exception {
locator = cluster.startLocatorVM(0);
server1 = cluster.startServerVM(1, locator.getPort());
- server2 = cluster.startServerVM(2, "group2", locator.getPort());
+ cluster.startServerVM(2, "group2", locator.getPort());
gfsh.connectAndVerify(locator);
// create a region on server-2 in group 2
@@ -71,7 +72,7 @@ public class CreateIndexCommandDUnitTest {
}
@Test
- public void createIndexOnSubRegion() throws Exception {
+ public void createIndexOnSubRegion() {
gfsh.executeAndAssertThat(
"create region --name=regionB" + SEPARATOR + "child --group=group2
--type=REPLICATE")
.statusIsSuccess();
@@ -107,7 +108,7 @@ public class CreateIndexCommandDUnitTest {
@Test
// index can't be created on region name with ".".
// GEODE-7523
- public void createIndexOnRegionNameWithDot() throws Exception {
+ public void createIndexOnRegionNameWithDot() {
gfsh.executeAndAssertThat("create region --name=A.B --type=REPLICATE")
.statusIsSuccess();
gfsh.executeAndAssertThat("create index --name=indexWithDot --region=A.B
--expression=id")
@@ -124,7 +125,7 @@ public class CreateIndexCommandDUnitTest {
}
@Test
- public void regionNotExistInThatMember() throws Exception {
+ public void regionNotExistInThatMember() {
gfsh.executeAndAssertThat(
"create index --name=myIndex --expression=id --region=" + SEPARATOR
+ "regionB --member=server-1")
@@ -210,4 +211,30 @@ public class CreateIndexCommandDUnitTest {
commandAssert.hasInfoSection().hasOutput()
.contains("Region regionB does not exist in some of the groups.");
}
+
+ @Test
+ public void indexCreationOnPartitionedRegionUpdateClusterConfig() {
+ int serversNum = 8;
+ int initialIndex = 1;
+
+ for (int index = 2; index < serversNum; index++) {
+ cluster.startServerVM(initialIndex + index, locator.getPort());
+ }
+
+ gfsh.executeAndAssertThat("create region --name=regionC --type=PARTITION")
+ .statusIsSuccess();
+
+ gfsh.executeAndAssertThat(
+ "create index --name=index1 --expression=id --region=regionC")
+ .statusIsSuccess()
+ .hasTableSection()
+ .hasRowSize(8);
+
+ gfsh.executeAndAssertThat("export cluster-configuration")
+ .statusIsSuccess()
+ .hasInfoSection()
+ .hasOutput()
+ .contains(
+ "index name=\"index1\" expression=\"id\" from-clause=\"/regionC\"
key-index=\"false\" type=\"range\"");
+ }
}
diff --git
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java
index d1f4f1892a..be126d9a73 100644
---
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java
+++
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java
@@ -96,9 +96,8 @@ public class CreateIndexCommand extends GfshCommand {
.createError("Region " + regionName + " does not exist in some of
the groups.");
}
if (groups == null) {
- // the calculatedGroups will have "cluster" value to indicate the
"cluster" level, in thise
- // case
- // we want the groups to an empty array
+ // the calculatedGroups will have "cluster" value to indicate the
"cluster" level,
+ // in this case we want the groups to an empty array
groups = calculatedGroups.stream().filter(s ->
!AbstractConfiguration.CLUSTER.equals(s))
.toArray(String[]::new);
}
diff --git
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/CreateIndexFunction.java
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/CreateIndexFunction.java
index d232b6e676..261447ab03 100644
---
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/CreateIndexFunction.java
+++
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/CreateIndexFunction.java
@@ -66,11 +66,13 @@ public class CreateIndexFunction implements
InternalFunction<RegionConfig.Index>
} catch (IndexExistsException e) {
String message =
CliStrings.format(CliStrings.CREATE_INDEX__INDEX__EXISTS,
indexInfo.getName());
- context.getResultSender().lastResult(new CliFunctionResult(memberId,
false, message));
+ context.getResultSender().lastResult(
+ new CliFunctionResult(memberId,
CliFunctionResult.StatusState.IGNORABLE, message));
} catch (IndexNameConflictException e) {
String message =
CliStrings.format(CliStrings.CREATE_INDEX__NAME__CONFLICT,
indexInfo.getName());
- context.getResultSender().lastResult(new CliFunctionResult(memberId,
false, message));
+ context.getResultSender().lastResult(
+ new CliFunctionResult(memberId,
CliFunctionResult.StatusState.IGNORABLE, message));
} catch (RegionNotFoundException e) {
String message =
CliStrings.format(CliStrings.CREATE_INDEX__INVALID__REGIONPATH,
indexInfo.getFromClause());