private ProvisioningPlan getUpdatesInternal(Collection<ProducerSpec> producers) throws ProvisioningException { final ProvisioningPlan plan = ProvisioningPlan.builder(); updatesTracker = getUpdatesTracker(); updatesTracker.starting(producers.size()); for(ProducerSpec producer : producers) { updatesTracker.processing(producer); final FeaturePackUpdatePlan fpPlan = getFeaturePackUpdate(producer); if(!fpPlan.isEmpty()) { plan.update(fpPlan); } updatesTracker.processed(producer); } updatesTracker.complete(); return plan; }