diff options
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp | 2 | ||||
-rw-r--r-- | vespalib/src/tests/io/fileutil/fileutiltest.cpp | 55 | ||||
-rw-r--r-- | vespalib/src/tests/slaveproc/slaveproc_test.cpp | 2 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/io/fileutil.h | 59 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/time.cpp | 31 |
5 files changed, 34 insertions, 115 deletions
diff --git a/vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp b/vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp index 7e15885270c..280edf729b6 100644 --- a/vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp +++ b/vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp @@ -21,12 +21,14 @@ int main(int argc, char **argv) { } int retval = 0; +#ifdef __linux__ int err = posix_fadvise(fh, 0, 0, POSIX_FADV_DONTNEED); if (err != 0) { std::error_code ec(errno, std::system_category()); fprintf(stderr, "posix_fadvise failed: %s\n", ec.message().c_str()); retval = 3; } +#endif close(fh); return retval; } diff --git a/vespalib/src/tests/io/fileutil/fileutiltest.cpp b/vespalib/src/tests/io/fileutil/fileutiltest.cpp index 8345a8dcb99..b0a08f4e7fd 100644 --- a/vespalib/src/tests/io/fileutil/fileutiltest.cpp +++ b/vespalib/src/tests/io/fileutil/fileutiltest.cpp @@ -481,61 +481,6 @@ TEST("require that copy constructor and assignment for vespalib::File works") } } -TEST("require that vespalib::LazyFile works") -{ - // Copy constructor - { - LazyFile file("myfile", File::CREATE, true); - LazyFile file2(file); - EXPECT_EQUAL(file.getFlags(), file2.getFlags()); - EXPECT_EQUAL(file.autoCreateDirectories(), file2.autoCreateDirectories()); - } - // Assignment - { - LazyFile file("myfile", File::CREATE, true); - LazyFile file2("targetfile", File::READONLY); - file = file2; - EXPECT_EQUAL(file.getFlags(), file2.getFlags()); - EXPECT_EQUAL(file.autoCreateDirectories(), file2.autoCreateDirectories()); - } - // Lazily write - { - LazyFile file("myfile", File::CREATE, true); - file.write("foo", 3, 0); - } - // Lazy stat - { - LazyFile file("myfile", File::CREATE, true); - EXPECT_EQUAL(3, file.getFileSize()); - file.close(); - - LazyFile file2("myfile", File::CREATE, true); - FileInfo info = file2.stat(); - EXPECT_EQUAL(3, info._size); - EXPECT_EQUAL(true, info._plainfile); - } - - // Lazy read - { - LazyFile file("myfile", File::CREATE, true); - std::vector<char> buf(10, ' '); - EXPECT_EQUAL(3u, file.read(&buf[0], 10, 0)); - EXPECT_EQUAL(std::string("foo"), std::string(&buf[0], 3)); - } - // Lazy resize - { - LazyFile file("myfile", File::CREATE, true); - file.resize(5); - EXPECT_EQUAL(5, file.getFileSize()); - } - // Lazy get file descriptor - { - LazyFile file("myfile", File::CREATE, true); - int fd = file.getFileDescriptor(); - ASSERT_TRUE(fd != -1); - } -} - TEST("require that vespalib::symlink works") { // Target exists diff --git a/vespalib/src/tests/slaveproc/slaveproc_test.cpp b/vespalib/src/tests/slaveproc/slaveproc_test.cpp index 7a39d4f1c7b..547da991211 100644 --- a/vespalib/src/tests/slaveproc/slaveproc_test.cpp +++ b/vespalib/src/tests/slaveproc/slaveproc_test.cpp @@ -18,7 +18,7 @@ TEST("simple run, ignore output, timeout") { TEST("simple run") { std::string out; - EXPECT_TRUE(SlaveProc::run("echo -n foo", out)); + EXPECT_TRUE(SlaveProc::run("/bin/echo -n foo", out)); EXPECT_EQUAL(out, "foo"); } diff --git a/vespalib/src/vespa/vespalib/io/fileutil.h b/vespalib/src/vespa/vespalib/io/fileutil.h index 1507513dbbc..59994819600 100644 --- a/vespalib/src/vespa/vespalib/io/fileutil.h +++ b/vespalib/src/vespa/vespalib/io/fileutil.h @@ -209,65 +209,6 @@ public: }; /** - * @brief A File instance that automatically opens once needed. - */ -class LazyFile : public File { - int _flags; - bool _autoCreateDirectories; - -public: - typedef std::unique_ptr<LazyFile> UP; - - LazyFile(vespalib::stringref filename, int flags, - bool autoCreateDirs = false) - : File(filename), - _flags(flags), - _autoCreateDirectories(autoCreateDirs) {} - - LazyFile(LazyFile& other) - : File(other), - _flags(other._flags), - _autoCreateDirectories(other._autoCreateDirectories) {} - - LazyFile& operator=(LazyFile& other) { - File::operator=(other); - _flags = other._flags; - _autoCreateDirectories = other._autoCreateDirectories; - return *this; - } - - int getFlags() const { return _flags; } - void setFlags(int flags) { _flags = flags; } - void setAutoCreateDirectories(bool autoCreate) - { _autoCreateDirectories = autoCreate; } - bool autoCreateDirectories() const { return _autoCreateDirectories; } - - int getFileDescriptor() const override { - if (!isOpen()) { - const_cast<LazyFile&>(*this).open(_flags, _autoCreateDirectories); - } - return File::getFileDescriptor(); - } - - void resize(off_t size) override { - if (!isOpen()) { open(_flags, _autoCreateDirectories); } - File::resize(size); - } - - off_t write(const void *buf, size_t bufsize, off_t offset) override { - if (!isOpen()) { open(_flags, _autoCreateDirectories); } - return File::write(buf, bufsize, offset); - } - - size_t read(void *buf, size_t bufsize, off_t offset) const override { - if (!isOpen()) { - const_cast<LazyFile&>(*this).open(_flags, _autoCreateDirectories); - } - return File::read(buf, bufsize, offset); - } -}; - -/** * Get the current working directory. * * @throw IoException On failure. diff --git a/vespalib/src/vespa/vespalib/util/time.cpp b/vespalib/src/vespa/vespalib/util/time.cpp index 46cf4806dfc..61a295c6dc3 100644 --- a/vespalib/src/vespa/vespalib/util/time.cpp +++ b/vespalib/src/vespa/vespalib/util/time.cpp @@ -52,3 +52,34 @@ Timer::waitAtLeast(duration dur, bool busyWait) { } } + +namespace std::chrono { + +/* + * This is a hack to avoid the slow clock computations on RHEL7/CentOS 7 due to using systemcalls. + * This brings cost down from 550-560ns to 18-19ns on a Intel Haswell 2680 cpu. + * We are providing the symbols here so they will take precedence over the ones in the standard library. + * We rely on the linker do handle correct symbol resolution. + * TODO: Once we are off the ancient platforms like Centos 7/ Rhel 7 we can drop this workaround. +*/ + +inline namespace _V2 { + +system_clock::time_point +system_clock::now() noexcept { + timespec tp; + clock_gettime(CLOCK_REALTIME, &tp); + return time_point(duration(chrono::seconds(tp.tv_sec) + + chrono::nanoseconds(tp.tv_nsec))); +} + +steady_clock::time_point +steady_clock::now() noexcept { + timespec tp; + clock_gettime(CLOCK_MONOTONIC, &tp); + return time_point(duration(chrono::seconds(tp.tv_sec) + + chrono::nanoseconds(tp.tv_nsec))); +} + +} +} |