[Tarantool-patches] [PATCH] fio/coio: handle partial writes
Cyrill Gorcunov
gorcunov at gmail.com
Fri May 15 12:00:44 MSK 2020
On Wed, May 06, 2020 at 08:08:18PM +0300, Alexander Turenko wrote:
> > issue https://github.com/tarantool/tarantool/issues/4651
> > branch gorcunov/gh-4651-partial-write
>
> > diff --git a/src/lib/core/coio_file.c b/src/lib/core/coio_file.c
> > index e2345567c..e290214bc 100644
> > --- a/src/lib/core/coio_file.c
> > +++ b/src/lib/core/coio_file.c
> > @@ -164,10 +164,30 @@ coio_file_close(int fd)
> > ssize_t
> > coio_pwrite(int fd, const void *buf, size_t count, off_t offset)
> > {
>
> In Febrary ([1]) we start discussing whether the loop should be in fio
> or in coio. coio_p?write() returns amount of written bytes, so it seems
> logical to keep it performing one write and move the loop to
> src/lua/fio.c.
>
> To be honest, I don't sure here. If you have a reason to keep the logic
> here, please, explain it.
Because lua interface should not dive into low-level coio_ engine, moreover
implementing it at this level we'are allowed to reuse coio_ helpers in
future. In turn if we implement this on fio level we can't reuse it anywhere
outside.
> I'll CC Vlad, maybe he has more strong vision here.
>
> [1]: https://lists.tarantool.org/pipermail/tarantool-patches/2020-February/014403.html
>
> > @@ -201,6 +221,11 @@ static void
> > coio_do_write(eio_req *req)
> > {
> > struct coio_file_task *eio = (struct coio_file_task *)req->data;
> > +
> > + ERROR_INJECT(ERRINJ_COIO_WRITE_CHUNK, {
> > + eio->write.count = 1;
> > + });
>
> Why not set it right in coio_write() to don't spread the logic?
Because the error should happen as close to native write call
as possible to simulate real behaviour.
So I rebased the patch on latest master and pushed it back.
More information about the Tarantool-patches
mailing list