http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-server/src/main/java/org/apache/hadoop/gateway/config/impl/GatewayConfigImpl.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/config/impl/GatewayConfigImpl.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/config/impl/GatewayConfigImpl.java index f6bb9b0..95ae1f2 100644 --- a/gateway-server/src/main/java/org/apache/hadoop/gateway/config/impl/GatewayConfigImpl.java +++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/config/impl/GatewayConfigImpl.java @@ -170,6 +170,11 @@ public class GatewayConfigImpl extends Configuration implements GatewayConfig { public static final String MIME_TYPES_TO_COMPRESS = GATEWAY_CONFIG_FILE_PREFIX + ".gzip.compress.mime.types"; + public static final String CLUSTER_CONFIG_MONITOR_PREFIX = GATEWAY_CONFIG_FILE_PREFIX + ".cluster.config.monitor."; + public static final String CLUSTER_CONFIG_MONITOR_INTERVAL_SUFFIX = ".interval"; + public static final String CLUSTER_CONFIG_MONITOR_ENABLED_SUFFIX = ".enabled"; + + // These config property names are not inline with the convention of using the // GATEWAY_CONFIG_FILE_PREFIX as is done by those above. These are left for // backward compatibility. @@ -942,6 +947,16 @@ public class GatewayConfigImpl extends Configuration implements GatewayConfig { } @Override + public int getClusterMonitorPollingInterval(String type) { + return getInt(CLUSTER_CONFIG_MONITOR_PREFIX + type.toLowerCase() + CLUSTER_CONFIG_MONITOR_INTERVAL_SUFFIX, -1); + } + + @Override + public boolean isClusterMonitorEnabled(String type) { + return getBoolean(CLUSTER_CONFIG_MONITOR_PREFIX + type.toLowerCase() + CLUSTER_CONFIG_MONITOR_ENABLED_SUFFIX, true); + } + + @Override public List<String> getRemoteRegistryConfigurationNames() { List<String> result = new ArrayList<>();
http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-server/src/main/java/org/apache/hadoop/gateway/services/DefaultGatewayServices.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/services/DefaultGatewayServices.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/services/DefaultGatewayServices.java index 9dca344..626cec0 100644 --- a/gateway-server/src/main/java/org/apache/hadoop/gateway/services/DefaultGatewayServices.java +++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/services/DefaultGatewayServices.java @@ -27,6 +27,7 @@ import org.apache.hadoop.gateway.service.config.remote.RemoteConfigurationRegist import org.apache.hadoop.gateway.services.config.client.RemoteConfigurationRegistryClientService; import org.apache.hadoop.gateway.services.registry.impl.DefaultServiceDefinitionRegistry; import org.apache.hadoop.gateway.services.metrics.impl.DefaultMetricsService; +import org.apache.hadoop.gateway.services.topology.impl.DefaultClusterConfigurationMonitorService; import org.apache.hadoop.gateway.services.topology.impl.DefaultTopologyService; import org.apache.hadoop.gateway.services.hostmap.impl.DefaultHostMapperService; import org.apache.hadoop.gateway.services.registry.impl.DefaultServiceRegistryService; @@ -112,6 +113,11 @@ public class DefaultGatewayServices implements GatewayServices { registryClientService.init(config, options); services.put(REMOTE_REGISTRY_CLIENT_SERVICE, registryClientService); + DefaultClusterConfigurationMonitorService ccs = new DefaultClusterConfigurationMonitorService(); + ccs.setAliasService(alias); + ccs.init(config, options); + services.put(CLUSTER_CONFIGURATION_MONITOR_SERVICE, ccs); + DefaultTopologyService tops = new DefaultTopologyService(); tops.setAliasService(alias); tops.init( config, options ); @@ -144,6 +150,8 @@ public class DefaultGatewayServices implements GatewayServices { (RemoteConfigurationRegistryClientService)services.get(REMOTE_REGISTRY_CLIENT_SERVICE); clientService.start(); + (services.get(CLUSTER_CONFIGURATION_MONITOR_SERVICE)).start(); + DefaultTopologyService tops = (DefaultTopologyService)services.get(TOPOLOGY_SERVICE); tops.start(); @@ -156,6 +164,8 @@ public class DefaultGatewayServices implements GatewayServices { ks.stop(); + (services.get(CLUSTER_CONFIGURATION_MONITOR_SERVICE)).stop(); + DefaultAliasService alias = (DefaultAliasService) services.get(ALIAS_SERVICE); alias.stop(); http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultClusterConfigurationMonitorService.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultClusterConfigurationMonitorService.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultClusterConfigurationMonitorService.java new file mode 100644 index 0000000..342ce11 --- /dev/null +++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultClusterConfigurationMonitorService.java @@ -0,0 +1,81 @@ +/** + * 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.hadoop.gateway.services.topology.impl; + +import org.apache.hadoop.gateway.config.GatewayConfig; +import org.apache.hadoop.gateway.services.ServiceLifecycleException; +import org.apache.hadoop.gateway.services.security.AliasService; +import org.apache.hadoop.gateway.topology.ClusterConfigurationMonitorService; +import org.apache.hadoop.gateway.topology.discovery.ClusterConfigurationMonitor; +import org.apache.hadoop.gateway.topology.discovery.ClusterConfigurationMonitorProvider; + +import java.util.HashMap; +import java.util.Map; +import java.util.ServiceLoader; + + +public class DefaultClusterConfigurationMonitorService implements ClusterConfigurationMonitorService { + + private AliasService aliasService = null; + + private Map<String, ClusterConfigurationMonitor> monitors = new HashMap<>(); + + @Override + public void init(GatewayConfig config, Map<String, String> options) throws ServiceLifecycleException { + ServiceLoader<ClusterConfigurationMonitorProvider> providers = + ServiceLoader.load(ClusterConfigurationMonitorProvider.class); + for (ClusterConfigurationMonitorProvider provider : providers) { + // Check the gateway configuration to determine if this type of monitor is enabled + if (config.isClusterMonitorEnabled(provider.getType())) { + ClusterConfigurationMonitor monitor = provider.newInstance(config, aliasService); + if (monitor != null) { + monitors.put(provider.getType(), monitor); + } + } + } + } + + @Override + public void start() { + for (ClusterConfigurationMonitor monitor : monitors.values()) { + monitor.start(); + } + } + + @Override + public void stop() { + for (ClusterConfigurationMonitor monitor : monitors.values()) { + monitor.stop(); + } + } + + @Override + public ClusterConfigurationMonitor getMonitor(String type) { + return monitors.get(type); + } + + @Override + public void addListener(ClusterConfigurationMonitor.ConfigurationChangeListener listener) { + for (ClusterConfigurationMonitor monitor : monitors.values()) { + monitor.addListener(listener); + } + } + + public void setAliasService(AliasService aliasService) { + this.aliasService = aliasService; + } +} http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultTopologyService.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultTopologyService.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultTopologyService.java index 5fc3620..aded6cd 100644 --- a/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultTopologyService.java +++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/services/topology/impl/DefaultTopologyService.java @@ -28,6 +28,7 @@ import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import org.apache.commons.io.monitor.FileAlterationMonitor; import org.apache.commons.io.monitor.FileAlterationObserver; import org.apache.hadoop.gateway.GatewayMessages; +import org.apache.hadoop.gateway.GatewayServer; import org.apache.hadoop.gateway.audit.api.Action; import org.apache.hadoop.gateway.audit.api.ActionOutcome; import org.apache.hadoop.gateway.audit.api.AuditServiceFactory; @@ -37,15 +38,18 @@ import org.apache.hadoop.gateway.audit.log4j.audit.AuditConstants; import org.apache.hadoop.gateway.config.GatewayConfig; import org.apache.hadoop.gateway.i18n.messages.MessagesFactory; import org.apache.hadoop.gateway.service.definition.ServiceDefinition; +import org.apache.hadoop.gateway.services.GatewayServices; import org.apache.hadoop.gateway.services.ServiceLifecycleException; import org.apache.hadoop.gateway.services.security.AliasService; import org.apache.hadoop.gateway.services.topology.TopologyService; +import org.apache.hadoop.gateway.topology.ClusterConfigurationMonitorService; import org.apache.hadoop.gateway.topology.Topology; import org.apache.hadoop.gateway.topology.TopologyEvent; import org.apache.hadoop.gateway.topology.TopologyListener; import org.apache.hadoop.gateway.topology.TopologyMonitor; import org.apache.hadoop.gateway.topology.TopologyProvider; import org.apache.hadoop.gateway.topology.builder.TopologyBuilder; +import org.apache.hadoop.gateway.topology.discovery.ClusterConfigurationMonitor; import org.apache.hadoop.gateway.topology.monitor.RemoteConfigurationMonitor; import org.apache.hadoop.gateway.topology.monitor.RemoteConfigurationMonitorFactory; import org.apache.hadoop.gateway.topology.simple.SimpleDescriptorHandler; @@ -554,7 +558,10 @@ public class DefaultTopologyService @Override public void start() { - + // Register a cluster configuration monitor listener for change notifications + ClusterConfigurationMonitorService ccms = + GatewayServer.getGatewayServices().getService(GatewayServices.CLUSTER_CONFIGURATION_MONITOR_SERVICE); + ccms.addListener(new TopologyDiscoveryTrigger(this)); } @Override @@ -589,11 +596,17 @@ public class DefaultTopologyService // This happens prior to the start-up loading of the topologies. String[] descriptorFilenames = descriptorsDirectory.list(); if (descriptorFilenames != null) { - for (String descriptorFilename : descriptorFilenames) { - if (DescriptorsMonitor.isDescriptorFile(descriptorFilename)) { - descriptorsMonitor.onFileChange(new File(descriptorsDirectory, descriptorFilename)); - } + for (String descriptorFilename : descriptorFilenames) { + if (DescriptorsMonitor.isDescriptorFile(descriptorFilename)) { + // If there isn't a corresponding topology file, or if the descriptor has been modified since the + // corresponding topology file was generated, then trigger generation of one + File matchingTopologyFile = getExistingFile(topologiesDirectory, FilenameUtils.getBaseName(descriptorFilename)); + if (matchingTopologyFile == null || + matchingTopologyFile.lastModified() < (new File(descriptorsDirectory, descriptorFilename)).lastModified()) { + descriptorsMonitor.onFileChange(new File(descriptorsDirectory, descriptorFilename)); + } } + } } // Initialize the remote configuration monitor, if it has been configured @@ -604,7 +617,6 @@ public class DefaultTopologyService } } - /** * Utility method for listing the files in the specified directory. * This method is "nicer" than the File#listFiles() because it will not return null. @@ -847,4 +859,37 @@ public class DefaultTopologyService } } + /** + * Listener for Ambari config change events, which will trigger re-generation (including re-discovery) of the + * affected topologies. + */ + private static class TopologyDiscoveryTrigger implements ClusterConfigurationMonitor.ConfigurationChangeListener { + + private TopologyService topologyService = null; + + TopologyDiscoveryTrigger(TopologyService topologyService) { + this.topologyService = topologyService; + } + + @Override + public void onConfigurationChange(String source, String clusterName) { + log.noticedClusterConfigurationChange(source, clusterName); + try { + // Identify any descriptors associated with the cluster configuration change + for (File descriptor : topologyService.getDescriptors()) { + String descriptorContent = FileUtils.readFileToString(descriptor); + if (descriptorContent.contains(source)) { + if (descriptorContent.contains(clusterName)) { + log.triggeringTopologyRegeneration(source, clusterName, descriptor.getAbsolutePath()); + // 'Touch' the descriptor to trigger re-generation of the associated topology + descriptor.setLastModified(System.currentTimeMillis()); + } + } + } + } catch (Exception e) { + log.errorRespondingToConfigChange(source, clusterName, e); + } + } + } + } http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-server/src/main/java/org/apache/hadoop/gateway/topology/simple/SimpleDescriptorHandler.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/topology/simple/SimpleDescriptorHandler.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/topology/simple/SimpleDescriptorHandler.java index c44710a..6b9df0d 100644 --- a/gateway-server/src/main/java/org/apache/hadoop/gateway/topology/simple/SimpleDescriptorHandler.java +++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/topology/simple/SimpleDescriptorHandler.java @@ -54,6 +54,8 @@ public class SimpleDescriptorHandler { private static final SimpleDescriptorMessages log = MessagesFactory.get(SimpleDescriptorMessages.class); + private static Map<String, ServiceDiscovery> discoveryInstances = new HashMap<>(); + public static Map<String, File> handle(File desc) throws IOException { return handle(desc, NO_GATEWAY_SERVICES); } @@ -89,7 +91,12 @@ public class SimpleDescriptorHandler { discoveryType = "AMBARI"; } - ServiceDiscovery sd = ServiceDiscoveryFactory.get(discoveryType, gatewayServices); + // Use the cached discovery object for the required type, if it has already been loaded + ServiceDiscovery sd = discoveryInstances.get(discoveryType); + if (sd == null) { + sd = ServiceDiscoveryFactory.get(discoveryType, gatewayServices); + discoveryInstances.put(discoveryType, sd); + } ServiceDiscovery.Cluster cluster = sd.discover(sdc, desc.getClusterName()); List<String> validServiceNames = new ArrayList<>(); http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-spi/src/main/java/org/apache/hadoop/gateway/config/GatewayConfig.java ---------------------------------------------------------------------- diff --git a/gateway-spi/src/main/java/org/apache/hadoop/gateway/config/GatewayConfig.java b/gateway-spi/src/main/java/org/apache/hadoop/gateway/config/GatewayConfig.java index 5cfaf36..e45fd11 100644 --- a/gateway-spi/src/main/java/org/apache/hadoop/gateway/config/GatewayConfig.java +++ b/gateway-spi/src/main/java/org/apache/hadoop/gateway/config/GatewayConfig.java @@ -313,7 +313,23 @@ public interface GatewayConfig { * @return */ boolean isGatewayServerHeaderEnabled(); - + + /** + * + * @param type The type of cluster configuration monitor for which the interval should be returned. + * + * @return The polling interval configuration value, or -1 if it has not been configured. + */ + int getClusterMonitorPollingInterval(String type); + + /** + * + * @param type The type of cluster configuration monitor for which the interval should be returned. + * + * @return The enabled status of the specified type of cluster configuration monitor. + */ + boolean isClusterMonitorEnabled(String type); + /** * @return The list of the names of any remote registry configurations defined herein. */ http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/GatewayServices.java ---------------------------------------------------------------------- diff --git a/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/GatewayServices.java b/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/GatewayServices.java index 2894bbc..222b1f0 100644 --- a/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/GatewayServices.java +++ b/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/GatewayServices.java @@ -41,6 +41,8 @@ public interface GatewayServices extends Service, ProviderDeploymentContributor String REMOTE_REGISTRY_CLIENT_SERVICE = "RemoteConfigRegistryClientService"; + String CLUSTER_CONFIGURATION_MONITOR_SERVICE = "ClusterConfigurationMonitorService"; + public abstract Collection<String> getServiceNames(); public abstract <T> T getService( String serviceName ); http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/ClusterConfigurationMonitorService.java ---------------------------------------------------------------------- diff --git a/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/ClusterConfigurationMonitorService.java b/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/ClusterConfigurationMonitorService.java new file mode 100644 index 0000000..961f2e5 --- /dev/null +++ b/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/ClusterConfigurationMonitorService.java @@ -0,0 +1,43 @@ +/** + * 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.hadoop.gateway.topology; + +import org.apache.hadoop.gateway.services.Service; +import org.apache.hadoop.gateway.topology.discovery.ClusterConfigurationMonitor; + +/** + * Gateway service for managing cluster configuration monitors. + */ +public interface ClusterConfigurationMonitorService extends Service { + + /** + * + * @param type The type of monitor (e.g., Ambari) + * + * @return The monitor associated with the specified type, or null if there is no such monitor. + */ + ClusterConfigurationMonitor getMonitor(String type); + + + /** + * Register for configuration change notifications from <em>any</em> of the monitors managed by this service. + * + * @param listener The listener to register. + */ + void addListener(ClusterConfigurationMonitor.ConfigurationChangeListener listener); + +} http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/discovery/ClusterConfigurationMonitor.java ---------------------------------------------------------------------- diff --git a/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/discovery/ClusterConfigurationMonitor.java b/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/discovery/ClusterConfigurationMonitor.java new file mode 100644 index 0000000..fc3614d --- /dev/null +++ b/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/discovery/ClusterConfigurationMonitor.java @@ -0,0 +1,48 @@ +/** + * 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.hadoop.gateway.topology.discovery; + +public interface ClusterConfigurationMonitor { + + /** + * Start the monitor. + */ + void start(); + + /** + * Stop the monitor. + */ + void stop(); + + /** + * + * @param interval The polling interval, in seconds + */ + void setPollingInterval(int interval); + + /** + * Register for notifications from the monitor. + */ + void addListener(ConfigurationChangeListener listener); + + /** + * Monitor listener interface for receiving notifications that a configuration has changed. + */ + interface ConfigurationChangeListener { + void onConfigurationChange(String source, String clusterName); + } +} http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/discovery/ClusterConfigurationMonitorProvider.java ---------------------------------------------------------------------- diff --git a/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/discovery/ClusterConfigurationMonitorProvider.java b/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/discovery/ClusterConfigurationMonitorProvider.java new file mode 100644 index 0000000..a8d5f30 --- /dev/null +++ b/gateway-spi/src/main/java/org/apache/hadoop/gateway/topology/discovery/ClusterConfigurationMonitorProvider.java @@ -0,0 +1,27 @@ +/** + * 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.hadoop.gateway.topology.discovery; + +import org.apache.hadoop.gateway.config.GatewayConfig; +import org.apache.hadoop.gateway.services.security.AliasService; + +public interface ClusterConfigurationMonitorProvider { + + String getType(); + + ClusterConfigurationMonitor newInstance(GatewayConfig config, AliasService aliasService); +} http://git-wip-us.apache.org/repos/asf/knox/blob/a874f399/gateway-test-release-utils/src/main/java/org/apache/hadoop/gateway/GatewayTestConfig.java ---------------------------------------------------------------------- diff --git a/gateway-test-release-utils/src/main/java/org/apache/hadoop/gateway/GatewayTestConfig.java b/gateway-test-release-utils/src/main/java/org/apache/hadoop/gateway/GatewayTestConfig.java index f7ea633..e04c581 100644 --- a/gateway-test-release-utils/src/main/java/org/apache/hadoop/gateway/GatewayTestConfig.java +++ b/gateway-test-release-utils/src/main/java/org/apache/hadoop/gateway/GatewayTestConfig.java @@ -640,4 +640,14 @@ public class GatewayTestConfig extends Configuration implements GatewayConfig { public String getRemoteConfigurationMonitorClientName() { return null; } + + @Override + public int getClusterMonitorPollingInterval(String type) { + return 600; + } + + @Override + public boolean isClusterMonitorEnabled(String type) { + return false; + } }
