private GeodeCacheFacade getFacadeForResourceManagerOps(final boolean simulate) throws Exception { final GemFireCacheImpl mockCache = mock(GemFireCacheImpl.class); final InternalResourceManager mockRM = mock(InternalResourceManager.class); final RebalanceFactory mockRebalanceFactory = mock(RebalanceFactory.class); final RebalanceOperation mockRebalanceOperation = mock(RebalanceOperation.class); final RebalanceResults mockRebalanceResults = mock(RebalanceResults.class); when(mockCache.isClosed()).thenReturn(false); when(mockCache.getResourceManager()).thenReturn(mockRM); when(mockRM.createRebalanceFactory()).thenReturn(mockRebalanceFactory); when(mockRebalanceFactory.start()).thenReturn(mockRebalanceOperation); when(mockRebalanceFactory.simulate()).thenReturn(mockRebalanceOperation); when(mockRebalanceOperation.getResults()).thenReturn(mockRebalanceResults); if (simulate) when(mockRebalanceResults.getTotalBucketTransferBytes()).thenReturn(12345L); return new GeodeCacheFacade(mockCache); }
@Override public long getTotalTransferSize() { try { RebalanceOperation operation = getCache().getResourceManager().createRebalanceFactory().simulate(); RebalanceResults result = operation.getResults(); if (logger.isDebugEnabled()) { logger.debug("Rebalance estimate: RebalanceResultsImpl [TotalBucketCreateBytes=" + result.getTotalBucketCreateBytes() + ", TotalBucketCreatesCompleted=" + result.getTotalBucketCreatesCompleted() + ", TotalBucketTransferBytes=" + result.getTotalBucketTransferBytes() + ", TotalBucketTransfersCompleted=" + result.getTotalBucketTransfersCompleted() + ", TotalPrimaryTransfersCompleted=" + result.getTotalPrimaryTransfersCompleted() + "]"); } return result.getTotalBucketTransferBytes(); } catch (CancellationException e) { logger.info("Error while trying to estimate rebalance cost ", e); } catch (InterruptedException e) { logger.info("Error while trying to estimate rebalance cost ", e); } return 0; }
op = rbFactory.simulate(); } else { op = rbFactory.start();
op = manager.createRebalanceFactory().simulate(); result = ResultBuilder.buildResult(buildResultForRebalance(rebalanceResultData, op.getResults(), index, true, cache));
/** * Do a rebalance and verify balance was improved. If evictionPercentage > 0 (the default) then we * have heapLRU and this can cause simulate and rebalance results to differ if eviction kicks in * between. (See BUG 44899). */ public static void doRebalance() { ResourceManager resMan = cache.getResourceManager(); boolean heapEviction = (resMan.getEvictionHeapPercentage() > 0); RebalanceFactory factory = resMan.createRebalanceFactory(); try { RebalanceResults simulateResults = null; if (!heapEviction) { LogWriterUtils.getLogWriter().info("Calling rebalance simulate"); RebalanceOperation simulateOp = factory.simulate(); simulateResults = simulateOp.getResults(); } LogWriterUtils.getLogWriter().info("Starting rebalancing"); RebalanceOperation rebalanceOp = factory.start(); RebalanceResults rebalanceResults = rebalanceOp.getResults(); } catch (InterruptedException e) { Assert.fail("Interrupted", e); } }