/** * Proactively try to compute the solver asynchronously, if not already computed. * Does not block. */ public void compute() { // Make sure only one attempts to build at one time if (solverUpdating.compareAndSet(false, true)) { executor.execute(LoggingCallable.log(() -> { try { log.info("Computing cached solver"); // Not as much hurry if one already exists boolean lowPriority = solver.get() != null; Solver newYTYSolver = LinearSystemSolver.getSolver(vectorPartitions.getVTV(lowPriority)); if (newYTYSolver != null) { log.info("Computed new solver {}", newYTYSolver); solver.set(newYTYSolver); } } finally { // Allow any threads waiting for initial model to proceed. // It's possible the solver is still null here if there is no input. solverInitialized.countDown(); solverUpdating.set(false); } }).asRunnable()); } }
public static <V> LoggingCallable<V> log(Callable<V> delegate) { return new LoggingCallable<>(delegate); }
public static LoggingCallable<Void> log(AllowExceptionSupplier delegate) { return log(() -> { delegate.get(); return null; }); }
@Test public void testAsRunnable() { AtomicInteger a = new AtomicInteger(); LoggingCallable.log(() -> a.set(3)).asRunnable().run(); assertEquals(3, a.get()); }
public static LoggingCallable<Void> log(AllowExceptionSupplier delegate) { return log(() -> { delegate.get(); return null; }); }
public static <V> LoggingCallable<V> log(Callable<V> delegate) { return new LoggingCallable<>(delegate); }
new Thread(LoggingCallable.log(() -> { try { }).asRunnable(), "OryxServingLayerUpdateConsumerThread").start();
new Thread(LoggingCallable.log(() -> { try { modelManager.consume(consumerIterator, hadoopConf); close(); }).asRunnable(), "OryxSpeedLayerUpdateConsumerThread").start();
new Thread(LoggingCallable.log(consumeInput).asRunnable(), "ConsumeInputThread").start();
new Thread(LoggingCallable.log(consumeInput).asRunnable(), "ConsumeInputThread").start();
new Thread(LoggingCallable.log(consumeUpdate).asRunnable(), "ConsumeUpdateThread").start();
new Thread(LoggingCallable.log(consumeTopic).asRunnable(), "ConsumeTopicThread").start();
new Thread(LoggingCallable.log(consumeTopic).asRunnable(), "ConsumeTopicThread").start();
/** * Proactively try to compute the solver asynchronously, if not already computed. * Does not block. */ public void compute() { // Make sure only one attempts to build at one time if (solverUpdating.compareAndSet(false, true)) { executor.execute(LoggingCallable.log(() -> { try { log.info("Computing cached solver"); // Not as much hurry if one already exists boolean lowPriority = solver.get() != null; Solver newYTYSolver = LinearSystemSolver.getSolver(vectorPartitions.getVTV(lowPriority)); if (newYTYSolver != null) { log.info("Computed new solver {}", newYTYSolver); solver.set(newYTYSolver); } } finally { // Allow any threads waiting for initial model to proceed. // It's possible the solver is still null here if there is no input. solverInitialized.countDown(); solverUpdating.set(false); } }).asRunnable()); } }
new Thread(LoggingCallable.log(() -> { try { modelManager.consume(consumerIterator, hadoopConf); close(); }).asRunnable(), "OryxSpeedLayerUpdateConsumerThread").start();