docs: protected CompletableFuture<Map<Integer,ClientResponse>> callAllNodeNTProcedure(String procName, Object... params) {
          // only one of these at a time
          if (!m_outstandingAllHostProc.compareAndSet(false, true)) {
              throw new VoltAbortException(new IllegalStateException("Only one AllNodeNTProcedure operation can be running at a time."));
          }
  
          StoredProcedureInvocation invocation = new StoredProcedureInvocation();
          invocation.setProcName(procName);
          invocation.setParams(params);
          invocation.setClientHandle(m_id);
  
          final Iv2InitiateTaskMessage workRequest =
                  new Iv2InitiateTaskMessage(m_mailbox.getHSId(),
                                             m_mailbox.getHSId(),
                                             TransactionInfoBaseMessage.UNUSED_TRUNC_HANDLE,
                                             m_id,
                                             m_id,
                                             true,
                                             false,
                                             invocation,
                                             m_id,
                                             ClientInterface.NT_REMOTE_PROC_CID,
                                             false);
  
          m_allHostFut = new CompletableFuture<>();
          m_allHostResponses = new HashMap<>();
  
          // hold this lock while getting the count of live nodes
          // also held when
          long[] hsids;
          synchronized(m_allHostCallbackLock) {
              // collect the set of live client interface mailbox ids
              m_outstandingAllHostProcedureHostIds = VoltDB.instance().getHostMessenger().getLiveHostIds();
              // convert host ids to hsids
              hsids = m_outstandingAllHostProcedureHostIds.stream()
                      .mapToLong(hostId -> CoreUtils.getHSIdFromHostAndSite(hostId, HostMessenger.CLIENT_INTERFACE_SITE_ID))
                      .toArray();
          }
  
          // send the invocation to all live nodes
          // n.b. can't combine this step with above because sometimes the callbacks comeback so fast
          //  you get a concurrent modification exception
          for (long hsid : hsids) {
              m_mailbox.send(hsid, workRequest);
          }
  
          return m_allHostFut;
      }