blob: cbdc341b2316cc598888f42d8d1f5bec261b38c9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.management;
import static org.junit.Assert.fail;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.internal.InternalDistributedSystem;
import org.apache.geode.internal.cache.GemFireCacheImpl;
import org.apache.geode.management.internal.MBeanJMXAdapter;
import org.apache.geode.management.internal.ManagementConstants;
import org.apache.geode.management.internal.SystemManagementService;
import org.apache.geode.test.dunit.LogWriterUtils;
import org.apache.geode.test.dunit.Wait;
import org.apache.geode.test.dunit.WaitCriterion;
/**
* Utility test class to get various proxies
*/
public class MBeanUtil {
private static final int MAX_WAIT = 8 * ManagementConstants.REFRESH_TIME;
public static MBeanServer mbeanServer = MBeanJMXAdapter.mbeanServer;
/**
* Utility Method to obtain MemberMXBean proxy reference for a particular Member
*
* @return a reference to MemberMXBean
*/
public static MemberMXBean getMemberMbeanProxy(DistributedMember member) throws Exception {
MemberMXBean bean = null;
final SystemManagementService service =
(SystemManagementService) ManagementTestBase.getManagementService();
final ObjectName memberMBeanName = service.getMemberMBeanName(member);
Wait.waitForCriterion(new WaitCriterion() {
MemberMXBean bean = null;
@Override
public String description() {
return "Waiting for the proxy to get reflected at managing node";
}
@Override
public boolean done() {
bean = service.getMBeanProxy(memberMBeanName, MemberMXBean.class);
boolean done = bean != null;
return done;
}
}, MAX_WAIT, 500, true);
try {
bean = service.getMBeanProxy(memberMBeanName, MemberMXBean.class);
} catch (ManagementException mgz) {
if (bean == null) {
InternalDistributedSystem.getLogger()
.fine("Undesired Result :MemberMBean Proxy Should Not be Empty for : "
+ memberMBeanName.getCanonicalName());
}
}
return bean;
}
/**
* Utility Method to obtain CacheServerMXBean proxy reference for a particular Member
*
* @return a reference to CacheServerMXBean
*/
public static CacheServerMXBean getCacheServerMbeanProxy(DistributedMember member, int port)
throws Exception {
CacheServerMXBean bean = null;
final SystemManagementService service =
(SystemManagementService) ManagementTestBase.getManagementService();
final ObjectName cacheServerMBeanName = service.getCacheServerMBeanName(port, member);
Wait.waitForCriterion(new WaitCriterion() {
CacheServerMXBean bean = null;
@Override
public String description() {
return "Waiting for the proxy to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
GemFireCacheImpl cacheImpl = (GemFireCacheImpl) cache;
bean = service.getMBeanProxy(cacheServerMBeanName, CacheServerMXBean.class);
boolean done = bean != null;
return done;
}
}, MAX_WAIT, 500, true);
try {
bean = service.getMBeanProxy(cacheServerMBeanName, CacheServerMXBean.class);
} catch (ManagementException mgz) {
if (bean == null) {
InternalDistributedSystem.getLogger()
.fine("Undesired Result :CacheServer Proxy Should Not be Empty for : "
+ cacheServerMBeanName.getCanonicalName());
}
}
return bean;
}
/**
* Utility Method to obtain LockServiceMXBean proxy reference for a particular lock service on a
* Member
*
* @return a reference to LockServiceMXBean
*/
public static LockServiceMXBean getLockServiceMbeanProxy(DistributedMember member,
String lockServiceName) throws Exception {
LockServiceMXBean bean = null;
final SystemManagementService service =
(SystemManagementService) ManagementTestBase.getManagementService();
final ObjectName lockServiceMBeanName =
service.getLockServiceMBeanName(member, lockServiceName);
Wait.waitForCriterion(new WaitCriterion() {
LockServiceMXBean bean = null;
@Override
public String description() {
return "Waiting for the proxy to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
GemFireCacheImpl cacheImpl = (GemFireCacheImpl) cache;
bean = service.getMBeanProxy(lockServiceMBeanName, LockServiceMXBean.class);
boolean done = bean != null;
return done;
}
}, MAX_WAIT, 500, true);
try {
bean = service.getMBeanProxy(lockServiceMBeanName, LockServiceMXBean.class);
} catch (ManagementException mgz) {
if (bean == null) {
InternalDistributedSystem.getLogger()
.fine("Undesired Result :LockService Proxy Should Not be Empty for : "
+ lockServiceMBeanName.getCanonicalName());
}
}
return bean;
}
/**
* Utility Method to obtain RegionMXBean proxy reference for a particular region on a member
*
* @return a reference to RegionMXBean
*/
public static RegionMXBean getRegionMbeanProxy(DistributedMember member, String regionPath)
throws Exception {
final SystemManagementService service =
(SystemManagementService) ManagementTestBase.getManagementService();
final ObjectName regionMBeanName = service.getRegionMBeanName(member, regionPath);
Wait.waitForCriterion(new WaitCriterion() {
RegionMXBean bean = null;
@Override
public String description() {
return "Waiting for the proxy to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
bean = service.getMBeanProxy(regionMBeanName, RegionMXBean.class);
boolean done = (bean != null);
return done;
}
}, MAX_WAIT, 500, true);
RegionMXBean bean = null;
try {
bean = service.getMBeanProxy(regionMBeanName, RegionMXBean.class);
} catch (ManagementException mgz) {
if (bean == null) {
InternalDistributedSystem.getLogger()
.fine("Undesired Result :RegionMBean Proxy Should Not be Empty for : "
+ regionMBeanName.getCanonicalName());
}
}
return bean;
}
/**
* Utility Method to obtain GatewaySenderMXBean proxy reference for a particular sender id on a
* member
*
* @param member distributed member
* @param gatwaySenderId sender id
* @return a reference to GatewaySenderMXBean
*/
public static GatewaySenderMXBean getGatewaySenderMbeanProxy(DistributedMember member,
String gatwaySenderId) throws Exception {
final SystemManagementService service =
(SystemManagementService) ManagementTestBase.getManagementService();
final ObjectName senderMBeanName = service.getGatewaySenderMBeanName(member, gatwaySenderId);
Wait.waitForCriterion(new WaitCriterion() {
GatewaySenderMXBean bean = null;
@Override
public String description() {
return "Waiting for the proxy to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
bean = service.getMBeanProxy(senderMBeanName, GatewaySenderMXBean.class);
boolean done = (bean != null);
return done;
}
}, MAX_WAIT, 500, true);
GatewaySenderMXBean bean = null;
try {
bean = service.getMBeanProxy(senderMBeanName, GatewaySenderMXBean.class);
} catch (ManagementException mgz) {
if (bean == null) {
InternalDistributedSystem.getLogger()
.fine("Undesired Result :GatewaySender MBean Proxy Should Not be Empty for : "
+ senderMBeanName.getCanonicalName());
}
}
return bean;
}
/**
* Utility Method to obtain AsyncEventQueueMXBean proxy reference for a particular queue id on a
* member
*
* @param member distributed member
* @param queueId Queue id
* @return a reference to AsyncEventQueueMXBean
*/
public static AsyncEventQueueMXBean getAsyncEventQueueMBeanProxy(DistributedMember member,
String queueId) throws Exception {
final SystemManagementService service =
(SystemManagementService) ManagementTestBase.getManagementService();
final ObjectName queueMBeanName = service.getAsyncEventQueueMBeanName(member, queueId);
Wait.waitForCriterion(new WaitCriterion() {
AsyncEventQueueMXBean bean = null;
@Override
public String description() {
return "Waiting for the proxy to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
bean = service.getMBeanProxy(queueMBeanName, AsyncEventQueueMXBean.class);
boolean done = (bean != null);
return done;
}
}, MAX_WAIT, 500, true);
AsyncEventQueueMXBean bean = null;
try {
bean = service.getMBeanProxy(queueMBeanName, AsyncEventQueueMXBean.class);
} catch (ManagementException mgz) {
if (bean == null) {
InternalDistributedSystem.getLogger()
.fine("Undesired Result :Async Event Queue MBean Proxy Should Not be Empty for : "
+ queueMBeanName.getCanonicalName());
}
}
return bean;
}
/**
* Utility Method to obtain GatewayReceiverMXBean proxy reference for a member
*
* @param member distributed member
* @return a reference to GatewayReceiverMXBean
*/
public static GatewayReceiverMXBean getGatewayReceiverMbeanProxy(DistributedMember member)
throws Exception {
final SystemManagementService service =
(SystemManagementService) ManagementTestBase.getManagementService();
final ObjectName receiverMBeanName = service.getGatewayReceiverMBeanName(member);
Wait.waitForCriterion(new WaitCriterion() {
GatewayReceiverMXBean bean = null;
@Override
public String description() {
return "Waiting for the proxy to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
bean = service.getMBeanProxy(receiverMBeanName, GatewayReceiverMXBean.class);
boolean done = (bean != null);
return done;
}
}, MAX_WAIT, 500, true);
GatewayReceiverMXBean bean = null;
try {
bean = service.getMBeanProxy(receiverMBeanName, GatewayReceiverMXBean.class);
} catch (ManagementException mgz) {
if (bean == null) {
InternalDistributedSystem.getLogger()
.fine("Undesired Result :GatewaySender MBean Proxy Should Not be Empty for : "
+ receiverMBeanName.getCanonicalName());
}
}
return bean;
}
/**
* Utility Method to obtain DistributedRegionMXBean proxy reference for a particular region
*
* @param regionName name of the region
* @return a reference to DistributedRegionMXBean
*/
public static DistributedRegionMXBean getDistributedRegionMbean(final String regionName,
final int expectedMembers) throws Exception {
DistributedRegionMXBean bean = null;
final ManagementService service = ManagementTestBase.getManagementService();
Wait.waitForCriterion(new WaitCriterion() {
DistributedRegionMXBean bean = null;
@Override
public String description() {
return "Waiting for " + regionName + " With " + expectedMembers
+ " proxies to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
bean = service.getDistributedRegionMXBean(regionName);
boolean done = (bean != null && bean.getMemberCount() == expectedMembers);
return done;
}
}, MAX_WAIT, 1000, true);
bean = service.getDistributedRegionMXBean(regionName);
return bean;
}
/**
* Utility Method to obtain DistributedRegionMXBean proxy reference for a particular region
*
* @param lockServiceName name of the lock service
* @return a reference to DistributedLockServiceMXBean
*/
public static DistributedLockServiceMXBean getDistributedLockMbean(final String lockServiceName,
final int expectedMembers) throws Exception {
DistributedLockServiceMXBean bean = null;
final ManagementService service = ManagementTestBase.getManagementService();
Wait.waitForCriterion(new WaitCriterion() {
DistributedLockServiceMXBean bean = null;
@Override
public String description() {
return "Waiting for " + expectedMembers + " proxies to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
bean = service.getDistributedLockServiceMXBean(lockServiceName);
boolean done = (bean != null && bean.getMemberCount() == expectedMembers);
return done;
}
}, MAX_WAIT, 500, true);
bean = service.getDistributedLockServiceMXBean(lockServiceName);
return bean;
}
/**
* Utility Method to obtain GatewayReceiverMXBean proxy reference for a member
*
* @param member distributed member
* @return a reference to GatewayReceiverMXBean
*/
public static LocatorMXBean getLocatorMbeanProxy(DistributedMember member) throws Exception {
final SystemManagementService service =
(SystemManagementService) ManagementTestBase.getManagementService();
final ObjectName locatorMBeanName = service.getLocatorMBeanName(member);
Wait.waitForCriterion(new WaitCriterion() {
LocatorMXBean bean = null;
@Override
public String description() {
return "Waiting for the proxy to get reflected at managing node";
}
@Override
public boolean done() {
GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
bean = service.getMBeanProxy(locatorMBeanName, LocatorMXBean.class);
boolean done = (bean != null);
return done;
}
}, MAX_WAIT, 500, true);
LocatorMXBean bean = null;
try {
bean = service.getMBeanProxy(locatorMBeanName, LocatorMXBean.class);
} catch (ManagementException mgz) {
if (bean == null) {
InternalDistributedSystem.getLogger()
.fine("Undesired Result :Locator MBean Proxy Should Not be Empty for : "
+ locatorMBeanName.getCanonicalName());
}
}
return bean;
}
public static void printBeanDetails(ObjectName objName) throws Exception {
MBeanAttributeInfo[] attributeInfos;
MBeanInfo info = null;
try {
info = mbeanServer.getMBeanInfo(objName);
} catch (IntrospectionException e1) {
fail("Could not obtain Sender Proxy Details");
} catch (InstanceNotFoundException e1) {
fail("Could not obtain Sender Proxy Details");
} catch (ReflectionException e1) {
fail("Could not obtain Sender Proxy Details");
}
attributeInfos = info.getAttributes();
for (MBeanAttributeInfo attributeInfo : attributeInfos) {
Object propertyValue = null;
String propertyName = null;
try {
propertyName = attributeInfo.getName();
propertyValue = mbeanServer.getAttribute(objName, propertyName);
LogWriterUtils.getLogWriter().info(
"<ExpectedString> " + propertyName + " = " + propertyValue + "</ExpectedString> ");
} catch (Exception e) {
}
}
}
}