private Set<RemoteTask> assignSplits(Multimap<Node, Split> splitAssignment, Multimap<Node, Lifespan> noMoreSplitsNotification) { ImmutableSet.Builder<RemoteTask> newTasks = ImmutableSet.builder(); ImmutableSet<Node> nodes = ImmutableSet.<Node>builder() .addAll(splitAssignment.keySet()) .addAll(noMoreSplitsNotification.keySet()) .build(); for (Node node : nodes) { // source partitioned tasks can only receive broadcast data; otherwise it would have a different distribution ImmutableMultimap<PlanNodeId, Split> splits = ImmutableMultimap.<PlanNodeId, Split>builder() .putAll(partitionedNode, splitAssignment.get(node)) .build(); ImmutableMultimap.Builder<PlanNodeId, Lifespan> noMoreSplits = ImmutableMultimap.builder(); if (noMoreSplitsNotification.containsKey(node)) { noMoreSplits.putAll(partitionedNode, noMoreSplitsNotification.get(node)); } newTasks.addAll(stage.scheduleSplits( node, splits, noMoreSplits.build())); } return newTasks.build(); }
protected Multimap<String, FieldEntry> getterMappings(Class<?> iface) { ImmutableMultimap.Builder<String, FieldEntry> builder = ImmutableMultimap.builder(); for (Map.Entry<String, Method> getter : TaskInvocationHandler.fieldGetters(iface).entries()) { Method getterMethod = getter.getValue(); String fieldName = getter.getKey(); if (getterMethod.getAnnotation(ConfigInject.class) != null) { // InjectEntry continue; } Type fieldType = getterMethod.getGenericReturnType(); final Optional<String> jsonKey = getJsonKey(getterMethod, fieldName); if (!jsonKey.isPresent()) { // skip this field continue; } final Optional<String> defaultJsonString = getDefaultJsonString(getterMethod); builder.put(jsonKey.get(), new FieldEntry(fieldName, fieldType, defaultJsonString)); } return builder.build(); }
public void testInvertFrom() { ImmutableMultimap<Integer, String> empty = ImmutableMultimap.of(); // typical usage example - sad that ArrayListMultimap.create() won't work Multimap<String, Integer> multimap = Multimaps.invertFrom(empty, ArrayListMultimap.<String, Integer>create()); assertTrue(multimap.isEmpty()); ImmutableMultimap<Integer, String> single = new ImmutableMultimap.Builder<Integer, String>().put(1, "one").put(2, "two").build(); // copy into existing multimap assertSame(multimap, Multimaps.invertFrom(single, multimap)); ImmutableMultimap<String, Integer> expected = new ImmutableMultimap.Builder<String, Integer>().put("one", 1).put("two", 2).build(); assertEquals(expected, multimap); }
nonRackLocalSplits = Sets.difference(nonRackLocalSplits, new HashSet<>(assignments.values())); remoteTask.addSplits(ImmutableMultimap.<PlanNodeId, Split>builder() .putAll(new PlanNodeId("sourceId"), assignments.get(node)) .build()); assertEquals(nonRackLocalSplits.size(), 3); remoteTask.addSplits(ImmutableMultimap.<PlanNodeId, Split>builder() .putAll(new PlanNodeId("sourceId"), assignments.get(node)) .build()); remoteTask.addSplits(ImmutableMultimap.<PlanNodeId, Split>builder() .putAll(new PlanNodeId("sourceId"), assignments.get(node)) .build()); assertEquals(unassigned.size(), 3); int rack1 = 0; int rack2 = 0; break; default: fail();
public void testGetContainerWhenResponseIs2xx() throws Exception { HttpRequest get = HttpRequest .builder() .method("GET") .endpoint("http://localhost:8080/MyContainer/") .headers(ImmutableMultimap.<String, String> builder().put("X-CDMI-Specification-Version", "1.0.1") .put("TID", "tenantId") .put("Authorization", "Basic " + base64().encode("username:password".getBytes(UTF_8))) .put("Accept", "application/cdmi-container").build()).build(); HttpResponse getResponse = HttpResponse.builder().statusCode(200).payload(payloadFromResource("/container.json")) .build(); CDMIApi apiWhenContainersExist = requestSendsResponse(get, getResponse); assertEquals(apiWhenContainersExist.getContainerApi().get("MyContainer/"), new ParseContainerTest().expected()); }
public void testFilterWhenResponseIs404() throws Exception { HttpResponse filterResponse = HttpResponse.builder().statusCode(404).build(); EC2Api apiWhenDontExist = requestSendsResponse(filter, filterResponse); assertEquals(apiWhenDontExist.getTagApi().get().filter(ImmutableMultimap.<String, String> builder() .put("resource-type", "instance") .put("key", "stack") .build()).toSet(), ImmutableSet.of()); }
@Benchmark @OperationsPerInvocation(SPLITS) public Object benchmark(BenchmarkData data) { List<RemoteTask> remoteTasks = ImmutableList.copyOf(data.getTaskMap().values()); Iterator<MockRemoteTaskFactory.MockRemoteTask> finishingTask = Iterators.cycle(data.getTaskMap().values()); Iterator<Split> splits = data.getSplits().iterator(); Set<Split> batch = new HashSet<>(); while (splits.hasNext() || !batch.isEmpty()) { Multimap<Node, Split> assignments = data.getNodeSelector().computeAssignments(batch, remoteTasks).getAssignments(); for (Node node : assignments.keySet()) { MockRemoteTaskFactory.MockRemoteTask remoteTask = data.getTaskMap().get(node); remoteTask.addSplits(ImmutableMultimap.<PlanNodeId, Split>builder() .putAll(new PlanNodeId("sourceId"), assignments.get(node)) .build()); remoteTask.startSplits(MAX_SPLITS_PER_NODE); } if (assignments.size() == batch.size()) { batch.clear(); } else { batch.removeAll(assignments.values()); } while (batch.size() < SPLIT_BATCH_SIZE && splits.hasNext()) { batch.add(splits.next()); } finishingTask.next().finishSplits((int) Math.ceil(MAX_SPLITS_PER_NODE / 50.0)); } return remoteTasks; }
public void testDeleteSecurityGroupRuleWhenResponseIs2xx() throws Exception { HttpRequest deleteRule = HttpRequest.builder().method("DELETE").endpoint( URI.create("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/os-security-group-rules/161")) .headers( ImmutableMultimap.<String, String> builder().put("Accept", "*/*") .put("X-Auth-Token", authToken).build()).build(); HttpResponse deleteRuleResponse = HttpResponse.builder().statusCode(202).build(); NovaApi apiWhenSecurityGroupsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess, extensionsOfNovaRequest, extensionsOfNovaResponse, deleteRule, deleteRuleResponse); assertTrue(apiWhenSecurityGroupsExist.getSecurityGroupExtensionForZone("az-1.region-a.geo-1").get() .deleteRule("161")); }
Optional<Entry<Long, AccumuloColumnConstraint>> entry = cardinalities.entries().stream().findFirst(); if (!entry.isPresent()) { return false; if (cardinalities.size() == 1) { long numEntries = lowestCardinality.getKey(); double ratio = ((double) numEntries / (double) numRows); LOG.debug("%d indexed columns, intersecting ranges", constraintRanges.size()); indexRanges = getIndexRanges(indexTable, constraintRanges, rowIdRanges, auths); LOG.debug("Intersection results in %d ranges from secondary index", indexRanges.size()); ImmutableMultimap.Builder<AccumuloColumnConstraint, Range> lcBldr = ImmutableMultimap.builder(); lcBldr.putAll(lowestCardinality.getValue(), constraintRanges.get(lowestCardinality.getValue())); indexRanges = getIndexRanges(indexTable, lcBldr.build(), rowIdRanges, auths);
public void testPutHeadersAddsAnotherValue() { HttpRequest request = HttpRequest.builder() .method("GET").endpoint("http://foo") .addHeader("foo", "bar").build(); assertEquals(request.toBuilder() .addHeader("foo", "baz").build().getHeaders(), ImmutableMultimap.<String, String> builder() .putAll("foo", "bar", "baz").build()); }
public void test() { HttpRequest request = HttpRequest.builder().method("POST").endpoint("http://localhost").build(); request = binder.bindToRequest(request, ImmutableMultimap.<String, String> builder() .put("resource-type", "instance") .put("key", "stack") .putAll("value", "Test", "Production") .build()); assertEquals( request.getPayload().getRawContent(), "Filter.1.Name=resource-type&Filter.1.Value.1=instance&Filter.2.Name=key&Filter.2.Value.1=stack&Filter.3.Name=value&Filter.3.Value.1=Test&Filter.3.Value.2=Production"); }
public static <K, V> Multimap<K, V> replaceEntries(Multimap<K, V> fromMultimap, Multimap<K, V> updates) { checkNotNull(fromMultimap, "input multimap"); checkNotNull(updates, "updates"); return ImmutableMultimap.<K, V>builder() .putAll(withoutKeys(fromMultimap, updates.keySet())) .putAll(updates).build(); }
private void deleteCellsAtTimestamps(TransactionManager txManager, TableReference tableRef, Multimap<Cell, Long> cellToTimestamp, Transaction.TransactionType transactionType) { if (!cellToTimestamp.isEmpty()) { for (Follower follower : followers) { follower.run(txManager, tableRef, cellToTimestamp.keySet(), transactionType); } keyValueService.addGarbageCollectionSentinelValues(tableRef, cellToTimestamp.keySet()); for (List<Entry<Cell, Long>> batch : Iterables.partition(cellToTimestamp.entries(), MAX_DELETES_IN_BATCH)) { Builder<Cell, Long> builder = ImmutableMultimap.builder(); batch.stream().forEach(e -> builder.put(e)); keyValueService.delete(tableRef, builder.build()); } } }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object input) { checkArgument(input instanceof Multimap<?, ?>, "this binder is only valid for Multimaps!"); Multimap<String, String> pairs = (Multimap<String, String>) checkNotNull(input, "account group pairs"); checkArgument(pairs.size() > 0, "you must specify at least one account, group pair"); Multimap<String, String> existingParams = queryParser().apply(request.getEndpoint().getQuery()); Builder<String, String> map = ImmutableMultimap.<String, String> builder().putAll(existingParams); int i = 0; for (Entry<String, String> entry : pairs.entries()) map.put(String.format("usersecuritygrouplist[%d].account", i), entry.getKey()).put( String.format("usersecuritygrouplist[%d].group", i++), entry.getValue()); URI endpoint = uriBuilder(request.getEndpoint()).query(map.build()).build(); return (R) request.toBuilder().endpoint(endpoint).build(); } }
@Test void testBuildCanonicalizedString() { assertEquals( staticCredentialsFilter.buildCanonicalizedString(new ImmutableMultimap.Builder<String, String>() .put("AWSAccessKeyId", "foo").put("Action", "DescribeImages").put("Expires", "2008-02-10T12:00:00Z") .put("ImageId.1", "ami-2bb65342").put("SignatureMethod", "HmacSHA256").put("SignatureVersion", "2") .put("Version", "2010-06-15").build()), "AWSAccessKeyId=foo&Action=DescribeImages&Expires=2008-02-10T12%3A00%3A00Z&ImageId.1=ami-2bb65342&SignatureMethod=HmacSHA256&SignatureVersion=2&Version=2010-06-15"); }
AttributesByFirstLetter(Iterable<ValueAttribute> attributes) { ImmutableMultimap.Builder<Character, ValueAttribute> builder = ImmutableMultimap.builder(); for (ValueAttribute attribute : attributes) { String name = attribute.getMarshaledName(); char firstChar = name.charAt(0); builder.put(firstChar, attribute); } byFirst = builder.build(); asMap = byFirst.asMap(); }
public static <R extends HttpRequest> R indexStringArrayToFormValuesWithPrefix(R request, String prefix, Object input) { checkArgument(checkNotNull(input, "input") instanceof String[], "this binder is only valid for String[] : " + input.getClass()); String[] values = (String[]) input; Builder<String, String> builder = ImmutableMultimap.builder(); for (int i = 0; i < values.length; i++) { builder.put(prefix + "." + (i + 1), checkNotNull(values[i], prefix.toLowerCase() + "s[" + i + "]")); } ImmutableMultimap<String, String> forms = builder.build(); return forms.size() == 0 ? request : (R) request.toBuilder().replaceFormParams(forms).build(); }
public void testGetSecurityGroupWhenResponseIs404() throws Exception { HttpRequest getSecurityGroup = HttpRequest.builder().method("GET").endpoint( URI.create("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/os-security-groups/0")).headers( ImmutableMultimap.<String, String> builder().put("Accept", "application/json").put("X-Auth-Token", authToken).build()).build(); HttpResponse getSecurityGroupResponse = HttpResponse.builder().statusCode(404).build(); NovaApi apiWhenNoSecurityGroupsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess, extensionsOfNovaRequest, extensionsOfNovaResponse, getSecurityGroup, getSecurityGroupResponse); assertNull(apiWhenNoSecurityGroupsExist.getSecurityGroupExtensionForZone("az-1.region-a.geo-1").get() .get("0")); }
/** * Stores another multimap's entries in the built multimap. The generated multimap's key and * value orderings correspond to the iteration ordering of the {@code multimap.asMap()} view, * with new keys and values following any existing keys and values. * * @throws NullPointerException if any key or value in {@code multimap} is null. The builder is * left in an invalid state. */ @CanIgnoreReturnValue public Builder<K, V> putAll(Multimap<? extends K, ? extends V> multimap) { for (Entry<? extends K, ? extends Collection<? extends V>> entry : multimap.asMap().entrySet()) { putAll(entry.getKey(), entry.getValue()); } return this; }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object input) { Iterable<String> alarmNames = (Iterable<String>) checkNotNull(input, "alarm names must be set"); ImmutableMultimap.Builder<String, String> formParameters = ImmutableMultimap.builder(); int alarmNameIndex = 1; for (String alarmName : alarmNames) { formParameters.put("AlarmNames.member." + alarmNameIndex, alarmName); alarmNameIndex++; } return (R) request.toBuilder().replaceFormParams(formParameters.build()).build(); }