private void queuedWrite0(WriteOptions options, String path, ByteBuf data, CompletableFuture<Void> cf) {
        CompletableFuture<Void> attemptCf = new CompletableFuture<>();
        AsyncTask task = new AsyncTask(
            options.requestTime(),
            options.throttleStrategy(),
            () -> write0(options, path, data, attemptCf, cf),
            attemptCf,
            () -> (long) data.readableBytes()
        );
        writeTasks.add(task);
        maybeRunNextWriteTask();
    }
Put an object to the specified path.

@param options   options (or context) about the write operation
@param path      the path to put the object
@param data      the data to put, it will be released once the finalCf is done
@param attemptCf the CompletableFuture to complete when a single attempt is done
@param finalCf   the CompletableFuture to complete when the write operation is done
s3stream/src/main/java/com/automq/stream/s3/operator/AbstractObjectStorage.java