code: private boolean updateMemoryReservation()
      {
          // Operator/driver will be blocked on memory after we call localUserMemoryContext.setBytes().
          // If memory is not available, once we return, this operator will be blocked until memory is available.
          long memorySizeInBytes = groupByHash.map(GroupByHash::getEstimatedSize).orElse(0L) + partitionRowCount.sizeOf();
          localUserMemoryContext.setBytes(memorySizeInBytes);
          // If memory is not available, inform the caller that we cannot proceed for allocation.
          return operatorContext.isWaitingForMemory().isDone();
      }
docs: The following implementation is a hybrid model, where the push model is going to call the pull model causing reentrancy