[Libreoffice-commits] online.git: test/TileQueueTests.cpp wsd/ClientSession.hpp wsd/DocumentBroker.cpp wsd/PrisonerSession.cpp wsd/SenderQueue.hpp wsd/TileCache.cpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Mon Jan 23 05:43:12 UTC 2017


 test/TileQueueTests.cpp |   10 +++++-----
 wsd/ClientSession.hpp   |    8 ++++++--
 wsd/DocumentBroker.cpp  |    2 +-
 wsd/PrisonerSession.cpp |    1 +
 wsd/SenderQueue.hpp     |   24 +++++++++++++++++++++---
 wsd/TileCache.cpp       |    2 ++
 6 files changed, 36 insertions(+), 11 deletions(-)

New commits:
commit 16eb1968206811a214e6f8e045313c0ec5f667cf
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sat Jan 21 16:14:36 2017 -0500

    wsd: each Message object now has a unique ID for logging purposes
    
    Change-Id: I5f3c3afec57f3d9336e0994a1d87421281028d79
    Reviewed-on: https://gerrit.libreoffice.org/33426
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/test/TileQueueTests.cpp b/test/TileQueueTests.cpp
index 747686c..8149d1c 100644
--- a/test/TileQueueTests.cpp
+++ b/test/TileQueueTests.cpp
@@ -285,7 +285,7 @@ void TileQueueTests::testSenderQueue()
 
     for (const auto& msg : messages)
     {
-        queue.enqueue(std::make_shared<MessagePayload>(msg));
+        queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out));
     }
 
     CPPUNIT_ASSERT_EQUAL(3UL, queue.size());
@@ -324,7 +324,7 @@ void TileQueueTests::testSenderQueueTileDeduplication()
 
     for (const auto& msg : part_messages)
     {
-        queue.enqueue(std::make_shared<MessagePayload>(msg));
+        queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out));
     }
 
     CPPUNIT_ASSERT_EQUAL(3UL, queue.size());
@@ -343,7 +343,7 @@ void TileQueueTests::testSenderQueueTileDeduplication()
 
     for (const auto& msg : dup_messages)
     {
-        queue.enqueue(std::make_shared<MessagePayload>(msg));
+        queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out));
     }
 
     CPPUNIT_ASSERT_EQUAL(1UL, queue.size());
@@ -374,7 +374,7 @@ void TileQueueTests::testInvalidateViewCursorDeduplication()
 
     for (const auto& msg : view_messages)
     {
-        queue.enqueue(std::make_shared<MessagePayload>(msg));
+        queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out));
     }
 
     CPPUNIT_ASSERT_EQUAL(3UL, queue.size());
@@ -402,7 +402,7 @@ void TileQueueTests::testInvalidateViewCursorDeduplication()
 
     for (const auto& msg : dup_messages)
     {
-        queue.enqueue(std::make_shared<MessagePayload>(msg));
+        queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out));
     }
 
     CPPUNIT_ASSERT_EQUAL(1UL, queue.size());
diff --git a/wsd/ClientSession.hpp b/wsd/ClientSession.hpp
index 57345bb..17904be 100644
--- a/wsd/ClientSession.hpp
+++ b/wsd/ClientSession.hpp
@@ -51,14 +51,18 @@ public:
 
     bool sendBinaryFrame(const char* buffer, int length) override
     {
-        auto payload = std::make_shared<MessagePayload>(buffer, length, MessagePayload::Type::Binary);
+        auto payload = std::make_shared<MessagePayload>(buffer, length,
+                                                        MessagePayload::Dir::Out,
+                                                        MessagePayload::Type::Binary);
         enqueueSendMessage(payload);
         return true;
     }
 
     bool sendTextFrame(const char* buffer, const int length) override
     {
-        auto payload = std::make_shared<MessagePayload>(buffer, length, MessagePayload::Type::Text);
+        auto payload = std::make_shared<MessagePayload>(buffer, length,
+                                                        MessagePayload::Dir::Out,
+                                                        MessagePayload::Type::Text);
         enqueueSendMessage(payload);
         return true;
     }
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index e532fb5..0b049a5 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -693,7 +693,7 @@ void DocumentBroker::alertAllUsers(const std::string& msg)
 {
     Util::assertIsLocked(_mutex);
 
-    auto payload = std::make_shared<MessagePayload>(msg);
+    auto payload = std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out);
 
     LOG_DBG("Alerting all users of [" << _docKey << "]: " << msg);
     for (auto& it : _sessions)
diff --git a/wsd/PrisonerSession.cpp b/wsd/PrisonerSession.cpp
index 16cb760..2a78950 100644
--- a/wsd/PrisonerSession.cpp
+++ b/wsd/PrisonerSession.cpp
@@ -282,6 +282,7 @@ bool PrisonerSession::forwardToPeer(const std::shared_ptr<ClientSession>& client
     LOG_TRC(getName() << " -> " << clientSession->getName() << ": " << message);
 
     auto payload = std::make_shared<MessagePayload>(buffer, length,
+                                                    MessagePayload::Dir::Out,
                                                     binary ? MessagePayload::Type::Binary
                                                            : MessagePayload::Type::Text);
     clientSession->enqueueSendMessage(payload);
diff --git a/wsd/SenderQueue.hpp b/wsd/SenderQueue.hpp
index 900dd94..c8e87a1 100644
--- a/wsd/SenderQueue.hpp
+++ b/wsd/SenderQueue.hpp
@@ -32,15 +32,18 @@ class MessagePayload
 public:
 
     enum class Type { Text, JSON, Binary };
+    enum class Dir { In, Out };
 
     /// Construct a text message.
     /// message must include the full first-line.
     MessagePayload(const std::string& message,
+                   const enum Dir dir,
                    const enum Type type = Type::Text) :
         _data(message.data(), message.data() + message.size()),
         _tokens(LOOLProtocol::tokenize(_data.data(), _data.size())),
+        _id(makeId(dir)),
         _firstLine(LOOLProtocol::getFirstLine(_data.data(), _data.size())),
-        _abbreviation(LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())),
+        _abbreviation(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())),
         _type(type)
     {
     }
@@ -49,12 +52,14 @@ public:
     /// reserve extra space (total, including message).
     /// message must include the full first-line.
     MessagePayload(const std::string& message,
+                   const enum Dir dir,
                    const enum Type type,
                    const size_t reserve) :
         _data(std::max(reserve, message.size())),
         _tokens(LOOLProtocol::tokenize(message)),
+        _id(makeId(dir)),
         _firstLine(LOOLProtocol::getFirstLine(message)),
-        _abbreviation(LOOLProtocol::getAbbreviatedMessage(message)),
+        _abbreviation(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(message)),
         _type(type)
     {
         _data.resize(message.size());
@@ -65,11 +70,13 @@ public:
     /// data must be include the full first-line.
     MessagePayload(const char* p,
                    const size_t len,
+                   const enum Dir dir,
                    const enum Type type) :
         _data(p, p + len),
         _tokens(LOOLProtocol::tokenize(_data.data(), _data.size())),
+        _id(makeId(dir)),
         _firstLine(LOOLProtocol::getFirstLine(_data.data(), _data.size())),
-        _abbreviation(LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())),
+        _abbreviation(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())),
         _type(type)
     {
     }
@@ -81,6 +88,7 @@ public:
     const std::string& firstToken() const { return _tokens[0]; }
     const std::string& firstLine() const { return _firstLine; }
     const std::string& abbreviation() const { return _abbreviation; }
+    const std::string& id() const { return _id; }
 
     /// Returns the json part of the message, if any.
     std::string jsonString() const
@@ -106,8 +114,18 @@ public:
     bool isBinary() const { return _type == Type::Binary; }
 
 private:
+
+    /// Constructs a unique ID.
+    static std::string makeId(const enum Dir dir)
+    {
+        static std::atomic<unsigned> Counter;
+        return (dir == Dir::In ? 'i' : 'o') + std::to_string(++Counter);
+    }
+
+private:
     std::vector<char> _data;
     const std::vector<std::string> _tokens;
+    const std::string _id;
     const std::string _firstLine;
     const std::string _abbreviation;
     const Type _type;
diff --git a/wsd/TileCache.cpp b/wsd/TileCache.cpp
index 4e784f5..e8fbebc 100644
--- a/wsd/TileCache.cpp
+++ b/wsd/TileCache.cpp
@@ -169,6 +169,7 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, const
 
             // Send to first subscriber as-is (without cache marker).
             auto payload = std::make_shared<MessagePayload>(response,
+                                                            MessagePayload::Dir::Out,
                                                             MessagePayload::Type::Binary,
                                                             response.size() + 1 + size);
             payload->append("\n", 1);
@@ -189,6 +190,7 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, const
                 // Create a new Payload.
                 payload.reset();
                 payload = std::make_shared<MessagePayload>(response,
+                                                           MessagePayload::Dir::Out,
                                                            MessagePayload::Type::Binary,
                                                            response.size() + size);
                 payload->append(data, size);


More information about the Libreoffice-commits mailing list