@PreDestroy public synchronized void destroy() { for (MemoryPool pool : pools) { String objectName = ObjectNames.builder(MemoryPool.class, pool.getId().toString()).build(); try { exporter.unexport(objectName); } catch (JmxException e) { // ignored } } pools.clear(); } }
private synchronized void addPool(MemoryPool pool) { try { String objectName = ObjectNames.builder(MemoryPool.class, pool.getId().toString()).build(); exporter.export(objectName, pool); pools.add(pool); } catch (JmxException e) { // ignored } }
public synchronized void setMemoryPool(MemoryPool pool) { requireNonNull(pool, "pool is null"); if (pool.getId().equals(memoryPool.getId())) { // Don't unblock our tasks and thrash the pools, if this is a no-op return; } MemoryPool originalPool = memoryPool; long originalReserved = reserved; memoryPool = pool; ListenableFuture<?> future = pool.reserve(queryId, reserved); Futures.addCallback(future, new FutureCallback<Object>() { @Override public void onSuccess(Object result) { originalPool.free(queryId, originalReserved); // Unblock all the tasks, if they were waiting for memory, since we're in a new pool. taskContexts.stream().forEach(TaskContext::moreMemoryAvailable); } @Override public void onFailure(Throwable t) { originalPool.free(queryId, originalReserved); // Unblock all the tasks, if they were waiting for memory, since we're in a new pool. taskContexts.stream().forEach(TaskContext::moreMemoryAvailable); } }); }
@PreDestroy public synchronized void destroy() { for (MemoryPool pool : pools) { String objectName = ObjectNames.builder(MemoryPool.class, pool.getId().toString()).build(); try { exporter.unexport(objectName); } catch (JmxException e) { // ignored } } pools.clear(); } }
private synchronized void addPool(MemoryPool pool) { try { String objectName = ObjectNames.builder(MemoryPool.class, pool.getId().toString()).build(); exporter.export(objectName, pool); pools.add(pool); } catch (JmxException e) { // ignored } }