This is an automated email from the ASF dual-hosted git repository.
jinmeiliao 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 786dfe9 GEODE-6779: fix issue with Bean check variations (#3798)
786dfe9 is described below
commit 786dfe9f843cfc62b03b2f9f517eb80f7a5e5782
Author: Joris Melchior <[email protected]>
AuthorDate: Mon Jul 15 22:54:51 2019 -0400
GEODE-6779: fix issue with Bean check variations (#3798)
Co-authored-by: Peter Tran <[email protected]>
Co-authored-by: Joris Melchior <[email protected]>
---
.../apache/geode/management/cli/GfshCommand.java | 33 +++++++++++
.../cli/commands/CompactDiskStoreCommand.java | 15 ++---
.../cli/commands/CreateDiskStoreCommand.java | 22 +------
.../internal/cli/commands/CreateRegionCommand.java | 27 +++------
.../cli/commands/GfshCommandJUnitTest.java | 67 ++++++++++++++++++----
5 files changed, 105 insertions(+), 59 deletions(-)
diff --git
a/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
b/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
index 3591086..9e47345 100644
--- a/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
@@ -19,7 +19,9 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
+import java.util.stream.Stream;
+import org.apache.logging.log4j.Logger;
import org.apache.shiro.subject.Subject;
import org.springframework.shell.core.CommandMarker;
@@ -34,6 +36,8 @@ import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.internal.InternalLocator;
import org.apache.geode.internal.Version;
import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.management.DistributedSystemMXBean;
import org.apache.geode.management.ManagementService;
import org.apache.geode.management.api.ClusterManagementService;
import org.apache.geode.management.internal.cli.CliUtil;
@@ -45,6 +49,7 @@ import org.apache.geode.security.ResourcePermission;
@Experimental
public abstract class GfshCommand implements CommandMarker {
+ private static final Logger logger = LogService.getLogger();
public static final String EXPERIMENTAL = "(Experimental) ";
private InternalCache cache;
@@ -250,4 +255,32 @@ public abstract class GfshCommand implements CommandMarker
{
return false;
}
+
+ public boolean
diskStoreBeanAndMemberBeanDiskStoreExists(DistributedSystemMXBean dsMXBean,
+ String memberName,
+ String diskStore) {
+ return diskStoreBeanExists(dsMXBean, memberName, diskStore) &&
+ memberBeanDiskStoreExists(dsMXBean, memberName, diskStore);
+ }
+
+ private boolean diskStoreBeanExists(DistributedSystemMXBean dsMXBean, String
memberName,
+ String diskStore) {
+ try {
+ dsMXBean.fetchDiskStoreObjectName(memberName, diskStore);
+ return true;
+ } catch (Exception e) {
+ if (!e.getMessage().toLowerCase().contains("not found")) {
+ logger.warn("Unable to retrieve Disk Store ObjectName for member: {},
diskstore: {} - {}",
+ memberName, diskStore, e.getMessage());
+ }
+ }
+ return false;
+ }
+
+ private boolean memberBeanDiskStoreExists(DistributedSystemMXBean dsMXBean,
String memberName,
+ String diskStore) {
+ return (Stream.of(dsMXBean.listMemberDiskstore().get(memberName))
+ .filter(dsName -> dsName.equals(diskStore))
+ .findFirst().orElse(null) != null);
+ }
}
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CompactDiskStoreCommand.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CompactDiskStoreCommand.java
index f31a578..62c5bfb 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CompactDiskStoreCommand.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CompactDiskStoreCommand.java
@@ -22,8 +22,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Stream;
-import org.apache.commons.lang3.ArrayUtils;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
@@ -163,16 +163,9 @@ public class CompactDiskStoreCommand extends GfshCommand {
private boolean diskStoreExists(String diskStoreName) {
ManagementService managementService = getManagementService();
DistributedSystemMXBean dsMXBean =
managementService.getDistributedSystemMXBean();
- Map<String, String[]> diskstore = dsMXBean.listMemberDiskstore();
- Set<Map.Entry<String, String[]>> entrySet = diskstore.entrySet();
-
- for (Map.Entry<String, String[]> entry : entrySet) {
- String[] value = entry.getValue();
- if (diskStoreName != null && ArrayUtils.contains(value, diskStoreName)) {
- return true;
- }
- }
- return false;
+ return Stream.of(dsMXBean.listMembers())
+ .anyMatch(memberName ->
diskStoreBeanAndMemberBeanDiskStoreExists(dsMXBean, memberName,
+ diskStoreName));
}
}
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 e741902..7167777 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
@@ -23,7 +23,6 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.logging.log4j.Logger;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
@@ -36,7 +35,6 @@ import org.apache.geode.cache.execute.ResultCollector;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.internal.cache.DiskStoreAttributes;
import org.apache.geode.internal.cache.execute.AbstractExecution;
-import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.DistributedSystemMXBean;
import org.apache.geode.management.cli.CliMetaData;
import org.apache.geode.management.cli.ConverterHint;
@@ -51,7 +49,6 @@ import
org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.ResourcePermission;
public class CreateDiskStoreCommand extends SingleGfshCommand {
- private static final Logger logger = LogService.getLogger();
private static final int MBEAN_CREATION_WAIT_TIME = 10000;
@CliCommand(value = CliStrings.CREATE_DISK_STORE, help =
CliStrings.CREATE_DISK_STORE__HELP)
@@ -155,21 +152,8 @@ public class CreateDiskStoreCommand extends
SingleGfshCommand {
return poll(MBEAN_CREATION_WAIT_TIME, TimeUnit.MILLISECONDS,
() -> membersToCreateDiskStoreOn.stream()
- .allMatch(m -> diskStoreBeanExists(dsMXBean, m.getName(),
diskStore)));
- }
-
- private boolean diskStoreBeanExists(DistributedSystemMXBean dsMXBean, String
memberName,
- String diskStore) {
- try {
- dsMXBean.fetchDiskStoreObjectName(memberName, diskStore);
- return true;
- } catch (Exception e) {
- if (!e.getMessage().toLowerCase().contains("not found")) {
- logger.warn("Unable to retrieve Disk Store ObjectName for member: {},
diskstore: {} - {}",
- memberName, diskStore, e.getMessage());
- }
- }
- return false;
+ .allMatch(member ->
diskStoreBeanAndMemberBeanDiskStoreExists(dsMXBean,
+ member.getName(), diskStore)));
}
@VisibleForTesting
@@ -218,7 +202,7 @@ public class CreateDiskStoreCommand extends
SingleGfshCommand {
}
@SuppressWarnings("unchecked")
- List<DiskStoreDetails> getDiskStoreListing(Set<DistributedMember> members) {
+ private List<DiskStoreDetails> getDiskStoreListing(Set<DistributedMember>
members) {
final Execution membersFunctionExecutor =
getMembersFunctionExecutor(members);
if (membersFunctionExecutor instanceof AbstractExecution) {
((AbstractExecution)
membersFunctionExecutor).setIgnoreDepartedMembers(true);
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommand.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommand.java
index ccdedda..5983778 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommand.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommand.java
@@ -18,12 +18,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import joptsimple.internal.Strings;
-import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.springframework.shell.core.annotation.CliCommand;
@@ -316,7 +315,7 @@ public class CreateRegionCommand extends SingleGfshCommand {
!colocatedRegionBean.getRegionType().equals("PERSISTENT_PARTITION"))
{
return ResultModel.createError(CliStrings.format(
CliStrings.CREATE_REGION__MSG__COLOCATEDWITH_REGION_0_IS_NOT_PARTITIONEDREGION,
- (Object) prColocatedWith));
+ prColocatedWith));
}
}
@@ -565,12 +564,12 @@ public class CreateRegionCommand extends
SingleGfshCommand {
}
String[] regionsOnPath = regionPathData.getRegionsOnParentPath();
- RegionConfig rootConfig = config.getRegions().stream()
- .filter(r -> r.getName().equals(regionsOnPath[0]))
+
+ RegionConfig currentConfig = config.getRegions().stream()
+ .filter(r1 -> r1.getName().equals(regionsOnPath[0]))
.findFirst()
.get();
- RegionConfig currentConfig = rootConfig;
for (int i = 1; i < regionsOnPath.length; i++) {
final String curRegionName = regionsOnPath[i];
currentConfig = currentConfig.getRegions()
@@ -667,24 +666,16 @@ public class CreateRegionCommand extends
SingleGfshCommand {
DistributedSystemMXBean dsMBean =
managementService.getDistributedSystemMXBean();
String[] allRegionPaths = dsMBean.listAllRegionPaths();
- return Arrays.stream(allRegionPaths).anyMatch(regionPath::equals);
+ return Arrays.asList(allRegionPaths).contains(regionPath);
}
private boolean diskStoreExists(String diskStoreName) {
ManagementService managementService = getManagementService();
DistributedSystemMXBean dsMXBean =
managementService.getDistributedSystemMXBean();
- Map<String, String[]> diskstore = dsMXBean.listMemberDiskstore();
-
- Set<Map.Entry<String, String[]>> entrySet = diskstore.entrySet();
-
- for (Map.Entry<String, String[]> entry : entrySet) {
- String[] value = entry.getValue();
- if (diskStoreName != null && ArrayUtils.contains(value, diskStoreName)) {
- return true;
- }
- }
- return false;
+ return Stream.of(dsMXBean.listMembers())
+ .anyMatch(memberName ->
diskStoreBeanAndMemberBeanDiskStoreExists(dsMXBean, memberName,
+ diskStoreName));
}
DistributedSystemMXBean getDSMBean() {
diff --git
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/GfshCommandJUnitTest.java
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/GfshCommandJUnitTest.java
index 409e3fd..3d9e292 100644
---
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/GfshCommandJUnitTest.java
+++
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/GfshCommandJUnitTest.java
@@ -14,42 +14,45 @@
*/
package org.apache.geode.management.internal.cli.commands;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.spy;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.management.ObjectName;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mockito;
-import
org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
+import org.apache.geode.management.DistributedSystemMXBean;
import org.apache.geode.management.cli.GfshCommand;
-import org.apache.geode.management.internal.cli.shell.Gfsh;
import org.apache.geode.management.internal.exceptions.EntityNotFoundException;
public class GfshCommandJUnitTest {
-
+ private String memberName = "memberONe";
+ private String diskStoreName = "diskStoreOne";
private GfshCommand command;
- private Gfsh gfsh;
- private InternalConfigurationPersistenceService clusterConfigurationService;
@Before
public void before() throws Exception {
command = spy(GfshCommand.class);
- gfsh = mock(Gfsh.class);
- clusterConfigurationService =
mock(InternalConfigurationPersistenceService.class);
}
@Test
- public void getMember() throws Exception {
+ public void getMember() {
doReturn(null).when(command).findMember("test");
assertThatThrownBy(() ->
command.getMember("test")).isInstanceOf(EntityNotFoundException.class);
}
@Test
- public void getMembers() throws Exception {
+ public void getMembers() {
String[] members = {"member"};
doReturn(Collections.emptySet()).when(command).findMembers(members, null);
assertThatThrownBy(() -> command.getMembers(members, null))
@@ -57,10 +60,52 @@ public class GfshCommandJUnitTest {
}
@Test
- public void getMembersIncludingLocators() throws Exception {
+ public void getMembersIncludingLocators() {
String[] members = {"member"};
doReturn(Collections.emptySet()).when(command).findMembersIncludingLocators(members,
null);
assertThatThrownBy(() -> command.getMembersIncludingLocators(members,
null))
.isInstanceOf(EntityNotFoundException.class);
}
+
+ @Test
+ public void diskStoreBeanAndMemberBeanDiskStoreExists() throws Exception {
+ Map<String, String[]> memberDiskStore = new HashMap<>();
+ memberDiskStore.put(memberName, new String[] {diskStoreName});
+ ObjectName objectName = new ObjectName("");
+
+ DistributedSystemMXBean distributedSystemMXBean =
Mockito.mock(DistributedSystemMXBean.class);
+
doReturn(memberDiskStore).when(distributedSystemMXBean).listMemberDiskstore();
+
doReturn(objectName).when(distributedSystemMXBean).fetchDiskStoreObjectName(any(),
any());
+
+
assertThat(command.diskStoreBeanAndMemberBeanDiskStoreExists(distributedSystemMXBean,
+ memberName, diskStoreName)).isTrue();
+ }
+
+ @Test
+ public void diskStoreBeanExistsAndMemberDiskStoreNotFound() throws Exception
{
+ Map<String, String[]> memberDiskStore = new HashMap<>();
+ memberDiskStore.put(memberName, new String[] {});
+ ObjectName objectName = new ObjectName("");
+
+ DistributedSystemMXBean distributedSystemMXBean =
Mockito.mock(DistributedSystemMXBean.class);
+
doReturn(memberDiskStore).when(distributedSystemMXBean).listMemberDiskstore();
+
doReturn(objectName).when(distributedSystemMXBean).fetchDiskStoreObjectName(any(),
any());
+
+
assertThat(command.diskStoreBeanAndMemberBeanDiskStoreExists(distributedSystemMXBean,
+ memberName, diskStoreName)).isFalse();
+ }
+
+ @Test
+ public void diskStoreBeanNotFoundAndMemberDiskStoreExists() throws Exception
{
+ Map<String, String[]> memberDiskStore = new HashMap<>();
+ memberDiskStore.put(memberName, new String[] {diskStoreName});
+
+ DistributedSystemMXBean distributedSystemMXBean =
Mockito.mock(DistributedSystemMXBean.class);
+
doReturn(memberDiskStore).when(distributedSystemMXBean).listMemberDiskstore();
+ doThrow(new Exception("not found")).when(distributedSystemMXBean)
+ .fetchDiskStoreObjectName(any(), any());
+
+
assertThat(command.diskStoreBeanAndMemberBeanDiskStoreExists(distributedSystemMXBean,
+ memberName, diskStoreName)).isFalse();
+ }
}