From: Vladimir Davydov <vdavydov.dev@gmail.com> To: Konstantin Osipov <kostja@tarantool.org> Cc: tarantool-patches@freelists.org Subject: Re: [PATCH v2 2/4] wal: preallocate disk space before writing rows Date: Wed, 24 Oct 2018 12:54:18 +0300 [thread overview] Message-ID: <20181024095418.g22olfzylc6zaqs5@esperanza> (raw) In-Reply-To: <20181023183322.GB29694@chai> On Tue, Oct 23, 2018 at 09:33:22PM +0300, Konstantin Osipov wrote: > * Vladimir Davydov <vdavydov.dev@gmail.com> [18/10/23 20:30]: > > This function introduces a new xlog method xlog_fallocate() that makes > > sure that the requested amount of disk space is available at the current > > write position. It does that with posix_fallocate(). The new method is > > called before writing anything to WAL, see wal_fallocate(). In order not > > to invoke the system call too often, wal_fallocate() allocates disk > > space in big chunks (1 MB). > > > > The reason why I'm doing this is that I want to have a single and > > clearly defined point in the code to handle ENOSPC errors, where > > I could delete old WALs and retry (this is what #3397 is about). > > > > Needed for #3397 > > Please consider comment about member names. OK, I'll try to take into account your input and come up with better names in the next patch version. > > @@ -1378,6 +1403,17 @@ xlog_write_eof(struct xlog *l) > > diag_set(ClientError, ER_INJECTION, "xlog write injection"); > > return -1; > > }); > > + > > + /* > > + * Free disk space preallocated with xlog_fallocate(). > > + * Don't write the eof marker if this fails, otherwise > > + * we'll get "data after eof marker" error on recovery. > > I would simply remove this check - I don't see how it's useful as > long as we never append to an existing xlog. > Urgh, having a 1MB of 0 at the end of an xlog file looks ugly to me, espcially if the xlog is small. IMO this doesn't increase the complexity of the patch so we'd better leave it as is. > > + */ > > + if (l->alloc_len > 0 && ftruncate(l->fd, l->offset) < 0) { > > + diag_set(SystemError, "ftruncate() failed"); > > + return -1; > > + } > > + > > if (fio_writen(l->fd, &eof_marker, sizeof(eof_marker)) < 0) { > > diag_set(SystemError, "write() failed"); > > return -1; > > @@ -1793,6 +1829,15 @@ xlog_cursor_next_tx(struct xlog_cursor *i) > > return -1; > > if (rc > 0) > > return 1; > > + if (load_u32(i->rbuf.rpos) == 0) { > > + /* > > + * Space preallocated with xlog_fallocate(). > > + * Treat as eof and clear the buffer. > > + */ > > + i->read_offset -= ibuf_used(&i->rbuf); > > + ibuf_reset(&i->rbuf); > > Especially since you added this. > > > + return 1; > > + }
next prev parent reply other threads:[~2018-10-24 9:54 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-10-23 17:26 [PATCH v2 0/4] Delete old WAL files if running out of disk space Vladimir Davydov 2018-10-23 17:26 ` [PATCH v2 1/4] xlog: turn use_coio argument of xdir_collect_garbage to flags Vladimir Davydov 2018-10-23 18:17 ` Konstantin Osipov 2018-10-24 11:21 ` Vladimir Davydov 2018-10-23 17:26 ` [PATCH v2 2/4] wal: preallocate disk space before writing rows Vladimir Davydov 2018-10-23 18:33 ` Konstantin Osipov 2018-10-24 9:54 ` Vladimir Davydov [this message] 2018-10-23 17:26 ` [PATCH v2 3/4] wal: notify watchers about wal file removal Vladimir Davydov 2018-10-23 17:26 ` [PATCH v2 4/4] wal: delete old wal files when running out of disk space Vladimir Davydov 2018-10-23 18:46 ` Konstantin Osipov 2018-10-24 9:51 ` Vladimir Davydov 2018-10-24 16:53 ` Konstantin Osipov 2018-10-25 8:31 ` Vladimir Davydov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20181024095418.g22olfzylc6zaqs5@esperanza \ --to=vdavydov.dev@gmail.com \ --cc=kostja@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [PATCH v2 2/4] wal: preallocate disk space before writing rows' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox