AMBARI-3669. Remove HBase port scanner and ha_status (ncole)
Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/c6c4e348 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/c6c4e348 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/c6c4e348 Branch: refs/heads/trunk Commit: c6c4e3483d943f1865a5110d91cad9e27f361ba0 Parents: 6b9ca4b Author: Nate Cole <[email protected]> Authored: Fri Nov 1 16:33:26 2013 -0400 Committer: Nate Cole <[email protected]> Committed: Fri Nov 1 17:13:46 2013 -0400 ---------------------------------------------------------------------- .../ambari/server/agent/HeartBeatHandler.java | 47 +- .../ambari/server/agent/HeartbeatMonitor.java | 13 +- .../server/controller/ControllerModule.java | 51 +- .../ServiceComponentHostResponse.java | 22 - .../AbstractControllerResourceProvider.java | 1 - .../internal/HostComponentResourceProvider.java | 8 - .../controller/jmx/JMXPropertyProvider.java | 35 +- .../server/state/ServiceComponentHost.java | 2 - .../svccomphost/HBaseMasterPortScanner.java | 337 -------- .../svccomphost/ServiceComponentHostImpl.java | 13 - .../src/main/resources/properties.json | 1 - .../HostComponentResourceProviderTest.java | 55 -- .../controller/jmx/JMXPropertyProviderTest.java | 39 +- .../controller/jmx/TestStreamProvider.java | 1 + .../svccomphost/HBaseMasterPortScannerTest.java | 244 ------ .../test/resources/hbase_hbasemaster_jmx_2.json | 840 +++++++++++++++++++ 16 files changed, 960 insertions(+), 749 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java index 5b328b5..69a86be 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java @@ -17,16 +17,31 @@ */ package org.apache.ambari.server.agent; -import com.google.gson.Gson; -import com.google.inject.Inject; -import com.google.inject.Injector; -import com.google.inject.Singleton; -import org.apache.ambari.server.*; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.HostNotFoundException; +import org.apache.ambari.server.RoleCommand; +import org.apache.ambari.server.ServiceComponentHostNotFoundException; +import org.apache.ambari.server.ServiceComponentNotFoundException; +import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.metadata.ActionMetadata; -import org.apache.ambari.server.state.*; +import org.apache.ambari.server.state.AgentVersion; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Host; +import org.apache.ambari.server.state.HostState; +import org.apache.ambari.server.state.Service; +import org.apache.ambari.server.state.ServiceComponent; +import org.apache.ambari.server.state.ServiceComponentHost; +import org.apache.ambari.server.state.StackId; +import org.apache.ambari.server.state.State; import org.apache.ambari.server.state.fsm.InvalidStateTransitionException; import org.apache.ambari.server.state.host.HostHealthyHeartbeatEvent; import org.apache.ambari.server.state.host.HostRegistrationRequestEvent; @@ -42,12 +57,10 @@ import org.apache.ambari.server.utils.VersionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import org.apache.ambari.server.state.svccomphost.HBaseMasterPortScanner; +import com.google.gson.Gson; +import com.google.inject.Inject; +import com.google.inject.Injector; +import com.google.inject.Singleton; /** @@ -68,8 +81,6 @@ public class HeartBeatHandler { AmbariMetaInfo ambariMetaInfo; @Inject ActionMetadata actionMetadata; - @Inject - HBaseMasterPortScanner scanner; private HeartbeatMonitor heartbeatMonitor; @Inject private Gson gson; @@ -83,7 +94,6 @@ public class HeartBeatHandler { this.actionQueue = aq; this.actionManager = am; this.heartbeatMonitor = new HeartbeatMonitor(fsm, aq, am, 60000); - this.heartbeatMonitor.setScanner(scanner); injector.injectMembers(this); } @@ -157,7 +167,6 @@ public class HeartBeatHandler { hostObject.handleEvent(new HostUnhealthyHeartbeatEvent(hostname, now, null)); } - if (hostState != hostObject.getState()) scanner.updateHBaseMaster(hostObject); } catch (InvalidStateTransitionException ex) { LOG.warn("Asking agent to reregister due to " + ex.getMessage(), ex); hostObject.setState(HostState.INIT); @@ -231,9 +240,6 @@ public class HeartBeatHandler { scHost.handleEvent(new ServiceComponentHostOpInProgressEvent(schName, hostname, now)); } - if (state != scHost.getState() && schName.equals(Role.HBASE_MASTER.toString())) { - scanner.updateHBaseMaster(cl); - } } catch (ServiceComponentNotFoundException scnex) { LOG.warn("Service component not found ", scnex); } catch (InvalidStateTransitionException ex) { @@ -275,9 +281,6 @@ public class HeartBeatHandler { + " of cluster " + status.getClusterName() + " has changed from " + prevState + " to " + liveState + " at host " + hostname); - if (scHost.getServiceComponentName().equals(Role.HBASE_MASTER.toString())) { - scanner.updateHBaseMaster(scHost); - } } } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java index 6161c63..bb348c6 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java @@ -18,10 +18,10 @@ package org.apache.ambari.server.agent; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; -import java.util.HashMap; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.actionmanager.ActionManager; @@ -37,7 +37,6 @@ import org.apache.ambari.server.state.ServiceComponentHost; import org.apache.ambari.server.state.State; import org.apache.ambari.server.state.fsm.InvalidStateTransitionException; import org.apache.ambari.server.state.host.HostHeartbeatLostEvent; -import org.apache.ambari.server.state.svccomphost.HBaseMasterPortScanner; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -52,11 +51,6 @@ public class HeartbeatMonitor implements Runnable { private final int threadWakeupInterval; //1 minute private volatile boolean shouldRun = true; private Thread monitorThread = null; - private HBaseMasterPortScanner scanner; - - public void setScanner(HBaseMasterPortScanner scanner) { - this.scanner = scanner; - } public HeartbeatMonitor(Clusters fsm, ActionQueue aq, ActionManager am, int threadWakeupInterval) { @@ -141,11 +135,6 @@ public class HeartbeatMonitor implements Runnable { } } - // hbase - if (hostState != hostObj.getState() && scanner != null) { - scanner.updateHBaseMaster(hostObj); - } - //Purge action queue actionQueue.dequeueAll(host); //notify action manager http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java index f35e277..1b2ebda 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java @@ -18,36 +18,52 @@ package org.apache.ambari.server.controller; -import org.apache.ambari.server.state.configgroup.ConfigGroup; -import org.apache.ambari.server.state.configgroup.ConfigGroupFactory; -import org.apache.ambari.server.state.configgroup.ConfigGroupImpl; -import org.apache.ambari.server.state.svccomphost.HBaseMasterPortScanner; -import com.google.gson.Gson; -import com.google.inject.Scopes; -import com.google.inject.assistedinject.FactoryModuleBuilder; -import com.google.inject.persist.jpa.JpaPersistModule; -import org.apache.ambari.server.actionmanager.*; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; + +import org.apache.ambari.server.actionmanager.ActionDBAccessor; +import org.apache.ambari.server.actionmanager.ActionDBAccessorImpl; +import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper; +import org.apache.ambari.server.actionmanager.HostRoleCommandFactory; +import org.apache.ambari.server.actionmanager.HostRoleCommandFactoryImpl; +import org.apache.ambari.server.actionmanager.StageFactory; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.orm.PersistenceType; import org.apache.ambari.server.serveraction.ServerActionManager; import org.apache.ambari.server.serveraction.ServerActionManagerImpl; -import org.apache.ambari.server.state.*; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Config; +import org.apache.ambari.server.state.ConfigFactory; +import org.apache.ambari.server.state.ConfigImpl; +import org.apache.ambari.server.state.Host; +import org.apache.ambari.server.state.Service; +import org.apache.ambari.server.state.ServiceComponent; +import org.apache.ambari.server.state.ServiceComponentFactory; +import org.apache.ambari.server.state.ServiceComponentHost; +import org.apache.ambari.server.state.ServiceComponentHostFactory; +import org.apache.ambari.server.state.ServiceComponentImpl; +import org.apache.ambari.server.state.ServiceFactory; +import org.apache.ambari.server.state.ServiceImpl; import org.apache.ambari.server.state.cluster.ClusterFactory; import org.apache.ambari.server.state.cluster.ClusterImpl; import org.apache.ambari.server.state.cluster.ClustersImpl; +import org.apache.ambari.server.state.configgroup.ConfigGroup; +import org.apache.ambari.server.state.configgroup.ConfigGroupFactory; +import org.apache.ambari.server.state.configgroup.ConfigGroupImpl; import org.apache.ambari.server.state.host.HostFactory; import org.apache.ambari.server.state.host.HostImpl; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.name.Names; import org.apache.ambari.server.state.svccomphost.ServiceComponentHostImpl; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.StandardPasswordEncoder; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Properties; +import com.google.gson.Gson; +import com.google.inject.AbstractModule; +import com.google.inject.Scopes; +import com.google.inject.assistedinject.FactoryModuleBuilder; +import com.google.inject.name.Names; +import com.google.inject.persist.jpa.JpaPersistModule; /** * Used for injection purposes. @@ -91,7 +107,6 @@ public class ControllerModule extends AbstractModule { bind(AmbariManagementController.class) .to(AmbariManagementControllerImpl.class); bind(AbstractRootServiceResponseFactory.class).to(RootServiceResponseFactory.class); - bind(HBaseMasterPortScanner.class).in(Singleton.class); bind(ServerActionManager.class).to(ServerActionManagerImpl.class); requestStaticInjection(ExecutionCommandWrapper.class); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java index eba7da8..e773871 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java @@ -48,8 +48,6 @@ public class ServiceComponentHostResponse { private String desiredState; - private String ha_status = "NA"; - private boolean staleConfig = false; @@ -198,26 +196,6 @@ public class ServiceComponentHostResponse { this.clusterName = clusterName; } - /** - * - * @return ha_status status of HBaseMaster - */ - public String getHa_status() { - return ha_status; - } - - - /** - * - * @param ha_status the state of HBaseMaster - */ - public void setHa_status(String ha_status) { - this.ha_status = ha_status; - } - - - - @Override public boolean equals(Object o) { if (this == o) return true; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java index 464040e..dc2575e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java @@ -20,7 +20,6 @@ package org.apache.ambari.server.controller.internal; import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.predicate.ArrayPredicate; -import org.apache.ambari.server.controller.predicate.ComparisonPredicate; import org.apache.ambari.server.controller.predicate.EqualsPredicate; import org.apache.ambari.server.controller.spi.Predicate; import org.apache.ambari.server.controller.spi.Resource; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java index 006e59b..eb419f3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java @@ -58,8 +58,6 @@ class HostComponentResourceProvider extends AbstractControllerResourceProvider { = PropertyHelper.getPropertyId("HostRoles", "configs"); protected static final String HOST_COMPONENT_DESIRED_CONFIGS_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "desired_configs"); - protected static final String HOST_COMPONENT_HIGH_AVAILABILITY_PROPERTY_ID - = PropertyHelper.getPropertyId("HostRoles", "ha_status"); protected static final String HOST_COMPONENT_STACK_ID_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "stack_id"); protected static final String HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID @@ -166,11 +164,6 @@ class HostComponentResourceProvider extends AbstractControllerResourceProvider { for (ServiceComponentHostResponse response : responses) { Resource resource = new ResourceImpl(Resource.Type.HostComponent); - if((response.getComponentName()).equals(Role.HBASE_MASTER.toString())) { - requestedIds.add(HOST_COMPONENT_HIGH_AVAILABILITY_PROPERTY_ID); - }else{ - requestedIds.remove(HOST_COMPONENT_HIGH_AVAILABILITY_PROPERTY_ID); - } setResourceProperty(resource, HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds); setResourceProperty(resource, HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID, response.getServiceName(), requestedIds); setResourceProperty(resource, HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, response.getComponentName(), requestedIds); @@ -181,7 +174,6 @@ class HostComponentResourceProvider extends AbstractControllerResourceProvider { response.getStackVersion(), requestedIds); setResourceProperty(resource, HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID, response.getDesiredStackVersion(), requestedIds); - setResourceProperty(resource, HOST_COMPONENT_HIGH_AVAILABILITY_PROPERTY_ID, response.getHa_status(), requestedIds); setResourceProperty(resource, HOST_COMPONENT_CONFIGS_PROPERTY_ID, response.getConfigs(), requestedIds); setResourceProperty(resource, HOST_COMPONENT_DESIRED_CONFIGS_PROPERTY_ID, http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java index baa39bd..1f9bbff 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java @@ -344,24 +344,33 @@ public class JMXPropertyProvider extends AbstractPropertyProvider { String property = propertyInfo.getPropertyId(); String category = ""; + List<String> keyList = new LinkedList<String>(); - int keyStartIndex = property.indexOf('[', 0); - int firstKeyIndex = keyStartIndex > -1 ? keyStartIndex : property.length(); - while (keyStartIndex > -1) { + + int keyStartIndex = property.indexOf('['); + if (-1 != keyStartIndex) { int keyEndIndex = property.indexOf(']', keyStartIndex); - if (keyEndIndex > -1 & keyEndIndex > keyStartIndex) { - keyList.add(property.substring(keyStartIndex + 1, keyEndIndex)); - keyStartIndex = property.indexOf('[', keyEndIndex); - } - else { - keyStartIndex = -1; + if (-1 != keyEndIndex && keyEndIndex > keyStartIndex) { + keyList.add(property.substring(keyStartIndex+1, keyEndIndex)); } } + + if (!containsArguments(propertyId)) { + int dotIndex = property.indexOf('.', property.indexOf('=')); + if (-1 != dotIndex) { + category = property.substring(0, dotIndex); + property = (-1 == keyStartIndex) ? + property.substring(dotIndex+1) : + property.substring(dotIndex+1, keyStartIndex); + } + } else { + int firstKeyIndex = keyStartIndex > -1 ? keyStartIndex : property.length(); + int dotIndex = property.lastIndexOf('.', firstKeyIndex); - int dotIndex = property.lastIndexOf('.', firstKeyIndex - 1); - if (dotIndex != -1){ - category = property.substring(0, dotIndex); - property = property.substring(dotIndex + 1, firstKeyIndex); + if (dotIndex != -1) { + category = property.substring(0, dotIndex); + property = property.substring(dotIndex + 1, firstKeyIndex); + } } if (containsArguments(propertyId)) { http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java index eb4acf9..627d24d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java @@ -86,8 +86,6 @@ public interface ServiceComponentHost { public void setState(State state); - public void setHAState(String status); - public Map<String, Config> getConfigs() throws AmbariException; public StackId getStackVersion(); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/HBaseMasterPortScanner.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/HBaseMasterPortScanner.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/HBaseMasterPortScanner.java deleted file mode 100644 index cdcd800..0000000 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/HBaseMasterPortScanner.java +++ /dev/null @@ -1,337 +0,0 @@ -/** - * 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.ambari.server.state.svccomphost; - -import com.google.inject.Inject; -import com.google.inject.Singleton; -import java.net.ConnectException; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Timer; -import java.util.TimerTask; -import org.apache.ambari.server.AmbariException; -import org.apache.ambari.server.Role; -import org.apache.ambari.server.state.Cluster; -import org.apache.ambari.server.state.Clusters; -import org.apache.ambari.server.state.Host; -import org.apache.ambari.server.state.ServiceComponentHost; -import org.apache.ambari.server.state.State; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * This class encapsulates the HBaseMaster scanner thread. HBaseMaster scanner - * start scan if Host, ServiceComponentHost or Cluster change own state. - */ -@Singleton -public class HBaseMasterPortScanner implements Runnable { - - private static Log LOG = LogFactory.getLog(HBaseMasterPortScanner.class); - private Thread schedulerThread = null; - private final Object wakeupSyncObject = new Object(); - private int defaultScanTimeoutMsc = 300; - private int scanTimeoutMsc = defaultScanTimeoutMsc; - private int testScanTimeoutMsc; - private int rescanTimeoutMsc = 60000; - private final int port = 60010; - private int maxAttempts = 3; - private int attempts = 0; - protected int countAttempts = 0; - private Map<ServiceComponentHost,Boolean> componentHostMap; - private Cluster currentCluster; - private Timer scheduleTimer; - private RescanSchedulerTask rescanSchedulerTask; - @Inject - protected Clusters clusters; - - /** - * - * @param defaultScanTimeoutMsc set default timeout for port scan - */ - public void setDefaultScanTimeoutMsc(int defaultScanTimeoutMsc) { - this.defaultScanTimeoutMsc = defaultScanTimeoutMsc; - this.scanTimeoutMsc = this.defaultScanTimeoutMsc; - } - - - /** - * - * @param maxAttempts set maximum attempts to scan - */ - public void setMaxAttempts(int maxAttempts) { - this.maxAttempts = maxAttempts; - } - - /** - * - * @param rescanTimeoutMsc timeout for latter rescan - */ - public void setRescanTimeoutMsc(int rescanTimeoutMsc) { - this.rescanTimeoutMsc = rescanTimeoutMsc; - } - - /** - * - * @return tested value (need unitests) - */ - public int getTestScanTimeoutMsc() { - return testScanTimeoutMsc; - } - - - /** - * - * @return task for latter scan - */ - public RescanSchedulerTask getRescanSchedulerTask() { - return rescanSchedulerTask; - } - - - /** - * true if scanner should run ASAP. We need this flag to avoid sleep in - * situations, when we receive updateHBaseMaster request during running a - * scanner iteration. - */ - private boolean activeAwakeRequest = false; - - public HBaseMasterPortScanner(Timer timer) { - scheduleTimer = timer; - } - - public HBaseMasterPortScanner() { - scheduleTimer = new Timer(); - this.start(); - } - - private void start() { - schedulerThread = new Thread(this, this.getClass().getSimpleName()); - schedulerThread.start(); - if (LOG.isDebugEnabled()) { - LOG.debug("HBaseMasterPortScanner started"); - } - } - - - /** - * Should be called from another thread when we want HBase Master scanner to - * make a run ASAP (for example, to process desired configs of SCHs). The - * method is guaranteed to return quickly. - */ - public void updateHBaseMaster(Cluster cluster) { - synchronized (wakeupSyncObject) { - collectServiceComponentHostsForCluster(cluster); - if(componentHostMap!=null && !componentHostMap.isEmpty()){ - LOG.debug("HBaseMasterPortScanner start scanning for cluster " + cluster.getClusterName()); - activeAwakeRequest = true; - wakeupSyncObject.notify(); - } else LOG.debug("No for scan (with HBaseMaster component)"); - } - } - - public void updateHBaseMaster(Host host) { - synchronized (wakeupSyncObject) { - Set<Cluster> clustersSet; - try { - clustersSet = clusters.getClustersForHost(host.getHostName()); - } catch (AmbariException ex) { - return; - } - Iterator<Cluster> iter = clustersSet.iterator(); - while (iter.hasNext()) { - collectServiceComponentHostsForCluster(iter.next()); - } - if(componentHostMap!=null && !componentHostMap.isEmpty()){ - LOG.debug("HBaseMasterPortScanner start scanning for Host " + host.getHostName()); - activeAwakeRequest = true; - wakeupSyncObject.notify(); - } else LOG.debug("No for scan (with HBaseMaster component)"); - } - } - - public void updateHBaseMaster(ServiceComponentHost host) { - synchronized (wakeupSyncObject) { - try { - collectServiceComponentHostsForCluster(clusters.getCluster(host.getClusterName())); - } catch (AmbariException ex) { - LOG.warn(ex); - return; - } - if(componentHostMap!=null && !componentHostMap.isEmpty()){ - LOG.debug("HBaseMasterPortScanner start scanning for ServiceComponentHost " + host.getServiceComponentName()); - activeAwakeRequest = true; - wakeupSyncObject.notify(); - } else LOG.debug("No for scan (with HBaseMaster component)"); - } - } - - private void collectServiceComponentHostsForCluster(Cluster cluster) { - currentCluster = cluster; - componentHostMap = new HashMap<ServiceComponentHost, Boolean>(); - Map<String, Host> hosts = null; - try { - hosts = clusters.getHostsForCluster(currentCluster.getClusterName()); - } catch (AmbariException ex) { - LOG.warn(ex); - return; - } - for (Map.Entry<String, Host> entry : hosts.entrySet()) { - if (entry.getValue() != null) { - List<ServiceComponentHost> componentHosts = currentCluster.getServiceComponentHosts(entry.getValue().getHostName()); - for (ServiceComponentHost componentHost : componentHosts) { - if (componentHost != null && componentHost.getServiceComponentName() != null && componentHost.getServiceComponentName().equals(Role.HBASE_MASTER.toString())) { - componentHostMap.put(componentHost, false); - } - } - } - } - - } - - @Override - public void run() { - while (true) { - execute(); - if (activeAwakeRequest) { - activeAwakeRequest = false; - continue; - } - try { - synchronized (wakeupSyncObject) { - wakeupSyncObject.wait(); - } - } catch (InterruptedException ex) { - activeAwakeRequest = true; - } - } - } - - protected void execute() { - if (rescanSchedulerTask != null) { - rescanSchedulerTask.cancel(); - scheduleTimer.purge(); - } - activeAwakeRequest = false; - if (componentHostMap != null) { - for (Map.Entry<ServiceComponentHost, Boolean> entry : componentHostMap.entrySet()) { - entry.setValue(scan(entry.getKey().getHostName())); - if (activeAwakeRequest) { - scanTimeoutMsc = defaultScanTimeoutMsc; - attempts = 0; - break; - } - } - attempts++; - countAttempts = attempts; - LOG.info("Attempt to scan of HBASE_MASTER port : " + attempts); - if (validateScanResults(componentHostMap)) { - //If results valid set it to ServiceComponentHost - setScanResults(componentHostMap); - scanTimeoutMsc = defaultScanTimeoutMsc; - attempts = 0; - } else { - if (attempts <= maxAttempts) { - //Increase timeout - scanTimeoutMsc += defaultScanTimeoutMsc; - testScanTimeoutMsc = scanTimeoutMsc; - LOG.info("Increase timeout for scan HBASE_MASTER port to : " + scanTimeoutMsc); - activeAwakeRequest = true; - } else { - LOG.info("No valid data about HBASE_MASTER, ports will rescanned after " + rescanTimeoutMsc / 1000 + " seconds"); - scanTimeoutMsc = defaultScanTimeoutMsc; - attempts = 0; - //Create task for latter scan - rescanSchedulerTask = new RescanSchedulerTask(currentCluster); - scheduleTimer.schedule(rescanSchedulerTask, rescanTimeoutMsc); - } - } - - } - - } - - private void setScanResults(Map<ServiceComponentHost, Boolean> scanResuls){ - for (Map.Entry<ServiceComponentHost, Boolean> entry : scanResuls.entrySet()) { - entry.getKey().setHAState((entry.getValue()) ? "active" : "passive"); - } - LOG.info("Set result of HBASE_MASTER scan"); - } - - private boolean validateScanResults(Map<ServiceComponentHost, Boolean> scanResuls) { - boolean res = false; - int activeMasters = 0; - int startedComponents = 0; - for (Map.Entry<ServiceComponentHost, Boolean> entry : scanResuls.entrySet()) { - activeMasters += (entry.getValue() && entry.getKey().getState() == State.STARTED) ? 1 : 0; - startedComponents += (entry.getKey().getState() == State.STARTED) ? 1 : 0; - } - if (startedComponents > 0) { - if (activeMasters == 0 || activeMasters > 1) { - res = false; - } else { - res = true; - } - } else { - if (activeMasters > 0) { - res = false; - } else { - res = true; - } - } - LOG.info("Results of HBASE_MASTER scan are " + ((res) ? "valid" : "invalid")); - return res; - } - - protected boolean scan(String hostname) { - try { - Socket socket = new Socket(); - socket.connect(new InetSocketAddress(hostname, port), scanTimeoutMsc); - socket.close(); - LOG.info(hostname + ":" + port + " HBASE_MASTER active"); - return true; - } catch (ConnectException e) { - LOG.info(hostname + ":" + port + " HBASE_MASTER passive"); - return false; - } catch (Exception ex) { - LOG.info(hostname + ":" + port + " HBASE_MASTER passive"); - LOG.error(ex); - return false; - } - } - - private class RescanSchedulerTask extends TimerTask { - - private Cluster cl; - - public RescanSchedulerTask(Cluster cl) { - this.cl = cl; - } - - @Override - public void run() { - LOG.info("Start scheduled rescan of HBASE_MASTER ports for cluster "+ cl.getClusterName()); - updateHBaseMaster(cl); - } - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java index 2c79f96..71ae98f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java @@ -103,7 +103,6 @@ public class ServiceComponentHostImpl implements ServiceComponentHost { private long lastOpStartTime; private long lastOpEndTime; private long lastOpLastUpdateTime; - private String ha_status = "passive"; private Map<String, DesiredConfig> actualConfigs = new HashMap<String, DesiredConfig>(); private static final StateMachineFactory @@ -487,17 +486,6 @@ public class ServiceComponentHostImpl implements ServiceComponentHost { private final StateMachine<State, ServiceComponentHostEventType, ServiceComponentHostEvent> stateMachine; - @Override - public void setHAState(String status) { - try { - writeLock.lock(); - ha_status = status; - } - finally { - writeLock.unlock(); - } - } - static class ServiceComponentHostOpCompletedTransition implements SingleArcTransition<ServiceComponentHostImpl, ServiceComponentHostEvent> { @@ -1315,7 +1303,6 @@ public class ServiceComponentHostImpl implements ServiceComponentHost { getDesiredState().toString(), getDesiredStackVersion().getStackId()); - r.setHa_status(ha_status); r.setActualConfigs(actualConfigs); try { http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/main/resources/properties.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json index fd02437..fa04735 100644 --- a/ambari-server/src/main/resources/properties.json +++ b/ambari-server/src/main/resources/properties.json @@ -67,7 +67,6 @@ "HostRoles/actual_configs", "params/run_smoke_test", "HostRoles/nagios_alerts", - "HostRoles/ha_status", "HostRoles/stale_configs", "_" ], http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java index 95c412c..b84f96e 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java @@ -41,7 +41,6 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import org.apache.ambari.server.Role; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; @@ -176,60 +175,6 @@ public class HostComponentResourceProviderTest { verify(managementController); } - - @Test - public void testGetResources_return_ha_status_property() throws Exception { - Resource.Type type = Resource.Type.HostComponent; - AmbariManagementController managementController = createMock(AmbariManagementController.class); - Set<ServiceComponentHostResponse> allResponse = new HashSet<ServiceComponentHostResponse>(); - for (Role role : Role.values()) { - allResponse.add(new ServiceComponentHostResponse( - "Cluster100", "Service100", role.toString(), "Host100", null, null, "", "", "", "")); - } - - - - // set expectations - expect(managementController.getHostComponents( - AbstractResourceProviderTest.Matcher.getHostComponentRequestSet( - "Cluster100", null, null, null, null, null))).andReturn(allResponse).once(); - - // replay - replay(managementController); - - ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); - - Set<String> propertyIds = new HashSet<String>(); - - propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID); - propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID); - - Predicate predicate = new PredicateBuilder().property( - HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").toPredicate(); - Request request = PropertyHelper.getReadRequest(propertyIds); - Set<Resource> resources = provider.getResources(request, predicate); - - for (Resource resource : resources) { - Object ha_status = resource.getPropertyValue( - HostComponentResourceProvider.HOST_COMPONENT_HIGH_AVAILABILITY_PROPERTY_ID); - //ha_status must have only HBASE_MASTER component - if(ha_status != null) - { - Assert.assertEquals(Role.HBASE_MASTER.toString(), resource.getPropertyValue( - HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).toString()); - }else{ - Assert.assertNotSame(Role.HBASE_MASTER.toString(), resource.getPropertyValue( - HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).toString()); - } - } - - verify(managementController); - } - @Test public void testUpdateResources() throws Exception { Resource.Type type = Resource.Type.HostComponent; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java index 38684ab..bd417df 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java @@ -808,6 +808,42 @@ public class JMXPropertyProviderTest { Assert.assertEquals(preSize, resource.getPropertiesMap().size()); } + + @Test + public void testPopulateResources_HBaseMaster2() throws Exception { + TestStreamProvider streamProvider = new TestStreamProvider(); + TestJMXHostProvider hostProvider = new TestJMXHostProvider(false); + + JMXPropertyProvider propertyProvider = new JMXPropertyProvider( + PropertyHelper.getJMXPropertyIds(Resource.Type.HostComponent, PropertyHelper.MetricsVersion.HDP2), + streamProvider, + hostProvider, + PropertyHelper.getPropertyId("HostRoles", "cluster_name"), + PropertyHelper.getPropertyId("HostRoles", "host_name"), + PropertyHelper.getPropertyId("HostRoles", "component_name"), + PropertyHelper.getPropertyId("HostRoles", "state"), + Collections.singleton("STARTED")); + + Resource resource = new ResourceImpl(Resource.Type.HostComponent); + + resource.setProperty("HostRoles/cluster_name", "HBM2"); + resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal"); + resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "HBASE_MASTER"); + resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); + + + // request with an empty set should get all supported properties + Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); + + Set<Resource> res = propertyProvider.populateResources(Collections.singleton(resource), request, null); + Assert.assertEquals(1, res.size()); + + Map<String, Map<String, Object>> map = res.iterator().next().getPropertiesMap(); + + Assert.assertTrue(map.containsKey("metrics/hbase/master")); + // uses 'tag.isActiveMaster' (name with a dot) + Assert.assertTrue(map.get("metrics/hbase/master").containsKey("IsActiveMaster")); + } private static class TestJMXHostProvider implements JMXHostProvider { private final boolean unknownPort; @@ -828,6 +864,7 @@ public class JMXPropertyProviderTest { if (unknownPort) { return null; } + if (componentName.equals("NAMENODE")) return "50070"; else if (componentName.equals("DATANODE")) @@ -837,7 +874,7 @@ public class JMXPropertyProviderTest { else if (componentName.equals("TASKTRACKER")) return "50060"; else if (componentName.equals("HBASE_MASTER")) - return "60010"; + return null == clusterName ? "60010" : "60011"; else if (componentName.equals("JOURNALNODE")) return "8480"; else http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestStreamProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestStreamProvider.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestStreamProvider.java index 4f0a6d3..8d7832e 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestStreamProvider.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestStreamProvider.java @@ -35,6 +35,7 @@ public class TestStreamProvider implements StreamProvider { FILE_MAPPING.put("50030", "mapreduce_jobtracker_jmx.json"); FILE_MAPPING.put("50060", "mapreduce_tasktracker_jmx.json"); FILE_MAPPING.put("60010", "hbase_hbasemaster_jmx.json"); + FILE_MAPPING.put("60011", "hbase_hbasemaster_jmx_2.json"); FILE_MAPPING.put("8088", "resourcemanager_jmx.json"); FILE_MAPPING.put("8480", "hdfs_journalnode_jmx.json"); } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c6c4e348/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/HBaseMasterPortScannerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/HBaseMasterPortScannerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/HBaseMasterPortScannerTest.java deleted file mode 100644 index a88b037..0000000 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/HBaseMasterPortScannerTest.java +++ /dev/null @@ -1,244 +0,0 @@ -/** - * 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.ambari.server.state.svccomphost; - - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import com.google.inject.Guice; -import com.google.inject.Injector; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.Timer; -import org.apache.ambari.server.AmbariException; -import static org.apache.ambari.server.agent.DummyHeartbeatConstants.DATANODE; -import static org.apache.ambari.server.agent.DummyHeartbeatConstants.DummyCluster; -import static org.apache.ambari.server.agent.DummyHeartbeatConstants.DummyOsType; -import static org.apache.ambari.server.agent.DummyHeartbeatConstants.HDFS; -import static org.apache.ambari.server.agent.DummyHeartbeatConstants.HBASE_MASTER; -import static org.apache.ambari.server.agent.DummyHeartbeatConstants.NAMENODE; -import org.apache.ambari.server.api.services.AmbariMetaInfo; -import org.apache.ambari.server.orm.GuiceJpaInitializer; -import org.apache.ambari.server.orm.InMemoryDefaultTestModule; -import org.apache.ambari.server.state.Cluster; -import org.apache.ambari.server.state.Clusters; -import org.apache.ambari.server.state.Host; -import org.apache.ambari.server.state.Service; -import org.apache.ambari.server.state.ServiceComponentHost; -import org.apache.ambari.server.state.ServiceFactory; -import org.apache.ambari.server.state.StackId; -import org.apache.ambari.server.state.State; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import static org.junit.Assert.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author root - */ -public class HBaseMasterPortScannerTest { - - private static final Logger log = LoggerFactory.getLogger(HBaseMasterPortScannerTest.class); - private static List<String> hostnames; - private static Injector injector; - private static HBaseMasterPortScannerMock scaner; - private static ServiceFactory serviceFactory; - private static AmbariMetaInfo metaInfo; - private static Clusters clusters; - private static Cluster cluster; - private static Host host; - private static ServiceComponentHost serviceComponentHost; - private static int scanTimeOut = 100; - private static int reScanTimeOut = 1000; - private static int maxAttempts = 2; - private static Timer timerMock = mock(Timer.class); - - public HBaseMasterPortScannerTest() { - } - - @BeforeClass - public static void setUpClass() throws Exception { - injector = Guice.createInjector(new InMemoryDefaultTestModule()); - injector.getInstance(GuiceJpaInitializer.class); - hostnames = new ArrayList<String>(); - hostnames.add("127.0.0.1"); - hostnames.add("host1"); - hostnames.add("host2"); - hostnames.add("host3"); - clusters = injector.getInstance(Clusters.class); - scaner = new HBaseMasterPortScannerMock(clusters); - metaInfo = injector.getInstance(AmbariMetaInfo.class); - serviceFactory = injector.getInstance(ServiceFactory.class); - metaInfo.init(); - clusters.addCluster(DummyCluster); - cluster = clusters.getCluster(DummyCluster); - cluster.setDesiredStackVersion(new StackId("HDP-0.2")); - Set<String> hostNamesSet = new HashSet<String>(); - for (String hostname : hostnames) { - clusters.addHost(hostname); - clusters.getHost(hostname).persist(); - Host hostObject = clusters.getHost(hostname); - hostObject.setIPv4("ipv4"); - hostObject.setIPv6("ipv6"); - hostObject.setOsType(DummyOsType); - hostNamesSet.add(hostname); - if (hostname.equals("127.0.0.1")) { - host = hostObject; - } - } - clusters.mapHostsToCluster(hostNamesSet, DummyCluster); - Service service = cluster.addService(HDFS); - service.persist(); - service.addServiceComponent(NAMENODE).persist(); - service.getServiceComponent(NAMENODE).addServiceComponentHost("127.0.0.1").persist(); - service.addServiceComponent(DATANODE).persist(); - service.getServiceComponent(DATANODE).addServiceComponentHost("127.0.0.1").persist(); - service = serviceFactory.createNew(cluster, "HBASE"); - cluster.addService(service); - service.persist(); - service = cluster.getService("HBASE"); - service.addServiceComponent(HBASE_MASTER).persist(); - service.persist(); - for (String hostname : hostnames) { - service.getServiceComponent(HBASE_MASTER).addServiceComponentHost(hostname).persist(); - if (hostname.equals("127.0.0.1")) { - serviceComponentHost = service.getServiceComponent(HBASE_MASTER).getServiceComponentHost(hostname); - serviceComponentHost.setState(State.STARTED); - } - } - when(timerMock.purge()).thenReturn(0); - } - - - @Before - public void setUp() throws AmbariException, Exception { - serviceComponentHost.setHAState("passive"); - } - - /** - * Test of updateHBaseMaster method, of class HBaseMasterPortScaner. - */ - @Test - public void testUpdateHBaseMaster_Cluster() throws InterruptedException { - scaner.setDefaultScanTimeoutMsc(scanTimeOut); - scaner.setMaxAttempts(maxAttempts); - scaner.setRescanTimeoutMsc(reScanTimeOut); - log.debug("updateHBaseMaster - pass Cluster"); - scaner.updateHBaseMaster(cluster); - scaner.execute(); - assertEquals("active", serviceComponentHost.convertToResponse().getHa_status()); - } - - /** - * Test of updateHBaseMaster method, of class HBaseMasterPortScaner. - */ - @Test - public void testUpdateHBaseMaster_Host() throws InterruptedException { - scaner.setDefaultScanTimeoutMsc(scanTimeOut); - scaner.setMaxAttempts(maxAttempts); - scaner.setRescanTimeoutMsc(reScanTimeOut); - log.debug("updateHBaseMaster - pass Host"); - scaner.updateHBaseMaster(host); - scaner.execute(); - assertEquals("active", serviceComponentHost.convertToResponse().getHa_status()); - } - - /** - * Test of updateHBaseMaster method, of class HBaseMasterPortScaner. - */ - @Test - public void testUpdateHBaseMaster_ServiceComponentHost() throws InterruptedException { - scaner.setDefaultScanTimeoutMsc(scanTimeOut); - scaner.setMaxAttempts(maxAttempts); - scaner.setRescanTimeoutMsc(reScanTimeOut); - log.debug("updateHBaseMaster - pass ServiceComponentHost"); - scaner.updateHBaseMaster(serviceComponentHost); - scaner.execute(); - assertEquals("active", serviceComponentHost.convertToResponse().getHa_status()); - } - - - /** - * Test case of if port is closed or not enough scan timeout. - */ - @Test - public void testOfBrokenMasterScenario() throws InterruptedException { - scaner.setLiveHBaseHost(""); - scaner.setDefaultScanTimeoutMsc(scanTimeOut); - scaner.setMaxAttempts(maxAttempts); - scaner.setRescanTimeoutMsc(reScanTimeOut); - log.debug("testOfBrokenMasterScenario start"); - scaner.updateHBaseMaster(cluster); - scaner.execute(3); - //Should not be active masters - assertEquals("passive", serviceComponentHost.convertToResponse().getHa_status()); - serviceComponentHost.setHAState("passive"); - //Scanner should try to scan maxAttempts times - assertEquals(maxAttempts, scaner.getCountAttempts()-1); - //Timeout for scan should be scanTimeOut * scaner.getCountAttempts() - assertEquals(scanTimeOut * scaner.getCountAttempts(), scaner.getTestScanTimeoutMsc()); - //Task for latter scan shoul be created - assertNotNull(scaner.getRescanSchedulerTask()); - scaner.setLiveHBaseHost("127.0.0.1"); - scaner.execute(3); - //Test active masters after latter rescan - assertEquals("active", serviceComponentHost.convertToResponse().getHa_status()); - } - - - public static class HBaseMasterPortScannerMock extends HBaseMasterPortScanner { - - private String liveHBaseHost = "127.0.0.1"; - - public void setLiveHBaseHost(String liveHBaseHost) { - this.liveHBaseHost = liveHBaseHost; - } - - @Override - protected boolean scan(String hostname) { - return (hostname.equals(liveHBaseHost)) ? true : false; - } - - public int getCountAttempts() { - return countAttempts; - } - - - public HBaseMasterPortScannerMock(Clusters c) { - super(timerMock); - clusters = c; - } - - @Override - public void execute() { - super.execute(); - } - - public void execute(int count) { - for (int i = 0; i < count; i++) { - execute(); - } - } - - } - -} \ No newline at end of file
