Yes, the log server flushes messages to disk every 15 seconds. It
flushes immediately when the write buffer is full and when the log
server is shut down, though. I have thought about introducing some way
to force a flush, e.g. by sending it the SIGHUP signal.
regards,
Anders Widell
On 02/17/2017 10:03 AM, A V Mahesh wrote:
> Hi Anders Widell,
>
> While testing the patch , Delayed MDS loging is observed , see below
> even after successful Re-Starting OpenSAF Services,
> MDS logs are not reflected immediately , after some time the
> accumulated logs are getting added to /var/log/opensaf/mds.log
> is this expected behavior ?
>
> ============================================================================================================
>
>
>
> SC-1:/var/log/opensaf # /etc/init.d/opensafd restart
> Stopping OpenSAF Services: done
> /etc/init.d/opensafd: line 229: tartnable_coredump: command not found
> Starting OpenSAF Services (Using TCP): done
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 2868 Feb 17 14:23 mds.log
> SC-1:/var/log/opensaf #
> SC-1:/var/log/opensaf #
> SC-1:/var/log/opensaf # /etc/init.d/opensafd restart
> Stopping OpenSAF Services: done
> /etc/init.d/opensafd: line 229: tartnable_coredump: command not found
> Starting OpenSAF Services (Using TCP): done
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 2868 Feb 17 14:23 mds.log
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 2868 Feb 17 14:23 mds.log
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 2868 Feb 17 14:23 mds.log
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 2868 Feb 17 14:23 mds.log
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 2868 Feb 17 14:23 mds.log
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 2868 Feb 17 14:23 mds.log
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 2868 Feb 17 14:23 mds.log
> SC-1:/var/log/opensaf # ls -l mds.log
> -rw-r--r-- 1 root root 5357 Feb 17 14:24 mds.log
> SC-1:/var/log/opensaf #
>
> ============================================================================================================
>
>
>
> -AVM
>
>
>
> On 2/15/2017 2:58 PM, Anders Widell wrote:
>> src/dtm/Makefile.am | 7 ++-
>> src/dtm/transport/log_server.cc | 6 +-
>> src/dtm/transport/log_writer.cc | 15 +----
>> src/dtm/transport/log_writer.h | 3 +-
>> src/dtm/transport/tests/log_writer_test.cc | 75
>> ++++++++++++++++++++++++++++++
>> 5 files changed, 89 insertions(+), 17 deletions(-)
>>
>>
>> Fix a bug in the MDS log server that caused it to overwrite an
>> existing MDS log
>> after a node reboot. An existing log file will now be appended.
>>
>> diff --git a/src/dtm/Makefile.am b/src/dtm/Makefile.am
>> --- a/src/dtm/Makefile.am
>> +++ b/src/dtm/Makefile.am
>> @@ -1,6 +1,7 @@
>> # -*- OpenSAF -*-
>> #
>> # (C) Copyright 2016 The OpenSAF Foundation
>> +# Copyright Ericsson AB 2017 - All Rights Reserved.
>> #
>> # This program is distributed in the hope that it will be useful, but
>> # WITHOUT ANY WARRANTY; without even the implied warranty of
>> MERCHANTABILITY
>> @@ -82,12 +83,14 @@ bin_transport_test_CPPFLAGS = \
>> bin_transport_test_LDFLAGS = \
>> $(AM_LDFLAGS) \
>> src/base/lib_libopensaf_core_la-getenv.lo \
>> + src/dtm/transport/bin_osaftransportd-log_writer.o \
>> src/dtm/transport/bin_osaftransportd-transport_monitor.o
>> bin_transport_test_SOURCES = \
>> - src/dtm/transport/tests/transport_monitor_test.cc \
>> + src/dtm/transport/tests/log_writer_test.cc \
>> src/dtm/transport/tests/mock_logtrace.cc \
>> - src/dtm/transport/tests/mock_osaf_poll.cc
>> + src/dtm/transport/tests/mock_osaf_poll.cc \
>> + src/dtm/transport/tests/transport_monitor_test.cc
>> bin_transport_test_LDADD = \
>> $(GTEST_DIR)/lib/libgtest.la \
>> diff --git a/src/dtm/transport/log_server.cc
>> b/src/dtm/transport/log_server.cc
>> --- a/src/dtm/transport/log_server.cc
>> +++ b/src/dtm/transport/log_server.cc
>> @@ -1,6 +1,7 @@
>> /* -*- OpenSAF -*-
>> *
>> * (C) Copyright 2016 The OpenSAF Foundation
>> + * Copyright Ericsson AB 2017 - All Rights Reserved.
>> *
>> * This program is distributed in the hope that it will be useful, but
>> * WITHOUT ANY WARRANTY; without even the implied warranty of
>> MERCHANTABILITY
>> @@ -36,8 +37,9 @@ void LogServer::Run() {
>> {term_fd_, POLLIN, 0},
>> {log_socket_.fd(), POLLIN, 0}
>> };
>> - struct timespec last_flush = base::ReadMonotonicClock();
>> + struct timespec last_flush{};
>> do {
>> + if (log_writer_.empty()) last_flush = base::ReadMonotonicClock();
>> for (int i = 0; i < 256; ++i) {
>> char* buffer = log_writer_.current_buffer_position();
>> ssize_t result = log_socket_.Recv(buffer,
>> LogWriter::kMaxMessageSize);
>> @@ -57,6 +59,6 @@ void LogServer::Run() {
>> }
>> struct timespec timeout = (last_flush + base::kFifteenSeconds)
>> - current;
>> pfd[1].fd = log_socket_.fd();
>> - osaf_ppoll(pfd, 2, &timeout, nullptr);
>> + osaf_ppoll(pfd, 2, log_writer_.empty() ? nullptr : &timeout,
>> nullptr);
>> } while ((pfd[0].revents & POLLIN) == 0);
>> }
>> diff --git a/src/dtm/transport/log_writer.cc
>> b/src/dtm/transport/log_writer.cc
>> --- a/src/dtm/transport/log_writer.cc
>> +++ b/src/dtm/transport/log_writer.cc
>> @@ -1,6 +1,7 @@
>> /* -*- OpenSAF -*-
>> *
>> * (C) Copyright 2016 The OpenSAF Foundation
>> + * Copyright Ericsson AB 2017 - All Rights Reserved.
>> *
>> * This program is distributed in the hope that it will be useful, but
>> * WITHOUT ANY WARRANTY; without even the implied warranty of
>> MERCHANTABILITY
>> @@ -48,8 +49,9 @@ void LogWriter::Open() {
>> S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH |
>> S_IWOTH);
>> } while (fd == -1 && errno == EINTR);
>> if (fd >= 0) {
>> + off_t seek_result = lseek(fd, 0, SEEK_END);
>> + if (seek_result >= 0) current_file_size_ = seek_result;
>> fd_ = fd;
>> - current_file_size_ = FileSize(fd);
>> }
>> }
>> }
>> @@ -98,14 +100,3 @@ void LogWriter::Flush() {
>> }
>> current_file_size_ += bytes_written;
>> }
>> -
>> -size_t LogWriter::FileSize(int fd) {
>> - struct stat stat_buf;
>> - size_t file_size;
>> - if (fstat(fd, &stat_buf) == 0 && S_ISREG(stat_buf.st_mode) != 0) {
>> - file_size = static_cast<size_t>(stat_buf.st_blocks) * 512;
>> - } else {
>> - file_size = 0;
>> - }
>> - return file_size;
>> -}
>> diff --git a/src/dtm/transport/log_writer.h
>> b/src/dtm/transport/log_writer.h
>> --- a/src/dtm/transport/log_writer.h
>> +++ b/src/dtm/transport/log_writer.h
>> @@ -1,6 +1,7 @@
>> /* -*- OpenSAF -*-
>> *
>> * (C) Copyright 2016 The OpenSAF Foundation
>> + * Copyright Ericsson AB 2017 - All Rights Reserved.
>> *
>> * This program is distributed in the hope that it will be useful, but
>> * WITHOUT ANY WARRANTY; without even the implied warranty of
>> MERCHANTABILITY
>> @@ -32,6 +33,7 @@ class LogWriter {
>> virtual ~LogWriter();
>> char* current_buffer_position() { return buffer_ +
>> current_buffer_size_; }
>> + bool empty() const { return current_buffer_size_ == 0; }
>> // Write @a size bytes of log message data in the memory
>> pointed to by @a
>> // buffer to the MDS log file. After the log message has been
>> written, the
>> @@ -42,7 +44,6 @@ class LogWriter {
>> private:
>> constexpr static const size_t kBufferSize = 128 * size_t{1024};
>> constexpr static const size_t kMaxFileSize = 5000 * size_t{1024};
>> - static size_t FileSize(int fd);
>> void Open();
>> void Close();
>> void RotateLog();
>> diff --git a/src/dtm/transport/tests/log_writer_test.cc
>> b/src/dtm/transport/tests/log_writer_test.cc
>> new file mode 100644
>> --- /dev/null
>> +++ b/src/dtm/transport/tests/log_writer_test.cc
>> @@ -0,0 +1,75 @@
>> +/* -*- OpenSAF -*-
>> + *
>> + * Copyright Ericsson AB 2017 - All Rights Reserved.
>> + *
>> + * This program is distributed in the hope that it will be useful, but
>> + * WITHOUT ANY WARRANTY; without even the implied warranty of
>> MERCHANTABILITY
>> + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are
>> licensed
>> + * under the GNU Lesser General Public License Version 2.1, February
>> 1999.
>> + * The complete license can be accessed from the following location:
>> + * http://opensource.org/licenses/lgpl-license.php
>> + * See the Copying file included with the OpenSAF distribution for full
>> + * licensing terms.
>> + *
>> + */
>> +
>> +#include <cstdlib>
>> +#include <cstring>
>> +#include <fstream>
>> +#include <string>
>> +#include "dtm/transport/log_writer.h"
>> +#include "gtest/gtest.h"
>> +
>> +class LogWriterTest : public ::testing::Test {
>> + protected:
>> + LogWriterTest() :
>> + tmpdir_{} {
>> + }
>> +
>> + virtual ~LogWriterTest() {
>> + }
>> +
>> + virtual void SetUp() {
>> + char tmpdir[] = "/tmp/log_writer_test_XXXXXX";
>> + char* result = mkdtemp(tmpdir);
>> + ASSERT_NE(result, nullptr);
>> + tmpdir_ = result;
>> + int retval = setenv("pkglogdir", tmpdir_.c_str(), 1);
>> + ASSERT_EQ(retval, 0);
>> + }
>> +
>> + virtual void TearDown() {
>> + std::string cmd = std::string("rm -f ") + tmpdir_ +
>> std::string("/*");
>> + int result = system(cmd.c_str());
>> + ASSERT_EQ(result, 0);
>> + result = rmdir(tmpdir_.c_str());
>> + ASSERT_EQ(result, 0);
>> + result = unsetenv("pkglogdir");
>> + ASSERT_EQ(result, 0);
>> + }
>> +
>> + std::string tmpdir_;
>> +};
>> +
>> +TEST_F(LogWriterTest, ExistingFileShouldBeAppended) {
>> + const char first_line[] = "first line";
>> + const char second_line[] = "second line";
>> + std::ofstream ostr(tmpdir_ + std::string("/mds.log"));
>> + ostr << first_line << std::endl;
>> + ostr.close();
>> + LogWriter* log_writer = new LogWriter();
>> + memcpy(log_writer->current_buffer_position(), second_line,
>> + sizeof(second_line) - 1);
>> + log_writer->current_buffer_position()[sizeof(second_line) - 1] =
>> '\n';
>> + log_writer->Write(sizeof(second_line));
>> + delete log_writer;
>> + std::ifstream istr(tmpdir_ + std::string("/mds.log"));
>> + std::string line1;
>> + std::string line2;
>> + std::getline(istr, line1);
>> + EXPECT_FALSE(istr.fail());
>> + std::getline(istr, line2);
>> + EXPECT_FALSE(istr.fail());
>> + EXPECT_EQ(line1, std::string(first_line));
>> + EXPECT_EQ(line2, std::string(second_line));
>> +}
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel