docs: boolean offerInternal(Data data, long timeout) {
          TxnReserveOfferOperation operation
                  = new TxnReserveOfferOperation(name, timeout, offeredQueue.size(), tx.getTxnId());
          operation.setCallerUuid(tx.getOwnerUuid());
          try {
              Future<Long> future = invoke(operation);
              Long itemId = future.get();
              if (itemId != null) {
                  if (!itemIdSet.add(itemId)) {
                      throw new TransactionException("Duplicate itemId: " + itemId);
                  }
                  offeredQueue.offer(new QueueItem(null, itemId, data));
                  TxnOfferOperation txnOfferOperation = new TxnOfferOperation(name, itemId, data);
                  putToRecord(txnOfferOperation);
                  return true;
              }
          } catch (Throwable t) {
              throw ExceptionUtil.rethrow(t);
          }
          return false;
      }