summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp2
-rw-r--r--vespalib/src/tests/io/fileutil/fileutiltest.cpp55
-rw-r--r--vespalib/src/tests/slaveproc/slaveproc_test.cpp2
-rw-r--r--vespalib/src/vespa/vespalib/io/fileutil.h59
-rw-r--r--vespalib/src/vespa/vespalib/util/time.cpp31
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)));
+}
+
+}
+}