@Override public void close() { if (closed.compareAndSet(false, true)) { // wait for queue to empty and prevent anything else from being enqueued semaphore.acquireUninterruptibly(semaphoreSize); // wait for all asynchronously committing transactions to complete commiting.waitUntilZero(); if (executor != null) { executor.shutdown(); while (!executor.isTerminated()) { try { executor.awaitTermination(3, TimeUnit.SECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } } } if (exceptionRef.get() != null) { throw new RuntimeException(exceptionRef.get()); } // wait for any async mutations that transactions write to flush env.getSharedResources().getBatchWriter().waitForAsyncFlush(); } } }
void writeMutation(Mutation m) { writeMutations(Collections.singletonList(m)); }
void writeMutationAsync(Mutation m) { writeMutationsAsync(Collections.singletonList(m)); }
CompletableFuture<Void> writeMutationsAsyncFuture(Mutation m) { return writeMutationsAsyncFuture(Collections.singleton(m)); }
void deleteWeakRow() { if (weakNotification != null) { env.getSharedResources().getBatchWriter() .writeMutation(weakNotification.newDelete(env, startTs)); } }
public SharedResources(Environment env) throws TableNotFoundException { this.env = env; curator = CuratorUtil.newAppCurator(env.getConfiguration()); curator.start(); int numTservers = env.getConnector().instanceOperations().getTabletServers().size(); int numBWThreads = FluoConfigurationImpl.getNumBWThreads(env.getConfiguration(), numTservers); bw = env.getConnector().createBatchWriter(env.getTable(), new BatchWriterConfig().setMaxWriteThreads(numBWThreads)); sbw = new SharedBatchWriter(bw); int numCWThreads = FluoConfigurationImpl.getNumCWThreads(env.getConfiguration(), numTservers); cw = env.getConnector().createConditionalWriter(env.getTable(), new ConditionalWriterConfig() .setAuthorizations(env.getAuthorizations()).setMaxWriteThreads(numCWThreads)); bulkCw = env.getConnector().createConditionalWriter(env.getTable(), new ConditionalWriterConfig() .setAuthorizations(env.getAuthorizations()).setMaxWriteThreads(numCWThreads)); txInfoCache = new TxInfoCache(env); visCache = new VisibilityCache(env.getConfiguration()); metricRegistry = new MetricRegistry(); int commitThreads = env.getConfiguration().getInt(FluoConfigurationImpl.ASYNC_COMMIT_THREADS, FluoConfigurationImpl.ASYNC_COMMIT_THREADS_DEFAULT); asyncCommitExecutor = FluoExecutors.newFixedThreadPool(commitThreads, "async-commits"); commitThreads = env.getConfiguration().getInt(FluoConfigurationImpl.SYNC_COMMIT_THREADS, FluoConfigurationImpl.SYNC_COMMIT_THREADS_DEFAULT); syncCommitExecutor = FluoExecutors.newFixedThreadPool(commitThreads, "sync-commits"); acw = new AsyncConditionalWriter(env, cw); bulkAcw = new AsyncConditionalWriter(env, bulkCw); }
bulkAcw.close(); bulkCw.close(); sbw.close(); try { bw.close();
.writeMutationAsync(notification.newDelete(env)); return true;
CompletableFuture<Void> writeMutationsAsyncFuture(Mutation m) { return writeMutationsAsyncFuture(Collections.singleton(m)); }
void deleteWeakRow() { if (weakNotification != null) { env.getSharedResources().getBatchWriter() .writeMutation(weakNotification.newDelete(env, startTs)); } }
public SharedResources(Environment env) throws TableNotFoundException { this.env = env; curator = CuratorUtil.newAppCurator(env.getConfiguration()); curator.start(); int numTservers = env.getAccumuloClient().instanceOperations().getTabletServers().size(); int numBWThreads = FluoConfigurationImpl.getNumBWThreads(env.getConfiguration(), numTservers); bw = env.getAccumuloClient().createBatchWriter(env.getTable(), new BatchWriterConfig().setMaxWriteThreads(numBWThreads)); sbw = new SharedBatchWriter(bw); int numCWThreads = FluoConfigurationImpl.getNumCWThreads(env.getConfiguration(), numTservers); cw = env.getAccumuloClient().createConditionalWriter(env.getTable(), new ConditionalWriterConfig().setAuthorizations(env.getAuthorizations()) .setMaxWriteThreads(numCWThreads)); bulkCw = env.getAccumuloClient().createConditionalWriter(env.getTable(), new ConditionalWriterConfig().setAuthorizations(env.getAuthorizations()) .setMaxWriteThreads(numCWThreads)); txInfoCache = new TxInfoCache(env); visCache = new VisibilityCache(env.getConfiguration()); metricRegistry = new MetricRegistry(); int commitThreads = env.getConfiguration().getInt(FluoConfigurationImpl.ASYNC_COMMIT_THREADS, FluoConfigurationImpl.ASYNC_COMMIT_THREADS_DEFAULT); asyncCommitExecutor = FluoExecutors.newFixedThreadPool(commitThreads, "async-commits"); commitThreads = env.getConfiguration().getInt(FluoConfigurationImpl.SYNC_COMMIT_THREADS, FluoConfigurationImpl.SYNC_COMMIT_THREADS_DEFAULT); syncCommitExecutor = FluoExecutors.newFixedThreadPool(commitThreads, "sync-commits"); acw = new AsyncConditionalWriter(env, cw); bulkAcw = new AsyncConditionalWriter(env, bulkCw); }
bulkAcw.close(); bulkCw.close(); sbw.close(); try { bw.close();
.writeMutationAsync(notification.newDelete(env)); return true;
@Override public void close() { if (closed.compareAndSet(false, true)) { // wait for queue to empty and prevent anything else from being enqueued semaphore.acquireUninterruptibly(semaphoreSize); // wait for all asynchronously committing transactions to complete commiting.waitUntilZero(); if (executor != null) { executor.shutdown(); while (!executor.isTerminated()) { try { executor.awaitTermination(3, TimeUnit.SECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } } } if (exceptionRef.get() != null) { throw new RuntimeException(exceptionRef.get()); } // wait for any async mutations that transactions write to flush env.getSharedResources().getBatchWriter().waitForAsyncFlush(); } } }
@Override CompletableFuture<Boolean> getMainOp(CommitData cd) { return env.getSharedResources().getBatchWriter() .writeMutationsAsyncFuture(createMutations(cd)).thenApply(v -> true); }
void writeMutation(Mutation m) { writeMutations(Collections.singletonList(m)); }
void writeMutationAsync(Mutation m) { writeMutationsAsync(Collections.singletonList(m)); }
@Override public void commit() { super.commit(); // wait for any async mutations that transaction write to flush env.getSharedResources().getBatchWriter().waitForAsyncFlush(); } };
@Override CompletableFuture<Boolean> getMainOp(CommitData cd) { return env.getSharedResources().getBatchWriter() .writeMutationsAsyncFuture(createMutations(cd)).thenApply(v -> true); }
env.getSharedResources().getBatchWriter().writeMutations(new ArrayList<>(mutations.values()));