docs: protected Digest fetchDigestsFromAllMembersInSubPartition(final View view, MergeId merge_id) {
          final List<Address> current_mbrs=view.getMembers();
          
          // Optimization: if we're the only member, we don't need to multicast the get-digest message
          if(current_mbrs == null || current_mbrs.size() == 1 && current_mbrs.get(0).equals(gms.local_addr))
              return new MutableDigest(view.getMembersRaw())
                .set((Digest)gms.getDownProtocol().down(new Event(Event.GET_DIGEST, gms.local_addr)));
  
          Message get_digest_req=new Message().setFlag(Message.Flag.OOB, Message.Flag.INTERNAL)
            .putHeader(gms.getId(), new GMS.GmsHeader(GMS.GmsHeader.GET_DIGEST_REQ).mergeId(merge_id));
  
          long max_wait_time=gms.merge_timeout / 2; // gms.merge_timeout is guaranteed to be > 0, verified in init()
          digest_collector.reset(current_mbrs);
  
          gms.getDownProtocol().down(get_digest_req);
  
          // add my own digest first - the get_digest_req needs to be sent first *before* getting our own digest, so
          // we have that message in our digest !
          Digest digest=(Digest)gms.getDownProtocol().down(new Event(Event.GET_DIGEST, gms.local_addr));
          digest_collector.add(gms.local_addr, digest);
          digest_collector.waitForAllResponses(max_wait_time);
          if(log.isTraceEnabled()) {
              if(digest_collector.hasAllResponses())
                  log.trace("%s: fetched all digests for %s", gms.local_addr, current_mbrs);
              else
                  log.trace("%s: fetched incomplete digests (after timeout of %d) ms for %s",
                            gms.local_addr, max_wait_time, current_mbrs);
          }
  
          List<Address> valid_rsps=new ArrayList<>(current_mbrs);
          valid_rsps.removeAll(digest_collector.getMissing());
  
          Address[] tmp=new Address[valid_rsps.size()];
          valid_rsps.toArray(tmp);
          MutableDigest retval=new MutableDigest(tmp);
          Map<Address,Digest> responses=new HashMap<>(digest_collector.getResults());
          responses.values().forEach(retval::set);
          return retval;
      }