@Override public void expect(ClusterState state, SchedulerDriver mockDriver) { Mockito.verify(mockDriver, Mockito.times(totalTimes)).suppressOffers(); }
/** * Issues a call to suppress offers, but only if the service does not already appear to be suppressed. * This should be invoked when the service(s) are all in an IDLE state, so that the offer stream may be temporarily * halted. */ void suppressIfActive() { if (isSuppressed) { // Service doesn't need offers, but offers are already suppressed. Avoid duplicate suppress call. return; } // Service doesn't need offers, and offers are not suppressed. Suppress. if (suppressEnabled) { LOGGER.info("Suppressing offers"); Driver.getInstance().suppressOffers(); Metrics.incrementSuppresses(); } else { LOGGER.info("Refraining from suppressing offers (disabled via DISABLE_SUPPRESS)"); } isSuppressed = true; }
private void suppressOrRevive() { boolean hasOperations = !planManager.getPlan().isComplete() || recoveryScheduler.hasOperations(); LOGGER.debug(hasOperations ? "Scheduler has operations to perform." : "Scheduler has no operations to perform."); if (hasOperations) { // Revive offers only if they were previously suppressed. if (cassandraState.isSuppressed()) { LOGGER.info("Reviving offers."); driver.reviveOffers(); cassandraState.setSuppressed(false); } } else { LOGGER.info("Suppressing offers."); driver.suppressOffers(); cassandraState.setSuppressed(true); } }
driver.suppressOffers(); offersSuppressed = true;
@Test public void dontSuppressWhenDisabled() { when(mockSchedulerConfig.isSuppressEnabled()).thenReturn(false); ReviveManager manager = getReviveManager(); manager.suppressIfActive(); verify(driver, never()).suppressOffers(); }
@Test public void dontSuppressWhenSuppressed() { ReviveManager manager = getReviveManager(); manager.suppressIfActive(); manager.suppressIfActive(); verify(driver, times(1)).suppressOffers(); }
@Test public void resSuppressOnOfferReceived() { ReviveManager manager = getReviveManager(); manager.suppressIfActive(); manager.notifyOffersReceived(); manager.suppressIfActive(); verify(driver, times(2)).suppressOffers(); }
@Test public void suppressRevive() { ReviveManager manager = new ReviveManager( TokenBucket.newBuilder().acquireInterval(Duration.ZERO).build(), mockSchedulerConfig); // Suppress: manager.suppressIfActive(); verify(driver, times(1)).suppressOffers(); // Revive: manager.requestReviveIfSuppressed(); manager.reviveIfRequested(); verify(driver, times(1)).reviveOffers(); // Revive again, because previous revive apparently didn't go through: manager.requestReviveIfSuppressed(); manager.reviveIfRequested(); verify(driver, times(2)).reviveOffers(); // Finally get an offer, un-suppress must've worked. manager.notifyOffersReceived(); // Now that we aren't suppressed, revive is not triggered by just needing offers: manager.requestReviveIfSuppressed(); manager.reviveIfRequested(); verify(driver, times(2)).reviveOffers(); // .. but still revives if specifically requested (due to new work): manager.requestRevive(); manager.reviveIfRequested(); verify(driver, times(3)).reviveOffers(); }