code: public QueueItem txnPollReserve(long reservedOfferId, String transactionId) {
          QueueItem item = getItemQueue().peek();
          if (item == null) {
              TxQueueItem txItem = txMap.remove(reservedOfferId);
              if (txItem == null) {
                  return null;
              }
              item = new QueueItem(this, txItem.getItemId(), txItem.getData());
              return item;
          }
          if (store.isEnabled() && item.getData() == null) {
              try {
                  load(item);
              } catch (Exception e) {
                  throw new HazelcastException(e);
              }
          }
          getItemQueue().poll();
          txMap.put(item.getItemId(), new TxQueueItem(item).setPollOperation(true).setTransactionId(transactionId));
          return item;
      }
docs: Tries to obtain an item by removing the head of the
  queue or removing an item previously reserved by invoking
  {@link #txnOfferReserve(String)} with {@code reservedOfferId}.
  <p>
  If the queue item does not have data in-memory it will load the
  data from the queue store if the queue store is configured and enabled.
  
  @param reservedOfferId the ID of the reserved item to be returned if the queue is empty
  @param transactionId   the transaction ID for which this poll is invoked
  @return the head of the queue or a reserved item with the {@code reservedOfferId} if there is any