public void releaseLockBatch(Object batchId, InternalDistributedMember owner)
      throws InterruptedException {
    if (logger.isTraceEnabled(LogMarker.DLS_VERBOSE)) {
      logger.trace(LogMarker.DLS_VERBOSE, "[DLockGrantor.releaseLockBatch]");
    }
    waitWhileInitializing();
    if (acquireDestroyReadLock(0)) {
      try {
        synchronized (batchLocks) {
          checkDestroyed();
          DLockBatch batch = batchLocks.remove(batchId);
          if (batch != null) {
            releaseReservation(batch);
          }
        }
      } finally {
        releaseDestroyReadLock();
      }
    } else {
      waitUntilDestroyed();
      checkDestroyed();
    }
  }
Releases the transaction optimized lock batch.
<p>
Acquires destroy read lock before synchronizing on {@link #batchLocks}.
If read lock not acquired, wait for the Grantor to be destroyed.

@param batchId the identify of the transaction lock batch to release
@param owner the member that has created and locked the lock batch
@throws LockGrantorDestroyedException if grantor is destroyed or interrupted
geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockGrantor.java