private PinotResourceManagerResponse updateIndependentServerTenant(Tenant serverTenant, String realtimeServerTag, List<String> taggedRealtimeServers, String offlineServerTag, List<String> taggedOfflineServers, int incInstances, List<String> unTaggedInstanceList) { int incOffline = serverTenant.getOfflineInstances() - taggedOfflineServers.size(); int incRealtime = serverTenant.getRealtimeInstances() - taggedRealtimeServers.size(); for (int i = 0; i < incOffline; ++i) { retagInstance(unTaggedInstanceList.get(i), CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE, offlineServerTag); } for (int i = incOffline; i < incOffline + incRealtime; ++i) { String instanceName = unTaggedInstanceList.get(i); retagInstance(instanceName, CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE, realtimeServerTag); // TODO: update idealStates & instanceZkMetadata } return PinotResourceManagerResponse.SUCCESS; }
private PinotResourceManagerResponse updateColocatedServerTenant(Tenant serverTenant, String realtimeServerTag, List<String> taggedRealtimeServers, String offlineServerTag, List<String> taggedOfflineServers, int incInstances, List<String> unTaggedInstanceList) { int incOffline = serverTenant.getOfflineInstances() - taggedOfflineServers.size(); int incRealtime = serverTenant.getRealtimeInstances() - taggedRealtimeServers.size(); taggedRealtimeServers.removeAll(taggedOfflineServers); taggedOfflineServers.removeAll(taggedRealtimeServers); for (int i = 0; i < incOffline; ++i) { if (i < incInstances) { retagInstance(unTaggedInstanceList.get(i), CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE, offlineServerTag); } else { _helixAdmin.addInstanceTag(_helixClusterName, taggedRealtimeServers.get(i - incInstances), offlineServerTag); } } for (int i = incOffline; i < incOffline + incRealtime; ++i) { if (i < incInstances) { retagInstance(unTaggedInstanceList.get(i), CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE, realtimeServerTag); // TODO: update idealStates & instanceZkMetadata } else { _helixAdmin.addInstanceTag(_helixClusterName, taggedOfflineServers.get(i - Math.max(incInstances, incOffline)), realtimeServerTag); // TODO: update idealStates & instanceZkMetadata } } return PinotResourceManagerResponse.SUCCESS; }
public PinotResourceManagerResponse updateServerTenant(Tenant serverTenant) { String realtimeServerTag = TagNameUtils.getRealtimeTagForTenant(serverTenant.getTenantName()); List<String> taggedRealtimeServers = HelixHelper.getInstancesWithTag(_helixZkManager, realtimeServerTag); String offlineServerTag = TagNameUtils.getOfflineTagForTenant(serverTenant.getTenantName()); List<String> taggedOfflineServers = HelixHelper.getInstancesWithTag(_helixZkManager, offlineServerTag); Set<String> allServingServers = new HashSet<>(); allServingServers.addAll(taggedOfflineServers); allServingServers.addAll(taggedRealtimeServers); boolean isCurrentTenantColocated = (allServingServers.size() < taggedOfflineServers.size() + taggedRealtimeServers.size()); if (isCurrentTenantColocated != serverTenant.isCoLocated()) { String message = "Not support different colocated type request for update request: " + serverTenant; LOGGER.error(message); return PinotResourceManagerResponse.failure(message); } if (serverTenant.getNumberOfInstances() < allServingServers.size() || serverTenant.getOfflineInstances() < taggedOfflineServers.size() || serverTenant.getRealtimeInstances() < taggedRealtimeServers.size()) { return scaleDownServer(serverTenant, taggedRealtimeServers, taggedOfflineServers, allServingServers); } return scaleUpServerTenant(serverTenant, realtimeServerTag, taggedRealtimeServers, offlineServerTag, taggedOfflineServers, allServingServers); }
private void assignIndependentServerTenant(Tenant serverTenant, int numberOfInstances, List<String> unTaggedInstanceList) { String offlineServerTag = TagNameUtils.getOfflineTagForTenant(serverTenant.getTenantName()); for (int i = 0; i < serverTenant.getOfflineInstances(); i++) { retagInstance(unTaggedInstanceList.get(i), CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE, offlineServerTag); } String realtimeServerTag = TagNameUtils.getRealtimeTagForTenant(serverTenant.getTenantName()); for (int i = 0; i < serverTenant.getRealtimeInstances(); i++) { retagInstance(unTaggedInstanceList.get(i + serverTenant.getOfflineInstances()), CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE, realtimeServerTag); } }
private void assignColocatedServerTenant(Tenant serverTenant, int numberOfInstances, List<String> unTaggedInstanceList) { int cnt = 0; String offlineServerTag = TagNameUtils.getOfflineTagForTenant(serverTenant.getTenantName()); for (int i = 0; i < serverTenant.getOfflineInstances(); i++) { retagInstance(unTaggedInstanceList.get(cnt++), CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE, offlineServerTag); } String realtimeServerTag = TagNameUtils.getRealtimeTagForTenant(serverTenant.getTenantName()); for (int i = 0; i < serverTenant.getRealtimeInstances(); i++) { retagInstance(unTaggedInstanceList.get(cnt++), CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE, realtimeServerTag); if (cnt == numberOfInstances) { cnt = 0; } } }
@Test public void testDeserializeFromJson() throws IOException { Tenant tenant = new Tenant(); tenant.setTenantRole(TenantRole.SERVER); tenant.setTenantName("newTenant"); tenant.setNumberOfInstances(10); tenant.setOfflineInstances(5); tenant.setRealtimeInstances(5); tenant = JsonUtils.stringToObject(JsonUtils.objectToString(tenant), Tenant.class); assertEquals(tenant.getTenantRole(), TenantRole.SERVER); assertEquals(tenant.getTenantName(), "newTenant"); assertEquals(tenant.getNumberOfInstances(), 10); assertEquals(tenant.getOfflineInstances(), 5); assertEquals(tenant.getRealtimeInstances(), 5); } }