private Iterable<? extends CommittedBundle<?>> commitBundles(
     Iterable<? extends UncommittedBundle<?>> bundles) {
   ImmutableList.Builder<CommittedBundle<?>> completed = ImmutableList.builder();
   for (UncommittedBundle<?> inProgress : bundles) {
     AppliedPTransform<?, ?, ?> producing =
         inProgress.getPCollection().getProducingTransformInternal();
     TransformWatermarks watermarks = watermarkManager.getWatermarks(producing);
     CommittedBundle<?> committed =
         inProgress.commit(watermarks.getSynchronizedProcessingOutputTime());
     // Empty bundles don't impact watermarks and shouldn't trigger downstream execution, so
     // filter them out
     if (!Iterables.isEmpty(committed.getElements())) {
       completed.add(committed);
     }
   }
   return completed.build();
 }
 private void fireAvailableCallbacks(AppliedPTransform<?, ?, ?> producingTransform) {
   TransformWatermarks watermarks = watermarkManager.getWatermarks(producingTransform);
   callbackExecutor.fireForWatermark(producingTransform, watermarks.getOutputWatermark());
 }