UV_USE_IO_URING does not update file handle position
I suspect possible regression. Not sure what version but must have been recent:
await stream.promises.pipeline(src, fs.createWriteStream(dstPath))
Will not create a full sized file. I suspect that since createWriteStream doesn't explicitly set position during writes it expects the file handle position to be properly updated, which does not seem to be the case with URING.
Yes, ordering in the handling of requests sent to the ring is not guaranteed. So you're right, the offset should be properly set when calling uv_fs_write().
I think we should throw in fs.write if position is not provided while UV_USE_IO_URING is enabled. Do we have any other such instances? net?
@nodejs/tsc I think this is so bad that we should just remove UV_USE_IO_URING until we figure out a way to fix it.
This should not be an issue once v1.49.0, which was just released, is used as it disables the SQPOLL ring by default.
Didn't we disable UV_USE_IO_URING by default everywhere?
Didn't we disable UV_USE_IO_URING by default everywhere?
Yes, referring to a security issue. But some users like us enable it without knowing that here be dragons.
@ronag wait, I'm not familiar with the internals of the streams. Can those uv_fs_write() ops happen in parallel or sequentially? If the latter, I think it should work.
They are sequential.
Ok, can you share a reproducer?
ping @ronag, I would like to help on this one.