private boolean validateOfflineInstancesLimit(final ClusterDataCache cache, final HelixManager manager) { int maxOfflineInstancesAllowed = cache.getClusterConfig().getMaxOfflineInstancesAllowed(); if (maxOfflineInstancesAllowed >= 0) { int offlineCount = cache.getAllInstances().size() - cache.getEnabledLiveInstances().size(); if (offlineCount > maxOfflineInstancesAllowed) { String errMsg = String.format( "Offline Instances count %d greater than allowed count %d. Stop rebalance and put the cluster %s into maintenance mode.", offlineCount, maxOfflineInstancesAllowed, cache.getClusterName()); if (manager != null) { if (manager.getHelixDataAccessor() .getProperty(manager.getHelixDataAccessor().keyBuilder().maintenance()) == null) { manager.getClusterManagmentTool() .enableMaintenanceMode(manager.getClusterName(), true, errMsg); LogUtil.logWarn(logger, _eventId, errMsg); } } else { LogUtil.logError(logger, _eventId, "Failed to put cluster " + cache.getClusterName() + " into maintenance mode, HelixManager is not set!"); } return false; } } return true; }
private void validateOfflineInstancesLimit(final ClusterDataCache cache, final HelixManager manager, final ClusterStatusMonitor clusterStatusMonitor) { int maxOfflineInstancesAllowed = cache.getClusterConfig().getMaxOfflineInstancesAllowed(); if (maxOfflineInstancesAllowed >= 0) { int offlineCount = cache.getAllInstances().size() - cache.getEnabledLiveInstances().size(); if (offlineCount > maxOfflineInstancesAllowed) { String errMsg = String.format( "Offline Instances count %d greater than allowed count %d. Stop rebalance pipeline and pause the cluster %s", offlineCount, maxOfflineInstancesAllowed, cache.getClusterName()); if (manager != null) { if (manager.getHelixDataAccessor() .getProperty(manager.getHelixDataAccessor().keyBuilder().maintenance()) == null) { manager.getClusterManagmentTool() .enableMaintenanceMode(manager.getClusterName(), true, errMsg); } } else { LogUtil.logError(logger, _eventId, "Failed to pause cluster, HelixManager is not set!"); } if (!cache.isTaskCache()) { updateRebalanceStatus(true, manager, cache, clusterStatusMonitor, errMsg); } } } }