From 05fd4aa756acd99f36b0f2dbe3e0058bffefe506 Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Fri, 16 Mar 2012 15:53:48 +0000 Subject: [PATCH] Task #2669: Sync NFS before unlinking the nfsKey as well. --- LCS/Stream/include/Stream/SocketStream.h | 2 ++ LCS/Stream/src/SocketStream.cc | 28 +++++++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/LCS/Stream/include/Stream/SocketStream.h b/LCS/Stream/include/Stream/SocketStream.h index 1f77cf751c2..238be586b30 100644 --- a/LCS/Stream/include/Stream/SocketStream.h +++ b/LCS/Stream/include/Stream/SocketStream.h @@ -64,6 +64,8 @@ class SocketStream : public FileDescriptorBasedStream void accept(time_t timeout); + static void syncNFS(); + static std::string readkey(const string &nfskey, time_t &timeout); static void writekey(const string &nfskey, uint16 port); static void deletekey(const string &nfskey); diff --git a/LCS/Stream/src/SocketStream.cc b/LCS/Stream/src/SocketStream.cc index d69c98c5b4c..d920a5d754d 100644 --- a/LCS/Stream/src/SocketStream.cc +++ b/LCS/Stream/src/SocketStream.cc @@ -261,24 +261,30 @@ void SocketStream::setReadBufferSize(size_t size) } -std::string SocketStream::readkey(const std::string &nfskey, time_t &timeout) +void SocketStream::syncNFS() { - for(;;) { - // sync NFS - DIR *dir = opendir("."); + // sync NFS + DIR *dir = opendir("."); - if (!dir) - throw SystemCallException("opendir", errno, THROW_ARGS); + if (!dir) + throw SystemCallException("opendir", errno, THROW_ARGS); - if (!readdir(dir)) - throw SystemCallException("readdir", errno, THROW_ARGS); + if (!readdir(dir)) + throw SystemCallException("readdir", errno, THROW_ARGS); - if (closedir(dir) != 0) - throw SystemCallException("closedir", errno, THROW_ARGS); + if (closedir(dir) != 0) + throw SystemCallException("closedir", errno, THROW_ARGS); +} + +std::string SocketStream::readkey(const std::string &nfskey, time_t &timeout) +{ + for(;;) { char portStr[16]; ssize_t len; + syncNFS(); + len = readlink(nfskey.c_str(), portStr, sizeof portStr - 1); // reserve 1 character to insert \0 below if (len >= 0) { @@ -313,6 +319,8 @@ void SocketStream::writekey(const std::string &nfskey, uint16 port) void SocketStream::deletekey(const std::string &nfskey) { + syncNFS(); + if (unlink(nfskey.c_str()) < 0) throw SystemCallException("unlink", errno, THROW_ARGS); } -- GitLab