/** * Gets the external view of the table * @param tableNameWithType Table name with suffix * @return ExternalView of tableNameWithType */ public ExternalView getTableExternalView(String tableNameWithType) { return _helixAdmin.getResourceExternalView(_helixClusterName, tableNameWithType); }
public static ExternalView getExternalViewForResource(HelixAdmin admin, String clusterName, String resourceName) { return admin.getResourceExternalView(clusterName, resourceName); }
@Override protected ExternalView getState(String resourceName) { return _helixAdmin.getResourceExternalView(_clusterName, resourceName); }
ExternalView externalView = _helixAdmin.getResourceExternalView(_helixClusterName, tableName); Map<String, String> segmentStatsMap = externalView.getStateMap(segmentName); if (segmentStatsMap != null) {
private boolean noOnlineResources(HelixManager spectatorManager, Set<String> resources) { Iterator<String> iterator = resources.iterator(); while (iterator.hasNext()) { String resourceName = iterator.next(); ExternalView externalView = spectatorManager.getClusterManagmentTool().getResourceExternalView(_helixClusterName, resourceName); if (externalView == null) { iterator.remove(); continue; } for (String partition : externalView.getPartitionSet()) { Map<String, String> instanceStateMap = externalView.getStateMap(partition); if (instanceStateMap.containsKey(_instanceId)) { if ("ONLINE".equals(instanceStateMap.get(_instanceId))) { return false; } } } iterator.remove(); } return true; }
/** * Check if IdealState = ExternalView. If its not equal, return the number of differing segments. */ public int isStable(String tableName) { IdealState idealState = _helixAdmin.getResourceIdealState(_helixClusterName, tableName); ExternalView externalView = _helixAdmin.getResourceExternalView(_helixClusterName, tableName); Map<String, Map<String, String>> mapFieldsIS = idealState.getRecord().getMapFields(); Map<String, Map<String, String>> mapFieldsEV = externalView.getRecord().getMapFields(); int numDiff = 0; for (String segment : mapFieldsIS.keySet()) { Map<String, String> mapIS = mapFieldsIS.get(segment); Map<String, String> mapEV = mapFieldsEV.get(segment); for (String server : mapIS.keySet()) { String state = mapIS.get(server); if (mapEV == null || mapEV.get(server) == null || !mapEV.get(server).equals(state)) { LOGGER.debug("Mismatch: segment" + segment + " server:" + server + " state:" + state); numDiff = numDiff + 1; } } } return numDiff; }
@Nullable public Map<String, Map<String, String>> getExternalView(@Nonnull String tableNameOptType, CommonConstants.Helix.TableType tableType) { String tableNameWithType = getTableNameWithType(tableNameOptType, tableType); ExternalView resourceEV = _pinotHelixResourceManager.getHelixAdmin() .getResourceExternalView(_pinotHelixResourceManager.getHelixClusterName(), tableNameWithType); return resourceEV == null ? null : resourceEV.getRecord().getMapFields(); }
@Override public Boolean call() throws Exception { return _helixAdmin.getResourceExternalView(HELIX_CLUSTER_NAME, DINING_TABLE_NAME).getPartitionSet().size() == SEGMENT_COUNT; } }, 30000L);
@Override public Boolean call() throws Exception { return _helixAdmin.getResourceExternalView(HELIX_CLUSTER_NAME, CommonConstants.Helix.BROKER_RESOURCE_INSTANCE) .getStateMap(COFFEE_TABLE_NAME).size() == SEGMENT_COUNT; } }, 30000L);
protected synchronized void deleteSegmentFromPropertyStoreAndLocal(String tableName, Collection<String> segmentIds, long deletionDelay) { if (_helixAdmin.getResourceExternalView(_helixClusterName, tableName) == null || _helixAdmin.getResourceIdealState(_helixClusterName, tableName) == null) { LOGGER.warn("Resource: {} is not set up in idealState or ExternalView, won't do anything", tableName); ExternalView externalView = _helixAdmin.getResourceExternalView(_helixClusterName, tableName); IdealState idealState = _helixAdmin.getResourceIdealState(_helixClusterName, tableName);
HelixAdmin makeHelixAdmin() { HelixAdmin admin = mock(HelixAdmin.class); ExternalView ev = mock(ExternalView.class); IdealState is = mock(IdealState.class); when(admin.getResourceExternalView(clusterName, tableName)).thenReturn(ev); when(admin.getResourceIdealState(clusterName, tableName)).thenReturn(is); List<String> segmentsInIs = segmentsInIdealStateOrExtView(); Map<String, String> dummy = new HashMap<>(1); dummy.put("someHost", "ONLINE"); for (String segment : segmentsInIs) { when(is.getInstanceStateMap(segment)).thenReturn(dummy); } when(ev.getStateMap(anyString())).thenReturn(null); return admin; }
_helixAdmin.getResourceExternalView(HELIX_CLUSTER_NAME, CommonConstants.Helix.BROKER_RESOURCE_INSTANCE); Assert.assertEquals(externalView.getStateMap(DINING_TABLE_NAME).size(), SEGMENT_COUNT); _helixAdmin.getResourceExternalView(HELIX_CLUSTER_NAME, CommonConstants.Helix.BROKER_RESOURCE_INSTANCE); Assert.assertEquals(externalView.getStateMap(COFFEE_TABLE_NAME).size(), SEGMENT_COUNT); externalView = _helixAdmin.getResourceExternalView(HELIX_CLUSTER_NAME, DINING_TABLE_NAME); Assert.assertEquals(externalView.getPartitionSet().size(), SEGMENT_COUNT); tableArray = brokerRoutingTableBuilderMap.keySet().toArray();
public ExternalView getExternalViewForTopic(String topicName) { return _helixAdmin.getResourceExternalView(_helixClusterName, topicName); }
ExternalView externalView = _helixAdmin.getResourceExternalView(HELIX_CLUSTER_NAME, DINING_TABLE_NAME); Assert.assertEquals(externalView.getPartitionSet().size(), 5);
public ExternalView getExternalViewForTopic(String topicName) { return _helixAdmin.getResourceExternalView(_helixClusterName, topicName); }
public ExternalView getExternalViewForTopic(String topicName) { return _helixAdmin.getResourceExternalView(_helixClusterName, topicName); }
@GET @Path("{resourceName}/externalView") public Response getResourceExternalView(@PathParam("clusterId") String clusterId, @PathParam("resourceName") String resourceName) { HelixAdmin admin = getHelixAdmin(); ExternalView externalView = admin.getResourceExternalView(clusterId, resourceName); if (externalView != null) { return JSONRepresentation(externalView.getRecord()); } return notFound(); }
@Test (dependsOnMethods = "testMaintenanceModeInstanceBack") public void testExitMaintenanceModeNewResourceRecovery() throws InterruptedException { _gSetupTool.getClusterManagementTool().enableMaintenanceMode(CLUSTER_NAME, false); Assert.assertTrue(_clusterVerifier.verifyByPolling()); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, newResourceAddedDuringMaintenanceMode); Assert.assertEquals(externalView.getRecord().getMapFields().size(), 7); for (Map<String, String> stateMap : externalView.getRecord().getMapFields().values()) { Assert.assertTrue(stateMap.values().contains("MASTER")); } } }
@Override public void onIdealStateChange(List<IdealState> idealStates, NotificationContext changeContext) { if (!_startListen) { return; } for (IdealState is : idealStates) { ExternalView view = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, is.getResourceName()); validateNoZeroReplica(is, view); } }
@Test (dependsOnMethods = "testMaintenanceModeAddNewInstance") public void testMaintenanceModeAddNewResource() throws InterruptedException { _gSetupTool.getClusterManagementTool() .addResource(CLUSTER_NAME, newResourceAddedDuringMaintenanceMode, 7, "MasterSlave", IdealState.RebalanceMode.FULL_AUTO.name()); _gSetupTool.getClusterManagementTool() .rebalance(CLUSTER_NAME, newResourceAddedDuringMaintenanceMode, 3); Assert.assertTrue(_clusterVerifier.verifyByPolling()); ExternalView externalView = _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, newResourceAddedDuringMaintenanceMode); Assert.assertNull(externalView); }