Hi Anders Widell,

On 2/17/2017 2:59 PM, Anders Widell wrote:
> I will write a ticket on this.
If you are planing to address the new ticket  before 5.2 , it will be fine .
Otherwise  we need to fix  with some shot time solution at-least while 
Starting OpenSAF Services.

-AVM
>
> regards,
>
> Anders Widell
>
>
> On 02/17/2017 10:25 AM, A V Mahesh wrote:
>> Hi Anders Widel,
>>
>> On 2/17/2017 2:42 PM, Anders Widell wrote:
>>> I have thought about introducing some way to force a flush, e.g. by 
>>> sending it the SIGHUP signal.
>>
>>  If you are planing to do above  later in separate  #Ticket , 
>> at-least for now  try to flushes in shot sequence
>>  while Starting OpenSAF Services , otherwise  it will be clueless if 
>> `log server` non graceful exit and node restarting with in 15 seconds .
>>
>> -AVM
>>
>> On 2/17/2017 2:42 PM, Anders Widell wrote:
>>> 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

Reply via email to