Example usage for com.google.common.util.concurrent SettableFuture set

List of usage examples for com.google.common.util.concurrent SettableFuture set

Introduction

In this page you can find the example usage for com.google.common.util.concurrent SettableFuture set.

Prototype

@Override
    public boolean set(@Nullable V value) 

Source Link

Usage

From source file:com.continuuity.weave.zookeeper.ZKOperations.java

/**
 * Watch for the given path until it exists.
 * @param zkClient The {@link ZKClient} to use.
 * @param path A ZooKeeper path to watch for existent.
 *///from  w w w  . j  a  v a  2s .c o m
private static void watchExists(final ZKClient zkClient, final String path,
        final SettableFuture<String> completion) {
    Futures.addCallback(zkClient.exists(path, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (!completion.isDone()) {
                watchExists(zkClient, path, completion);
            }
        }
    }), new FutureCallback<Stat>() {
        @Override
        public void onSuccess(Stat result) {
            if (result != null) {
                completion.set(path);
            }
        }

        @Override
        public void onFailure(Throwable t) {
            completion.setException(t);
        }
    });
}

From source file:com.continuuity.loom.common.zookeeper.ZKClientExt.java

/**
 * Acts as {@link ZKClient#create(String, byte[], org.apache.zookeeper.CreateMode, boolean)} if node does not exist,
 * otherwise as {@link ZKClient#setData(String, byte[])}.
 *///ww  w .  j  a  va2  s  .  c  om
public static ListenableFuture<SetResult> createOrSet(final ZKClient zkClient, final String path,
        @Nullable final byte[] data, final CreateMode createMode, final boolean createParent) {
    final SettableFuture<SetResult> resultFuture = SettableFuture.create();

    final OperationFuture<String> createResult = zkClient.create(path, data, createMode, createParent);
    Futures.addCallback(createResult, new FutureCallback<String>() {
        private final FutureCallback<String> createCallback = this;

        @Override
        public void onSuccess(String result) {
            resultFuture.set(new SetResult(result, null));
        }

        @Override
        public void onFailure(Throwable t) {
            if (causedBy(t, KeeperException.NodeExistsException.class)) {
                OperationFuture<Stat> setDataResult = zkClient.setData(path, data);
                Futures.addCallback(setDataResult, new FutureCallback<Stat>() {
                    @Override
                    public void onSuccess(Stat result) {
                        resultFuture.set(new SetResult(null, result));
                    }

                    @Override
                    public void onFailure(Throwable t) {
                        if (causedBy(t, KeeperException.NoNodeException.class)) {
                            Futures.addCallback(zkClient.create(path, data, createMode, createParent),
                                    createCallback);
                            return;
                        }
                        resultFuture.setException(t);
                    }
                });
                return;
            }
            resultFuture.setException(t);
        }
    });

    return resultFuture;
}

From source file:io.datakernel.service.ServiceAdapters.java

/**
 * Returns factory which transforms ExecutorService to ConcurrentService. On starting it doing nothing, on stopping it shuts down ExecutorService.
 *//*from w w  w  .  j a  v  a  2  s  . com*/
public static ServiceAdapter<ExecutorService> forExecutorService() {
    return new ServiceAdapter<ExecutorService>() {
        @Override
        public Service toService(final ExecutorService executorService, final Executor executor) {
            return new Service() {
                @Override
                public ListenableFuture<?> start() {
                    return Futures.immediateFuture(null);
                }

                @Override
                public ListenableFuture<?> stop() {
                    final SettableFuture<?> future = SettableFuture.create();
                    executor.execute(new Runnable() {
                        @Override
                        public void run() {
                            executorService.shutdown();
                            future.set(null);
                        }
                    });
                    return future;
                }
            };
        }
    };
}

From source file:com.google.cloud.testing.BaseEmulatorHelper.java

private static int waitForProcess(final Process process, Duration timeout)
        throws InterruptedException, TimeoutException {
    if (process == null) {
        return 0;
    }/* w  w w  . java2  s  .c  o  m*/

    final SettableFuture<Integer> exitValue = SettableFuture.create();

    Thread waiter = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                exitValue.set(process.waitFor());
            } catch (InterruptedException e) {
                exitValue.setException(e);
            }
        }
    });
    waiter.start();

    try {
        return exitValue.get(timeout.toMillis(), TimeUnit.MILLISECONDS);
    } catch (ExecutionException e) {
        if (e.getCause() instanceof InterruptedException) {
            throw (InterruptedException) e.getCause();
        }
        throw new UncheckedExecutionException(e);
    } finally {
        waiter.interrupt();
    }
}

From source file:io.datakernel.service.ServiceAdapters.java

public static ServiceAdapter<Eventloop> forEventloop(final ThreadFactory threadFactory) {
    return new ServiceAdapter<Eventloop>() {
        @Override/* www.j a va  2s. c o  m*/
        public Service toService(final Eventloop eventloop, final Executor executor) {
            return new Service() {
                volatile SettableFuture<?> stopFuture;

                @Override
                public ListenableFuture<?> start() {
                    final SettableFuture<?> future = SettableFuture.create();
                    threadFactory.newThread(new Runnable() {
                        @Override
                        public void run() {
                            eventloop.keepAlive(true);
                            future.set(null);
                            eventloop.run();
                            if (stopFuture != null) {
                                stopFuture.set(null);
                            }
                        }
                    }).start();
                    return future;
                }

                @Override
                public ListenableFuture<?> stop() {
                    stopFuture = SettableFuture.create();
                    eventloop.execute(new Runnable() {
                        @Override
                        public void run() {
                            eventloop.keepAlive(false);
                        }
                    });
                    return stopFuture;
                }
            };
        }
    };
}

From source file:io.v.v23.InputChannels.java

private static <T> FutureCallback<T> newCallbackForDone(final InputChannel<T> channel,
        final SettableFuture<Void> future, final Executor executor) {
    return new FutureCallback<T>() {
        @Override//  w  ww  .  j av a  2  s .  c  o  m
        public void onSuccess(T result) {
            Futures.addCallback(channel.recv(), newCallbackForDone(channel, future, executor), executor);
        }

        @Override
        public void onFailure(Throwable t) {
            if (t instanceof EndOfFileException) {
                future.set(null);
            } else {
                future.setException(t);
            }
        }
    };
}

From source file:org.dcache.space.ReservationCaches.java

/**
 * Builds a loading cache for looking up space tokens by owner and
 * description./*from ww w  . j  a  v  a  2s.c o  m*/
 */
public static LoadingCache<GetSpaceTokensKey, long[]> buildOwnerDescriptionLookupCache(CellStub spaceManager,
        Executor executor) {
    return CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(30, SECONDS)
            .refreshAfterWrite(10, SECONDS).recordStats().build(new CacheLoader<GetSpaceTokensKey, long[]>() {
                @Override
                public long[] load(GetSpaceTokensKey key) throws Exception {
                    try {
                        return spaceManager.sendAndWait(createRequest(key)).getSpaceTokens();
                    } catch (TimeoutCacheException e) {
                        throw new SRMInternalErrorException("Space manager timeout", e);
                    } catch (InterruptedException e) {
                        throw new SRMInternalErrorException("Operation interrupted", e);
                    } catch (CacheException e) {
                        _log.warn("GetSpaceTokens failed with rc={} error={}", e.getRc(), e.getMessage());
                        throw new SRMException(
                                "GetSpaceTokens failed with rc=" + e.getRc() + " error=" + e.getMessage(), e);
                    }
                }

                private GetSpaceTokens createRequest(GetSpaceTokensKey key) {
                    GetSpaceTokens message = new GetSpaceTokens(key.description);
                    message.setSubject(
                            new Subject(true, key.principals, Collections.emptySet(), Collections.emptySet()));
                    return message;
                }

                @Override
                public ListenableFuture<long[]> reload(GetSpaceTokensKey key, long[] oldValue)
                        throws Exception {
                    final SettableFuture<long[]> future = SettableFuture.create();
                    CellStub.addCallback(spaceManager.send(createRequest(key)),
                            new AbstractMessageCallback<GetSpaceTokens>() {
                                @Override
                                public void success(GetSpaceTokens message) {
                                    future.set(message.getSpaceTokens());
                                }

                                @Override
                                public void failure(int rc, Object error) {
                                    CacheException exception = CacheExceptionFactory.exceptionOf(rc,
                                            Objects.toString(error, null));
                                    future.setException(exception);
                                }
                            }, executor);
                    return future;
                }
            });
}

From source file:io.datakernel.service.ServiceAdapters.java

/**
 * Returns factory which transforms Closeable object to ConcurrentService. On starting it doing nothing, on stopping it close Closeable.
 *///from ww  w.  jav  a 2  s .co m
public static ServiceAdapter<Closeable> forCloseable() {
    return new ServiceAdapter<Closeable>() {
        @Override
        public Service toService(final Closeable closeable, final Executor executor) {
            return new Service() {
                @Override
                public ListenableFuture<?> start() {
                    return Futures.immediateFuture(null);
                }

                @Override
                public ListenableFuture<?> stop() {
                    final SettableFuture<?> future = SettableFuture.create();
                    executor.execute(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                closeable.close();
                                future.set(null);
                            } catch (IOException e) {
                                future.setException(e);
                            }
                        }
                    });
                    return future;
                }
            };
        }
    };
}

From source file:org.dcache.space.ReservationCaches.java

/**
 * Build a loading cache for looking up space reservations by space token.
 *///from  w w  w. ja va  2s.c o m
public static LoadingCache<String, Optional<Space>> buildSpaceLookupCache(CellStub spaceManager,
        Executor executor) {
    return CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, MINUTES)
            .refreshAfterWrite(30, SECONDS).recordStats().build(new CacheLoader<String, Optional<Space>>() {
                @Override
                public Optional<Space> load(String token)
                        throws CacheException, NoRouteToCellException, InterruptedException {
                    Space space = spaceManager.sendAndWait(new GetSpaceMetaData(token)).getSpaces()[0];
                    return Optional.ofNullable(space);
                }

                @Override
                public ListenableFuture<Optional<Space>> reload(String token, Optional<Space> oldValue) {
                    final SettableFuture<Optional<Space>> future = SettableFuture.create();
                    CellStub.addCallback(spaceManager.send(new GetSpaceMetaData(token)),
                            new AbstractMessageCallback<GetSpaceMetaData>() {
                                @Override
                                public void success(GetSpaceMetaData message) {
                                    future.set(Optional.ofNullable(message.getSpaces()[0]));
                                }

                                @Override
                                public void failure(int rc, Object error) {
                                    CacheException exception = CacheExceptionFactory.exceptionOf(rc,
                                            Objects.toString(error, null));
                                    future.setException(exception);
                                }
                            }, executor);
                    return future;
                }
            });
}

From source file:org.dcache.space.ReservationCaches.java

/**
 * Cache queries to discover if a directory has the "WriteToken" tag set.
 *//*  w ww .ja v  a 2  s  .c om*/
public static LoadingCache<FsPath, java.util.Optional<String>> buildWriteTokenLookupCache(PnfsHandler pnfs,
        Executor executor) {
    return CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, MINUTES)
            .refreshAfterWrite(5, MINUTES).recordStats()
            .build(new CacheLoader<FsPath, java.util.Optional<String>>() {
                private java.util.Optional<String> writeToken(FileAttributes attr) {
                    StorageInfo info = attr.getStorageInfo();
                    return java.util.Optional.ofNullable(info.getMap().get("writeToken"));
                }

                @Override
                public java.util.Optional<String> load(FsPath path)
                        throws CacheException, NoRouteToCellException, InterruptedException {
                    return writeToken(pnfs.getFileAttributes(path, EnumSet.of(FileAttribute.STORAGEINFO)));
                }

                @Override
                public ListenableFuture<java.util.Optional<String>> reload(FsPath path,
                        java.util.Optional<String> old) {
                    PnfsGetFileAttributes message = new PnfsGetFileAttributes(path.toString(),
                            EnumSet.of(FileAttribute.STORAGEINFO));
                    SettableFuture<java.util.Optional<String>> future = SettableFuture.create();
                    CellStub.addCallback(pnfs.requestAsync(message),
                            new AbstractMessageCallback<PnfsGetFileAttributes>() {
                                @Override
                                public void success(PnfsGetFileAttributes message) {
                                    future.set(writeToken(message.getFileAttributes()));
                                }

                                @Override
                                public void failure(int rc, Object error) {
                                    CacheException exception = CacheExceptionFactory.exceptionOf(rc,
                                            Objects.toString(error, null));
                                    future.setException(exception);
                                }
                            }, executor);
                    return future;
                }
            });
}