/** * @param perms A map of permissions for a user or users */ public Mutation setACL(Map<String, Permission> perms) { ListMultimap<String, Permission> permMap = ArrayListMultimap.create(); for (Map.Entry<String, Permission> entry : perms.entrySet()) { permMap.put(entry.getKey(), entry.getValue()); } setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL, AccessControlUtil.toUsersAndPermissions(permMap).toByteArray()); return this; }
protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env, final TRemote remote, final Set<RemoteProcedure> remoteProcedures) { final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create(); for (RemoteProcedure proc: remoteProcedures) { RemoteOperation operation = proc.remoteCallBuild(env, remote); requestByType.put(operation.getClass(), operation); } return requestByType; }
ArrayListMultimap<String, ServerName> serversByHostname = ArrayListMultimap.create(); for (ServerName server : servers) { assignments.put(server, new ArrayList<>()); serversByHostname.put(server.getHostnameLowerCase(), server); localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());
protected void updateLoad( ArrayListMultimap<String, ServerAndLoad> previousLoad, final ServerName sn, final int diff) { for (String groupName : previousLoad.keySet()) { ServerAndLoad newSAL = null; ServerAndLoad oldSAL = null; for (ServerAndLoad sal : previousLoad.get(groupName)) { if (ServerName.isSameAddress(sn, sal.getServerName())) { oldSAL = sal; newSAL = new ServerAndLoad(sn, sal.getLoad() + diff); break; } } if (newSAL != null) { previousLoad.remove(groupName, oldSAL); previousLoad.put(groupName, newSAL); break; } } }
protected ArrayListMultimap<String, ServerAndLoad> reconcile( ArrayListMultimap<String, ServerAndLoad> previousLoad, List<RegionPlan> plans) { ArrayListMultimap<String, ServerAndLoad> result = ArrayListMultimap .create(); result.putAll(previousLoad); if (plans != null) { for (RegionPlan plan : plans) { ServerName source = plan.getSource(); updateLoad(result, source, -1); ServerName destination = plan.getDestination(); updateLoad(result, destination, +1); } } return result; }
protected String printStats( ArrayListMultimap<String, ServerAndLoad> groupBasedLoad) { StringBuilder sb = new StringBuilder(); sb.append("\n"); for (String groupName : groupBasedLoad.keySet()) { sb.append("Stats for group: " + groupName); sb.append("\n"); sb.append(groupMap.get(groupName).getServers()); sb.append("\n"); List<ServerAndLoad> groupLoad = groupBasedLoad.get(groupName); int numServers = groupLoad.size(); int totalRegions = 0; sb.append("Per Server Load: \n"); for (ServerAndLoad sLoad : groupLoad) { sb.append("Server :" + sLoad.getServerName() + " Load : " + sLoad.getLoad() + "\n"); totalRegions += sLoad.getLoad(); } sb.append(" Group Statistics : \n"); float average = (float) totalRegions / numServers; int max = (int) Math.ceil(average); int min = (int) Math.floor(average); sb.append("[srvr=" + numServers + " rgns=" + totalRegions + " avg=" + average + " max=" + max + " min=" + min + "]"); sb.append("\n"); sb.append("==============================="); sb.append("\n"); } return sb.toString(); }
protected <T extends RemoteOperation> List<T> fetchType( final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) { return (List<T>)requestByType.removeAll(type); }
private ArrayListMultimap(Multimap<? extends K, ? extends V> multimap) { this( multimap.keySet().size(), (multimap instanceof ArrayListMultimap) ? ((ArrayListMultimap<?, ?>) multimap).expectedValuesPerKey : DEFAULT_VALUES_PER_KEY); putAll(multimap); }
private ArrayListMultimap<String, ServerAndLoad> reconcile( ArrayListMultimap<String, ServerAndLoad> previousLoad, List<RegionPlan> plans) { ArrayListMultimap<String, ServerAndLoad> result = ArrayListMultimap .create(); result.putAll(previousLoad); if (plans != null) { for (RegionPlan plan : plans) { ServerName source = plan.getSource(); updateLoad(result, source, -1); ServerName destination = plan.getDestination(); updateLoad(result, destination, +1); } } return result; }
private void updateLoad( ArrayListMultimap<String, ServerAndLoad> previousLoad, final ServerName sn, final int diff) { for (String groupName : previousLoad.keySet()) { ServerAndLoad newSAL = null; ServerAndLoad oldSAL = null; for (ServerAndLoad sal : previousLoad.get(groupName)) { if (ServerName.isSameAddress(sn, sal.getServerName())) { oldSAL = sal; newSAL = new ServerAndLoad(sn, sal.getLoad() + diff); break; } } if (newSAL != null) { previousLoad.remove(groupName, oldSAL); previousLoad.put(groupName, newSAL); break; } } }
protected <T extends RemoteOperation> List<T> fetchType( final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) { return (List<T>)requestByType.removeAll(type); }
/** * @param perms A map of permissions for a user or users */ public Query setACL(Map<String, Permission> perms) { ListMultimap<String, Permission> permMap = ArrayListMultimap.create(); for (Map.Entry<String, Permission> entry : perms.entrySet()) { permMap.put(entry.getKey(), entry.getValue()); } setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL, AccessControlUtil.toUsersAndPermissions(permMap).toByteArray()); return this; }
protected ArrayListMultimap<String, ServerAndLoad> convertToGroupBasedMap( final Map<ServerName, List<RegionInfo>> serversMap) throws IOException { ArrayListMultimap<String, ServerAndLoad> loadMap = ArrayListMultimap .create(); for (RSGroupInfo gInfo : getMockedGroupInfoManager().listRSGroups()) { Set<Address> groupServers = gInfo.getServers(); for (Address hostPort : groupServers) { ServerName actual = null; for(ServerName entry: servers) { if(entry.getAddress().equals(hostPort)) { actual = entry; break; } } List<RegionInfo> regions = serversMap.get(actual); assertTrue("No load for " + actual, regions != null); loadMap.put(gInfo.getName(), new ServerAndLoad(actual, regions.size())); } } return loadMap; }
private String printStats( ArrayListMultimap<String, ServerAndLoad> groupBasedLoad) { StringBuffer sb = new StringBuffer(); sb.append("\n"); for (String groupName : groupBasedLoad.keySet()) { sb.append("Stats for group: " + groupName); sb.append("\n"); sb.append(groupMap.get(groupName).getServers()); sb.append("\n"); List<ServerAndLoad> groupLoad = groupBasedLoad.get(groupName); int numServers = groupLoad.size(); int totalRegions = 0; sb.append("Per Server Load: \n"); for (ServerAndLoad sLoad : groupLoad) { sb.append("Server :" + sLoad.getServerName() + " Load : " + sLoad.getLoad() + "\n"); totalRegions += sLoad.getLoad(); } sb.append(" Group Statistics : \n"); float average = (float) totalRegions / numServers; int max = (int) Math.ceil(average); int min = (int) Math.floor(average); sb.append("[srvr=" + numServers + " rgns=" + totalRegions + " avg=" + average + " max=" + max + " min=" + min + "]"); sb.append("\n"); sb.append("==============================="); sb.append("\n"); } return sb.toString(); }
protected <T extends RemoteOperation> List<T> fetchType( final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) { return (List<T>)requestByType.removeAll(type); }
@Override public Map<ServerName, List<RegionInfo>> roundRobinAssignment( List<RegionInfo> regions, List<ServerName> servers) throws HBaseIOException { Map<ServerName, List<RegionInfo>> assignments = Maps.newHashMap(); ListMultimap<String,RegionInfo> regionMap = ArrayListMultimap.create(); ListMultimap<String,ServerName> serverMap = ArrayListMultimap.create(); generateGroupMaps(regions, servers, regionMap, serverMap); for(String groupKey : regionMap.keySet()) { if (regionMap.get(groupKey).size() > 0) { Map<ServerName, List<RegionInfo>> result = this.internalBalancer.roundRobinAssignment( regionMap.get(groupKey), serverMap.get(groupKey)); if(result != null) { if(result.containsKey(LoadBalancer.BOGUS_SERVER_NAME) && assignments.containsKey(LoadBalancer.BOGUS_SERVER_NAME)){ assignments.get(LoadBalancer.BOGUS_SERVER_NAME).addAll( result.get(LoadBalancer.BOGUS_SERVER_NAME)); } else { assignments.putAll(result); } } } } return assignments; }
protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env, final TRemote remote, final Set<RemoteProcedure> remoteProcedures) { final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create(); for (RemoteProcedure proc: remoteProcedures) { RemoteOperation operation = proc.remoteCallBuild(env, remote); requestByType.put(operation.getClass(), operation); } return requestByType; }
public static ListMultimap<String, Permission> toUsersAndPermissions( AccessControlProtos.UsersAndPermissions proto) { ListMultimap<String, Permission> result = ArrayListMultimap.create(); for (AccessControlProtos.UsersAndPermissions.UserPermissions userPerms: proto.getUserPermissionsList()) { String user = userPerms.getUser().toStringUtf8(); for (AccessControlProtos.Permission perm: userPerms.getPermissionsList()) { result.put(user, toPermission(perm)); } } return result; }