You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kp...@apache.org on 2017/08/22 15:06:03 UTC

[1/2] qpid-cpp git commit: QPID-7895: Update to linearstore to make the flush timer more intelligent and only run when there is flushable content in the write buffers

Repository: qpid-cpp
Updated Branches:
  refs/heads/master fd4e8319e -> 49e3afbc6


QPID-7895: Update to linearstore to make the flush timer more intelligent and only run when there is flushable content in the write buffers


Project: http://git-wip-us.apache.org/repos/asf/qpid-cpp/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-cpp/commit/4e98f6c0
Tree: http://git-wip-us.apache.org/repos/asf/qpid-cpp/tree/4e98f6c0
Diff: http://git-wip-us.apache.org/repos/asf/qpid-cpp/diff/4e98f6c0

Branch: refs/heads/master
Commit: 4e98f6c08ef531e15217f812f6624f18cf2d50fb
Parents: 0e1cef5
Author: Kim van der Riet <kp...@apache.org>
Authored: Tue Aug 22 11:04:37 2017 -0400
Committer: Kim van der Riet <kp...@apache.org>
Committed: Tue Aug 22 11:04:37 2017 -0400

----------------------------------------------------------------------
 .gitignore                           |  2 +-
 src/qpid/linearstore/JournalImpl.cpp | 92 ++++++++++++++++++++++---------
 src/qpid/linearstore/JournalImpl.h   | 15 +++--
 3 files changed, 75 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-cpp/blob/4e98f6c0/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 63a3f41..b7c3e17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-
+/build/

http://git-wip-us.apache.org/repos/asf/qpid-cpp/blob/4e98f6c0/src/qpid/linearstore/JournalImpl.cpp
----------------------------------------------------------------------
diff --git a/src/qpid/linearstore/JournalImpl.cpp b/src/qpid/linearstore/JournalImpl.cpp
index 5539f39..d7186cb 100644
--- a/src/qpid/linearstore/JournalImpl.cpp
+++ b/src/qpid/linearstore/JournalImpl.cpp
@@ -32,15 +32,65 @@ namespace linearstore {
 
 InactivityFireEvent::InactivityFireEvent(JournalImpl* p,
                                          const ::qpid::sys::Duration timeout):
-        ::qpid::sys::TimerTask(timeout, "JournalInactive:"+p->id()), _parent(p) {}
+        ::qpid::sys::TimerTask(timeout, "JournalInactive:"+p->id()), _parent(p),
+         _state(NOT_ADDED)
+{}
+
+bool InactivityFireEvent::addToTimer() {
+    ::qpid::sys::Mutex::ScopedLock sl(_ifeStateLock);
+    if (_state == NOT_ADDED) {
+        _state = RUNNING;
+        return true;
+    }
+    return false;
+}
+
+bool InactivityFireEvent::resetIfNotRunning() {
+    ::qpid::sys::Mutex::ScopedLock sl(_ifeStateLock);
+    switch (_state) {
+    case NOT_ADDED: THROW_STORE_FULL_EXCEPTION("Called InactivityFireEvent::resetIfNotRunning() before being added to timer");
+    case FIRED :
+        setupNextFire();
+        _state = RUNNING;
+        return true;
+    case FLUSHED:
+        restart();
+        _state = RUNNING;
+        break;
+    default:; // ignore
+    }
+    return false;
+}
+
+void InactivityFireEvent::flushed() {
+   ::qpid::sys::Mutex::ScopedLock sl(_ifeStateLock);
+   if (_state == RUNNING) {
+       _state = FLUSHED;
+   }
+}
 
 void InactivityFireEvent::fire() {
-    ::qpid::sys::Mutex::ScopedLock sl(_ife_lock);
-    if (_parent) {
-        _parent->flushFire();
+    {
+        ::qpid::sys::Mutex::ScopedLock sl2(_ifeStateLock);
+        if (_state != RUNNING) {
+            return;
+        }
+        _state = FIRED;
+    }
+    {
+        ::qpid::sys::Mutex::ScopedLock sl(_ifeParentLock);
+        if (_parent) {
+            _parent->flushFire();
+        }
     }
 }
 
+void InactivityFireEvent::cancel() {
+    ::qpid::sys::TimerTask::cancel();
+    ::qpid::sys::Mutex::ScopedLock sl(_ifeParentLock);
+    _parent = 0;
+}
+
 GetEventsFireEvent::GetEventsFireEvent(JournalImpl* p,
                                        const ::qpid::sys::Duration timeout):
         ::qpid::sys::TimerTask(timeout, "JournalGetEvents:"+p->id()), _parent(p)
@@ -65,16 +115,10 @@ JournalImpl::JournalImpl(::qpid::sys::Timer& timer_,
                          timer(timer_),
                          _journalLogRef(journalLogRef),
                          getEventsTimerSetFlag(false),
-                         writeActivityFlag(false),
-                         flushTriggeredFlag(true),
                          deleteCallback(onDelete)
 {
     getEventsFireEventsPtr = new GetEventsFireEvent(this, getEventsTimeout);
     inactivityFireEventPtr = new InactivityFireEvent(this, flushTimeout);
-    {
-        timer.start();
-        timer.add(inactivityFireEventPtr);
-    }
 
     initManagement(a);
 
@@ -383,9 +427,7 @@ JournalImpl::txn_commit(::qpid::linearstore::journal::data_tok* const dtokp,
 void
 JournalImpl::stop(bool block_till_aio_cmpl)
 {
-    InactivityFireEvent* ifep = dynamic_cast<InactivityFireEvent*>(inactivityFireEventPtr.get());
-    assert(ifep); // dynamic_cast can return null if the cast fails
-    ifep->cancel();
+    inactivityFireEventPtr->cancel();
     jcntl::stop(block_till_aio_cmpl);
 
     if (_mgmtObject.get() != 0) {
@@ -402,6 +444,7 @@ JournalImpl::flush(const bool block_till_aio_cmpl)
         ::qpid::sys::Mutex::ScopedLock sl(_getf_lock);
         if (_wmgr.get_aio_evt_rem() && !getEventsTimerSetFlag) { setGetEventTimer(); }
     }
+    inactivityFireEventPtr->flushed();
     return res;
 }
 
@@ -417,19 +460,7 @@ JournalImpl::getEventsFire()
 void
 JournalImpl::flushFire()
 {
-    if (writeActivityFlag) {
-        writeActivityFlag = false;
-        flushTriggeredFlag = false;
-    } else {
-        if (!flushTriggeredFlag) {
-            flush(false);
-            flushTriggeredFlag = true;
-        }
-    }
-    inactivityFireEventPtr->setupNextFire();
-    {
-        timer.add(inactivityFireEventPtr);
-    }
+    flush(false);
 }
 
 void
@@ -473,7 +504,14 @@ JournalImpl::createStore() {
 void
 JournalImpl::handleIoResult(const ::qpid::linearstore::journal::iores r)
 {
-    writeActivityFlag = true;
+    if (inactivityFireEventPtr->addToTimer()) {
+        timer.start();
+        timer.add(inactivityFireEventPtr);
+    } else {
+        if (inactivityFireEventPtr->resetIfNotRunning()) {
+            timer.add(inactivityFireEventPtr);
+        }
+    }
     switch (r)
     {
         case ::qpid::linearstore::journal::RHM_IORES_SUCCESS:

http://git-wip-us.apache.org/repos/asf/qpid-cpp/blob/4e98f6c0/src/qpid/linearstore/JournalImpl.h
----------------------------------------------------------------------
diff --git a/src/qpid/linearstore/JournalImpl.h b/src/qpid/linearstore/JournalImpl.h
index 7c9d28e..0b89088 100644
--- a/src/qpid/linearstore/JournalImpl.h
+++ b/src/qpid/linearstore/JournalImpl.h
@@ -47,14 +47,19 @@ class JournalLogImpl;
 class InactivityFireEvent : public ::qpid::sys::TimerTask
 {
     JournalImpl* _parent;
-    ::qpid::sys::Mutex _ife_lock;
+    ::qpid::sys::Mutex _ifeParentLock;
+    ::qpid::sys::Mutex _ifeStateLock;
+    enum {NOT_ADDED=0, RUNNING, FIRED, FLUSHED} _state;
 
   public:
     InactivityFireEvent(JournalImpl* p,
                         const ::qpid::sys::Duration timeout);
     virtual ~InactivityFireEvent() {}
+    bool addToTimer();
+    bool resetIfNotRunning();
+    void flushed();
     void fire();
-    inline void cancel() { ::qpid::sys::Mutex::ScopedLock sl(_ife_lock); _parent = 0; }
+    void cancel();
 };
 
 class GetEventsFireEvent : public ::qpid::sys::TimerTask
@@ -81,13 +86,11 @@ class JournalImpl : public ::qpid::broker::ExternalQueueStore,
     ::qpid::sys::Timer& timer;
     JournalLogImpl& _journalLogRef;
     bool getEventsTimerSetFlag;
-    boost::intrusive_ptr< ::qpid::sys::TimerTask> getEventsFireEventsPtr;
+    boost::intrusive_ptr<GetEventsFireEvent> getEventsFireEventsPtr;
     ::qpid::sys::Mutex _getf_lock;
     ::qpid::sys::Mutex _read_lock;
 
-    bool writeActivityFlag;
-    bool flushTriggeredFlag;
-    boost::intrusive_ptr< ::qpid::sys::TimerTask> inactivityFireEventPtr;
+    boost::intrusive_ptr<InactivityFireEvent> inactivityFireEventPtr;
 
     ::qpid::management::ManagementAgent* _agent;
     ::qmf::org::apache::qpid::linearstore::Journal::shared_ptr _mgmtObject;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


[2/2] qpid-cpp git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/qpid-cpp

Posted by kp...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/qpid-cpp


Project: http://git-wip-us.apache.org/repos/asf/qpid-cpp/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-cpp/commit/49e3afbc
Tree: http://git-wip-us.apache.org/repos/asf/qpid-cpp/tree/49e3afbc
Diff: http://git-wip-us.apache.org/repos/asf/qpid-cpp/diff/49e3afbc

Branch: refs/heads/master
Commit: 49e3afbc62f6fbb361e830b1e4baa77a046ac718
Parents: 4e98f6c fd4e831
Author: Kim van der Riet <kp...@apache.org>
Authored: Tue Aug 22 11:05:09 2017 -0400
Committer: Kim van der Riet <kp...@apache.org>
Committed: Tue Aug 22 11:05:09 2017 -0400

----------------------------------------------------------------------
 management/python/bin/qpid-route    | 104 ++++++++++++++++++-------------
 src/qpid/broker/amqp/Connection.cpp |   1 -
 src/qpid/broker/amqp/Sasl.cpp       |   4 +-
 3 files changed, 62 insertions(+), 47 deletions(-)
----------------------------------------------------------------------



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org