]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
log: use one write system call per message
authorPatrick Donnelly <pdonnell@redhat.com>
Tue, 4 Oct 2016 20:38:26 +0000 (14:38 -0600)
committerPatrick Donnelly <pdonnell@redhat.com>
Tue, 15 Nov 2016 15:48:57 +0000 (10:48 -0500)
Two separate safe_write calls would result in having two write syscalls
like so:

    25098 write(2, "2016-10-04 11:33:46.357326 7fb025968f00 10 client.4143 did not get mds through better means, so chos"..., 114) = 114
    25098 write(2, "\n", 1)                 = 1
    25098 write(2, "2016-10-04 11:33:46.357333 7fb025968f00 20 client.4143 mds is 0", 63) = 63
    25098 write(2, "\n", 1)                 = 1
    25098 write(2, "2016-10-04 11:33:46.357336 7fb025968f00 10 client.4143 send_request rebuilding request 1 for mds.0", 98) = 98
    25098 write(2, "\n", 1)                 = 1
    25098 write(2, "2016-10-04 11:33:46.357341 7fb025968f00 20 client.4143 encode_cap_releases enter (req: 0x7fb02e7502c"..., 110) = 110
    25098 write(2, "\n", 1)                 = 1

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/log/Log.cc

index 9bd07f2025bb257a39d94e5d00d910d24bb451ed..7ab21a52b6f29dbf25dcc449c117c953ff96868a 100644 (file)
@@ -354,9 +354,12 @@ void Log::_flush(EntryQueue *t, EntryQueue *requeue, bool crash)
 void Log::_log_message(const char *s, bool crash)
 {
   if (m_fd >= 0) {
-    int r = safe_write(m_fd, s, strlen(s));
-    if (r >= 0)
-      r = safe_write(m_fd, "\n", 1);
+    size_t len = strlen(s);
+    std::string b;
+    b.reserve(len + 1);
+    b.append(s, len);
+    b += '\n';
+    int r = safe_write(m_fd, b.c_str(), b.size());
     if (r < 0)
       cerr << "problem writing to " << m_log_file << ": " << cpp_strerror(r) << std::endl;
   }