private void beginTransaction(long producerId, long startOffset, long segmentBaseOffset) {
        int relativeOffset = (int) (startOffset - segmentBaseOffset);
        ProducerAppendInfo appendInfo = new ProducerAppendInfo(
                partition,
                producerId,
                ProducerStateEntry.empty(producerId),
                AppendOrigin.CLIENT,
                stateManager.maybeCreateVerificationStateEntry(producerId, 0, epoch)
        );
        LogOffsetMetadata firstOffsetMetadata = new LogOffsetMetadata(startOffset, segmentBaseOffset, 50 * relativeOffset);
        appendInfo.appendDataBatch(epoch, 0, 0, time.milliseconds(),
                firstOffsetMetadata, startOffset, true);
        stateManager.update(appendInfo);
    }
Test that marking a snapshot for deletion when the file has already been deleted
returns None instead of the SnapshotFile. The snapshot file should be removed from
the in-memory state of the ProducerStateManager. This scenario can occur during log
recovery when the intermediate ProducerStateManager instance deletes a file without
updating the state of the "real" ProducerStateManager instance which is passed to the Log.
storage/src/test/java/org/apache/kafka/storage/internals/log/ProducerStateManagerTest.java