1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

MCOL-498. Segment files extension uses fallocate() now to optimize load put on SSD disks.

This commit is contained in:
Roman Nozdrin
2018-02-28 19:20:16 +03:00
parent 8a7ccd7d93
commit 1d9f47a55c
13 changed files with 90 additions and 7 deletions

View File

@ -279,4 +279,21 @@ int BufferedFile::close()
return ret;
}
int BufferedFile::fallocate(int mode, off64_t offset, off64_t length)
{
int ret = 0;
int savedErrno = 0;
ret = ::fallocate( fileno(m_fp), mode, offset, length );
savedErrno = errno;
if ( ret == -1 && IDBLogger::isEnabled() )
{
IDBLogger::logNoArg(m_fname, this, "fallocate", errno);
}
errno = savedErrno;
return ret;
}
}

View File

@ -50,6 +50,7 @@ public:
/* virtual */ off64_t tell();
/* virtual */ int flush();
/* virtual */ time_t mtime();
/* virtual */ int fallocate(int mode, off64_t offset, off64_t length);
protected:
/* virtual */

View File

@ -186,6 +186,12 @@ public:
*/
virtual time_t mtime() = 0;
/**
* The fallocate() method returns the modification time of the file in
* seconds. Returns -1 on error.
*/
virtual int fallocate(int mode, off64_t offset, off64_t length) = 0;
int colWidth()
{
return m_fColWidth;

View File

@ -329,4 +329,21 @@ int UnbufferedFile::close()
return ret;
}
int UnbufferedFile::fallocate(int mode, off64_t offset, off64_t length)
{
int ret = 0;
int savedErrno = 0;
ret = ::fallocate( m_fd, mode, offset, length );
savedErrno = errno;
if ( ret == -1 && IDBLogger::isEnabled() )
{
IDBLogger::logNoArg(m_fname, this, "fallocate", errno);
}
errno = savedErrno;
return ret;
}
}

View File

@ -47,6 +47,7 @@ public:
/* virtual */ off64_t tell();
/* virtual */ int flush();
/* virtual */ time_t mtime();
/* virtual */ int fallocate(int mode, off64_t offset, off64_t length);
protected:
/* virtual */