List of usage examples for com.google.common.util.concurrent Futures transform
public static <I, O> ListenableFuture<O> transform(ListenableFuture<I> input, Function<? super I, ? extends O> function)
From source file:com.facebook.buck.distributed.DistributedBuildFileHashes.java
public DistributedBuildFileHashes(ActionGraph actionGraph, final SourcePathResolver sourcePathResolver, final FileHashCache rootCellFileHashCache, ListeningExecutorService executorService, final int keySeed) { this.remoteFileHashes = CacheBuilder.newBuilder() .build(new CacheLoader<ProjectFilesystem, BuildJobStateFileHashes>() { @Override//from w w w . ja v a2 s.c o m public BuildJobStateFileHashes load(ProjectFilesystem filesystem) throws Exception { BuildJobStateFileHashes fileHashes = new BuildJobStateFileHashes(); fileHashes.setFileSystemRootName(filesystem.getRootPath().toString()); return fileHashes; } }); this.fileHashLoaders = CacheBuilder.newBuilder() .build(new CacheLoader<ProjectFilesystem, FileHashLoader>() { @Override public FileHashLoader load(ProjectFilesystem key) throws Exception { return new RecordingFileHashLoader( new StackedFileHashCache(ImmutableList.of(rootCellFileHashCache, DefaultFileHashCache.createDefaultFileHashCache(key))), key, remoteFileHashes.get(key)); } }); this.ruleKeyFactories = CacheBuilder.newBuilder() .build(new CacheLoader<ProjectFilesystem, DefaultRuleKeyBuilderFactory>() { @Override public DefaultRuleKeyBuilderFactory load(ProjectFilesystem key) throws Exception { return new DefaultRuleKeyBuilderFactory(/* seed */ keySeed, fileHashLoaders.get(key), sourcePathResolver); } }); this.ruleKeys = ruleKeyComputation(actionGraph, this.ruleKeyFactories, executorService); this.fileHashes = fileHashesComputation(Futures.transform(this.ruleKeys, Functions.<Void>constant(null)), this.remoteFileHashes, executorService); }
From source file:org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.java
private static ListenableFuture<RpcResult<?>> transformFuture(final SchemaPath rpc, final ListenableFuture<DOMRpcResult> domFuture, final BindingNormalizedNodeSerializer codec) { return Futures.transform(domFuture, new Function<DOMRpcResult, RpcResult<?>>() { @Override/*from www. j a v a 2 s . c om*/ public RpcResult<?> apply(final DOMRpcResult input) { final NormalizedNode<?, ?> domData = input.getResult(); final DataObject bindingResult; if (domData != null) { final SchemaPath rpcOutput = rpc.createChild(QName.create(rpc.getLastComponent(), "output")); bindingResult = codec.fromNormalizedNodeRpcData(rpcOutput, (ContainerNode) domData); } else { bindingResult = null; } return RpcResult.class.cast(RpcResultBuilder.success(bindingResult).build()); } }); }
From source file:android.support.test.espresso.web.action.AtomAction.java
/** * Return a Future, which will be set and transformed from futureEval. * Espresso's public API cannot have guava types in its method signatures, so return Future * instead of ListenableFuture or SettableFuture. */// www . jav a2 s .c om public Future<E> getFuture() { return Futures.transform(futureEval, new Function<Evaluation, E>() { @Override public E apply(Evaluation e) { return atom.transform(e); } }); }
From source file:com.microsoft.azure.keyvault.extensions.KeyVaultKey.java
@Override public ListenableFuture<byte[]> decryptAsync(byte[] ciphertext, byte[] iv, byte[] authenticationData, byte[] authenticationTag, String algorithm) { if (implementation == null) { return null; }/*from w w w.j av a2s . com*/ if (Strings.isNullOrWhiteSpace(algorithm)) { algorithm = getDefaultEncryptionAlgorithm(); } // Never local ListenableFuture<KeyOperationResult> futureCall = client.decryptAsync(implementation.getKid(), new JsonWebKeyEncryptionAlgorithm(algorithm), ciphertext, null); return Futures.transform(futureCall, new DecryptResultTransform()); }
From source file:org.glassfish.jersey.examples.rx.agent.ListenableFutureAgentResource.java
private ListenableFuture<AgentResponse> visited(final AgentResponse response) { final ListenableFuture<List<Destination>> visited = RxListenableFuture.from(destination).path("visited") .request()//from ww w .j av a 2s . c o m // Identify the user. .header("Rx-User", "Guava") // Reactive invoker. .rx() // Return a list of destinations. .get(new GenericType<List<Destination>>() { }); return Futures.transform(visited, new AsyncFunction<List<Destination>, AgentResponse>() { @Override public ListenableFuture<AgentResponse> apply(final List<Destination> input) throws Exception { final SettableFuture<AgentResponse> future = SettableFuture.create(); response.setVisited(input); future.set(response); return future; } }); }
From source file:org.opendaylight.vpnservice.natservice.internal.VpnFloatingIpHandler.java
@Override public void onAddFloatingIp(final BigInteger dpnId, final String routerId, Uuid networkId, final String interfaceName, final String externalIp, final String internalIp) { final String vpnName = NatUtil.getAssociatedVPN(dataBroker, networkId, LOG); if (vpnName == null) { LOG.info("No VPN associated with ext nw {} to handle add floating ip configuration {} in router {}", networkId, externalIp, routerId); return;//from w w w.ja va 2s . co m } GenerateVpnLabelInput labelInput = new GenerateVpnLabelInputBuilder().setVpnName(vpnName) .setIpPrefix(externalIp).build(); Future<RpcResult<GenerateVpnLabelOutput>> labelFuture = vpnService.generateVpnLabel(labelInput); ListenableFuture<RpcResult<Void>> future = Futures.transform( JdkFutureAdapters.listenInPoolThread(labelFuture), new AsyncFunction<RpcResult<GenerateVpnLabelOutput>, RpcResult<Void>>() { @Override public ListenableFuture<RpcResult<Void>> apply(RpcResult<GenerateVpnLabelOutput> result) throws Exception { if (result.isSuccessful()) { GenerateVpnLabelOutput output = result.getResult(); long label = output.getLabel(); LOG.debug("Generated label {} for prefix {}", label, externalIp); listener.updateOperationalDS(routerId, interfaceName, (int) label, internalIp, externalIp); //Inform BGP String rd = NatUtil.getVpnRd(dataBroker, vpnName); String nextHopIp = NatUtil.getEndpointIpAddressForDPN(dataBroker, dpnId); LOG.debug("Nexthop ip for prefix {} is {}", externalIp, nextHopIp); NatUtil.addPrefixToBGP(bgpManager, rd, externalIp + "/32", nextHopIp, label, LOG); List<Instruction> instructions = new ArrayList<Instruction>(); List<ActionInfo> actionsInfos = new ArrayList<ActionInfo>(); actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[] { Integer.toString(NatConstants.PDNAT_TABLE) })); instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos) .buildInstruction(0)); makeTunnelTableEntry(dpnId, label, instructions); //Install custom FIB routes List<Instruction> customInstructions = new ArrayList<>(); customInstructions.add(new InstructionInfo(InstructionType.goto_table, new long[] { NatConstants.PDNAT_TABLE }).buildInstruction(0)); makeLFibTableEntry(dpnId, label, NatConstants.PDNAT_TABLE); CreateFibEntryInput input = new CreateFibEntryInputBuilder().setVpnName(vpnName) .setSourceDpid(dpnId).setInstruction(customInstructions) .setIpAddress(externalIp + "/32").setServiceId(label) .setInstruction(customInstructions).build(); //Future<RpcResult<java.lang.Void>> createFibEntry(CreateFibEntryInput input); Future<RpcResult<Void>> future = fibService.createFibEntry(input); return JdkFutureAdapters.listenInPoolThread(future); } else { String errMsg = String.format( "Could not retrieve the label for prefix %s in VPN %s, %s", externalIp, vpnName, result.getErrors()); LOG.error(errMsg); return Futures.immediateFailedFuture(new RuntimeException(errMsg)); } } }); Futures.addCallback(future, new FutureCallback<RpcResult<Void>>() { @Override public void onFailure(Throwable error) { LOG.error("Error in generate label or fib install process", error); } @Override public void onSuccess(RpcResult<Void> result) { if (result.isSuccessful()) { LOG.info("Successfully installed custom FIB routes for prefix {}", externalIp); } else { LOG.error("Error in rpc call to create custom Fib entries for prefix {} in DPN {}, {}", externalIp, dpnId, result.getErrors()); } } }); }
From source file:com.google.gapid.models.CommandStream.java
public ListenableFuture<API.Command> loadCommand(Path.Command path) { return Futures.transformAsync(client.get(Paths.toAny(path)), value -> Futures .transform(constants.loadConstants(value.getCommand()), ignore -> value.getCommand())); }
From source file:org.thingsboard.server.dao.alarm.CassandraAlarmDao.java
@Override public ListenableFuture<List<AlarmInfo>> findAlarms(TenantId tenantId, AlarmQuery query) { log.trace("Try to find alarms by entity [{}], searchStatus [{}], status [{}] and pageLink [{}]", query.getAffectedEntityId(), query.getSearchStatus(), query.getStatus(), query.getPageLink()); EntityId affectedEntity = query.getAffectedEntityId(); String searchStatusName;// w w w .j a v a 2 s .c om if (query.getSearchStatus() == null && query.getStatus() == null) { searchStatusName = AlarmSearchStatus.ANY.name(); } else if (query.getSearchStatus() != null) { searchStatusName = query.getSearchStatus().name(); } else { searchStatusName = query.getStatus().name(); } String relationType = BaseAlarmService.ALARM_RELATION_PREFIX + searchStatusName; ListenableFuture<List<EntityRelation>> relations = relationDao.findRelations(tenantId, affectedEntity, relationType, RelationTypeGroup.ALARM, EntityType.ALARM, query.getPageLink()); return Futures.transformAsync(relations, input -> { List<ListenableFuture<AlarmInfo>> alarmFutures = new ArrayList<>(input.size()); for (EntityRelation relation : input) { alarmFutures.add( Futures.transform(findAlarmByIdAsync(tenantId, relation.getTo().getId()), AlarmInfo::new)); } return Futures.successfulAsList(alarmFutures); }); }
From source file:org.opendaylight.openflowplugin.applications.frsync.impl.strategy.SyncPlanPushStrategyIncrementalImpl.java
@Override public ListenableFuture<RpcResult<Void>> executeSyncStrategy(ListenableFuture<RpcResult<Void>> resultVehicle, final SynchronizationDiffInput diffInput, final SyncCrudCounters counters) { final InstanceIdentifier<FlowCapableNode> nodeIdent = diffInput.getNodeIdent(); final NodeId nodeId = PathUtil.digNodeId(nodeIdent); /* Tables - have to be pushed before groups */ // TODO enable table-update when ready //resultVehicle = updateTableFeatures(nodeIdent, configTree); resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() { @Override/*from w w w. java 2s.com*/ public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception { if (!input.isSuccessful()) { //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input); //final ListenableFuture<RpcResult<Void>> singleVoidUpdateResult = Futures.transform( // Futures.asList Arrays.asList(input, output), // ReconcileUtil.<UpdateFlowOutput>createRpcResultCondenser("TODO")); } return addMissingGroups(nodeId, nodeIdent, diffInput.getGroupsToAddOrUpdate(), counters); } }); Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "addMissingGroups")); resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() { @Override public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception { if (!input.isSuccessful()) { //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input); } return addMissingMeters(nodeId, nodeIdent, diffInput.getMetersToAddOrUpdate(), counters); } }); Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "addMissingMeters")); resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() { @Override public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception { if (!input.isSuccessful()) { //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input); } return addMissingFlows(nodeId, nodeIdent, diffInput.getFlowsToAddOrUpdate(), counters); } }); Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "addMissingFlows")); resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() { @Override public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception { if (!input.isSuccessful()) { //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input); } return removeRedundantFlows(nodeId, nodeIdent, diffInput.getFlowsToRemove(), counters); } }); Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "removeRedundantFlows")); resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() { @Override public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception { if (!input.isSuccessful()) { //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input); } return removeRedundantMeters(nodeId, nodeIdent, diffInput.getMetersToRemove(), counters); } }); Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "removeRedundantMeters")); resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() { @Override public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception { if (!input.isSuccessful()) { //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input); } return removeRedundantGroups(nodeId, nodeIdent, diffInput.getGroupsToRemove(), counters); } }); Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "removeRedundantGroups")); return resultVehicle; }
From source file:com.linkedin.pinot.server.request.ScheduledRequestHandler.java
@Override public ListenableFuture<byte[]> processRequest(ChannelHandlerContext channelHandlerContext, ByteBuf request) { final long queryStartTime = System.nanoTime(); serverMetrics.addMeteredGlobalValue(ServerMeter.QUERIES, 1); LOGGER.debug("Processing request : {}", request); byte[] byteArray = new byte[request.readableBytes()]; request.readBytes(byteArray);//from w ww .j ava2 s .c o m SerDe serDe = new SerDe(new TCompactProtocol.Factory()); final InstanceRequest instanceRequest = new InstanceRequest(); if (!serDe.deserialize(instanceRequest, byteArray)) { LOGGER.error("Failed to deserialize query request from broker ip: {}", ((InetSocketAddress) channelHandlerContext.channel().remoteAddress()).getAddress() .getHostAddress()); DataTable result = new DataTable(); result.addException(QueryException.INTERNAL_ERROR); serverMetrics.addMeteredGlobalValue(ServerMeter.REQUEST_DESERIALIZATION_EXCEPTIONS, 1); return Futures.immediateFuture(serializeDataTable(null, serverMetrics, result, queryStartTime)); } long deserializationEndTime = System.nanoTime(); final BrokerRequest brokerRequest = instanceRequest.getQuery(); serverMetrics.addPhaseTiming(brokerRequest, ServerQueryPhase.REQUEST_DESERIALIZATION, deserializationEndTime - queryStartTime); LOGGER.debug("Processing requestId:{},request={}", instanceRequest.getRequestId(), instanceRequest); final QueryRequest queryRequest = new QueryRequest(instanceRequest); String brokerId = instanceRequest.isSetBrokerId() ? instanceRequest.getBrokerId() : ((InetSocketAddress) channelHandlerContext.channel().remoteAddress()).getAddress() .getHostAddress(); // we will set the ip address as client id. This is good enough for start. // Ideally, broker should send it's identity as part of the request queryRequest.setClientId(brokerId); final long schedulerSubmitTime = System.nanoTime(); ListenableFuture<DataTable> queryTask = queryScheduler.submit(queryRequest); // following future will provide default response in case of uncaught // exceptions from query processing ListenableFuture<DataTable> queryResponse = Futures.catching(queryTask, Throwable.class, new Function<Throwable, DataTable>() { @Nullable @Override public DataTable apply(@Nullable Throwable input) { // this is called iff queryTask fails with unhandled exception serverMetrics.addMeteredGlobalValue(ServerMeter.UNCAUGHT_EXCEPTIONS, 1); DataTable result = new DataTable(); result.addException(QueryException.INTERNAL_ERROR); return result; } }); // transform the DataTable to serialized byte[] to send back to broker ListenableFuture<byte[]> serializedQueryResponse = Futures.transform(queryResponse, new Function<DataTable, byte[]>() { @Nullable @Override public byte[] apply(@Nullable DataTable instanceResponse) { long totalNanos = System.nanoTime() - schedulerSubmitTime; serverMetrics.addPhaseTiming(brokerRequest, ServerQueryPhase.QUERY_PROCESSING, totalNanos); return serializeDataTable(instanceRequest, serverMetrics, instanceResponse, queryStartTime); } }); return serializedQueryResponse; }