You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2008/05/22 17:02:12 UTC

svn commit: r659127 - in /incubator/qpid/trunk/qpid/cpp/src/qpid: SessionState.cpp log/Statement.h

Author: aconway
Date: Thu May 22 08:02:11 2008
New Revision: 659127

URL: http://svn.apache.org/viewvc?rev=659127&view=rev
Log:
Improved logging for session state.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/log/Statement.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp?rev=659127&r1=659126&r2=659127&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/SessionState.cpp Thu May 22 08:02:11 2008
@@ -71,6 +71,7 @@
 SessionState::ReplayRange SessionState::senderExpected(const SessionPoint& expect) {
     if (expect < sender.replayPoint || sender.sendPoint < expect)
         throw InvalidArgumentException(QPID_MSG(getId() << ": expected command-point out of range."));
+    QPID_LOG(debug, getId() << ": sender expected point moved to " << expect);
     ReplayList::iterator i = sender.replayList.begin();
     SessionPoint p = sender.replayPoint;
     while (i != sender.replayList.end() && p.command < expect.command)
@@ -81,6 +82,7 @@
 
 void SessionState::senderRecord(const AMQFrame& f) {
     if (isControl(f)) return;   // Ignore control frames.
+    QPID_LOG_IF(debug, f.getMethod(), getId() << ": sent cmd " << sender.sendPoint.command << ": " << *f.getMethod());
     stateful = true;
     sender.replayList.push_back(f);
     sender.unflushedSize += f.size();
@@ -104,6 +106,7 @@
 void SessionState::senderConfirmed(const SessionPoint& confirmed) {
     if (confirmed > sender.sendPoint)
         throw InvalidArgumentException(QPID_MSG(getId() << "Confirmed commands not yet sent."));
+    QPID_LOG(debug, getId() << ": sender confirmed point moved to " << confirmed);
     ReplayList::iterator i = sender.replayList.begin();
     while (i != sender.replayList.end() && sender.replayPoint.command < confirmed.command) {
         sender.replayPoint.advance(*i);
@@ -121,6 +124,7 @@
 
 void SessionState::senderCompleted(const SequenceSet& commands) {
     if (commands.empty()) return;
+    QPID_LOG(debug, getId() << ": sender marked completed: " << commands);
     sender.incomplete -= commands;
     // Completion implies confirmation but we don't handle out-of-order
     // confirmation, so confirm only the first contiguous range of commands.
@@ -130,6 +134,7 @@
 void SessionState::receiverSetCommandPoint(const SessionPoint& point) {
     if (hasState() && point > receiver.received)
         throw InvalidArgumentException(QPID_MSG(getId() << ": Command-point out of range."));
+    QPID_LOG(debug, getId() << ": receiver command-point set to: " << point);
     receiver.expected = point;
     if (receiver.expected > receiver.received)
         receiver.received = receiver.expected;
@@ -139,14 +144,12 @@
     if (isControl(f)) return true; // Ignore control frames.
     stateful = true;
     receiver.expected.advance(f);
-    if (receiver.expected > receiver.received) {
+    bool firstTime = receiver.expected > receiver.received;
+    if (firstTime)
         receiver.received = receiver.expected;
-        return true;
-    }
-    else {
-        QPID_LOG(debug, "Ignoring duplicate: " << f);
-    return false;
-}
+    QPID_LOG_IF(debug, f.getMethod(), getId() << ": recv cmd " << receiverGetCurrent() << ": " << *f.getMethod());
+    QPID_LOG_IF(debug, !firstTime, "Ignoring duplicate frame: " << receiverGetCurrent() << ": " << f);
+    return firstTime;
 }
     
 void SessionState::receiverCompleted(SequenceNumber command, bool cumulative) {
@@ -157,13 +160,14 @@
     else
         receiver.unknownCompleted += command;
     receiver.firstIncomplete = receiver.unknownCompleted.rangeContaining(receiver.firstIncomplete).end();
-    QPID_LOG(debug, "Completed " << command << " unknown=" << receiver.unknownCompleted);
+    QPID_LOG(debug, getId() << ": receiver marked completed: " << command << " unknown: " << receiver.unknownCompleted);
 }
 
 void SessionState::receiverKnownCompleted(const SequenceSet& commands) {
     if (!commands.empty() && commands.back() > receiver.received.command)
         throw InvalidArgumentException(QPID_MSG(getId() << ": Known-completed has invalid commands."));
     receiver.unknownCompleted -= commands;
+    QPID_LOG(debug, getId() << ": receiver known completed: " << commands << " unknown: " << receiver.unknownCompleted);
 }
 
 const SessionPoint& SessionState::receiverGetExpected() const { return receiver.expected; }

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/log/Statement.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/log/Statement.h?rev=659127&r1=659126&r2=659127&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/log/Statement.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/log/Statement.h Thu May 22 08:02:11 2008
@@ -79,6 +79,26 @@
     { 0, __FILE__, __LINE__,  BOOST_CURRENT_FUNCTION, (::qpid::log::level) }
 
 /**
+ * Like QPID_LOG but computes an additional boolean test expression
+ * to determine if the message should be logged. Evaluation of both
+ * the test and  message expressions occurs only if the requested log level
+ * is enabled.
+ *@param LEVEL severity Level for message, should be one of:
+ * debug, info, notice, warning, error, critical. NB no qpid::log:: prefix.
+ *@param TEST message is logged only if expression TEST evaluates to true.
+ *@param MESSAGE any object with an @eostream operator<<, or a sequence
+ * like of ostreamable objects separated by @e<<.
+ */
+#define QPID_LOG_IF(LEVEL, TEST, MESSAGE)                       \
+    do {                                                        \
+        using ::qpid::log::Statement;                           \
+        static Statement stmt_= QPID_LOG_STATEMENT_INIT(LEVEL); \
+        static Statement::Initializer init_(stmt_);             \
+        if (stmt_.enabled && (TEST))                            \
+            stmt_.log(::qpid::Msg() << MESSAGE);                \
+    } while(0)
+
+/**
  * Macro for log statements. Example of use:
  * @code
  * QPID_LOG(debug, "There are " << foocount << " foos in the bar.");
@@ -97,13 +117,7 @@
  *@param MESSAGE any object with an @eostream operator<<, or a sequence
  * like of ostreamable objects separated by @e<<.
  */
-#define QPID_LOG(level, message)                                        \
-    do {                                                                \
-        static ::qpid::log::Statement stmt_= QPID_LOG_STATEMENT_INIT(level); \
-        static ::qpid::log::Statement::Initializer init_(stmt_);        \
-        if (stmt_.enabled)                                              \
-            stmt_.log(::qpid::Msg() << message);                        \
-    } while(0)
+#define QPID_LOG(LEVEL, MESSAGE) QPID_LOG_IF(LEVEL, true, MESSAGE);
 
 }} // namespace qpid::log