From c344ef41d64bcb44260dc977d60ac80b9bb47f92 Mon Sep 17 00:00:00 2001 From: XieHan Date: Wed, 27 Jan 2021 19:54:24 +0800 Subject: [PATCH 1/4] add ProtocolMessage attachment --- src/protocol/HttpMessage.cc | 6 ++++++ src/protocol/KafkaMessage.cc | 6 ++++++ src/protocol/MySQLMessage.cc | 6 ++++++ src/protocol/ProtocolMessage.h | 19 ++++++++++++++++++- src/protocol/RedisMessage.cc | 3 +++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/protocol/HttpMessage.cc b/src/protocol/HttpMessage.cc index 11c2c646..e7e5fc78 100644 --- a/src/protocol/HttpMessage.cc +++ b/src/protocol/HttpMessage.cc @@ -227,6 +227,9 @@ HttpMessage::HttpMessage(HttpMessage&& msg) this->size_limit = msg.size_limit; msg.size_limit = (size_t)-1; + this->attachment = msg.attachment; + msg.attachment = NULL; + this->parser = msg.parser; msg.parser = NULL; @@ -246,6 +249,9 @@ HttpMessage& HttpMessage::operator = (HttpMessage&& msg) this->size_limit = msg.size_limit; msg.size_limit = (size_t)-1; + this->attachment = msg.attachment; + msg.attachment = NULL; + http_parser_deinit(this->parser); delete this->parser; diff --git a/src/protocol/KafkaMessage.cc b/src/protocol/KafkaMessage.cc index 3beb1ad5..95b75a5d 100644 --- a/src/protocol/KafkaMessage.cc +++ b/src/protocol/KafkaMessage.cc @@ -1625,6 +1625,9 @@ KafkaMessage::KafkaMessage(KafkaMessage&& msg) this->size_limit = msg.size_limit; msg.size_limit = (size_t)-1; + this->attachment = msg.attchment; + msg.attachment = NULL; + this->parser = msg.parser; this->stream = msg.stream; msg.parser = NULL; @@ -1654,6 +1657,9 @@ KafkaMessage& KafkaMessage::operator= (KafkaMessage &&msg) this->size_limit = msg.size_limit; msg.size_limit = (size_t)-1; + this->attachment = msg.attchment; + msg.attachment = NULL; + kafka_parser_deinit(this->parser); delete this->parser; delete this->stream; diff --git a/src/protocol/MySQLMessage.cc b/src/protocol/MySQLMessage.cc index 7ca861b5..12135d4d 100644 --- a/src/protocol/MySQLMessage.cc +++ b/src/protocol/MySQLMessage.cc @@ -46,6 +46,9 @@ MySQLMessage::MySQLMessage(MySQLMessage&& move) this->size_limit = move.size_limit; move.size_limit = (size_t)-1; + this->attachment = move.attachment; + move.attachment = NULL; + parser_ = move.parser_; stream_ = move.stream_; seqid_ = move.seqid_; @@ -64,6 +67,9 @@ MySQLMessage& MySQLMessage::operator= (MySQLMessage&& move) this->size_limit = move.size_limit; move.size_limit = (size_t)-1; + this->attachment = move.attachment; + move.attachment = NULL; + mysql_parser_deinit(parser_); mysql_stream_deinit(stream_); delete parser_; diff --git a/src/protocol/ProtocolMessage.h b/src/protocol/ProtocolMessage.h index a51609f3..0d0c4b7c 100644 --- a/src/protocol/ProtocolMessage.h +++ b/src/protocol/ProtocolMessage.h @@ -61,11 +61,28 @@ public: void set_size_limit(size_t limit) { this->size_limit = limit; } size_t get_size_limit() const { return this->size_limit; } +public: + class Attachment + { + public: + virtual ~Attachment() { } + }; + + void set_attachment(Attachment *att) { this->attachment = att; } + Attachment *get_attachment() const { return this->attachment; } + protected: size_t size_limit; + Attachment *attachment; public: - ProtocolMessage() { this->size_limit = (size_t)-1; } + ProtocolMessage() + { + this->size_limit = (size_t)-1; + this->attachment = NULL; + } + + virtual ~ProtocolMessage() { delete this->attachment; } }; } diff --git a/src/protocol/RedisMessage.cc b/src/protocol/RedisMessage.cc index 20e1f839..741e81e5 100644 --- a/src/protocol/RedisMessage.cc +++ b/src/protocol/RedisMessage.cc @@ -490,6 +490,9 @@ RedisMessage::RedisMessage(RedisMessage&& move) this->size_limit = move.size_limit; move.size_limit = (size_t)-1; + this->attachment = move.attachment; + move.attachment = NULL; + parser_ = move.parser_; stream_ = move.stream_; cur_size_ = move.cur_size_; From a7adf91d0b4a8b753f6da19e5fc3cdcc8ddc9db9 Mon Sep 17 00:00:00 2001 From: XieHan Date: Wed, 27 Jan 2021 20:18:23 +0800 Subject: [PATCH 2/4] fix typo --- src/protocol/KafkaMessage.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/protocol/KafkaMessage.cc b/src/protocol/KafkaMessage.cc index 95b75a5d..5d14ea22 100644 --- a/src/protocol/KafkaMessage.cc +++ b/src/protocol/KafkaMessage.cc @@ -1625,7 +1625,7 @@ KafkaMessage::KafkaMessage(KafkaMessage&& msg) this->size_limit = msg.size_limit; msg.size_limit = (size_t)-1; - this->attachment = msg.attchment; + this->attachment = msg.attachment; msg.attachment = NULL; this->parser = msg.parser; @@ -1657,7 +1657,7 @@ KafkaMessage& KafkaMessage::operator= (KafkaMessage &&msg) this->size_limit = msg.size_limit; msg.size_limit = (size_t)-1; - this->attachment = msg.attchment; + this->attachment = msg.attachment; msg.attachment = NULL; kafka_parser_deinit(this->parser); From 7f3784b589be444faf1ef9b97e10fb6f1ab5abb8 Mon Sep 17 00:00:00 2001 From: XieHan Date: Wed, 27 Jan 2021 23:49:32 +0800 Subject: [PATCH 3/4] update messages move constructors --- src/protocol/HttpMessage.cc | 16 ++++--------- src/protocol/HttpMessage.h | 16 ++++--------- src/protocol/KafkaMessage.cc | 15 +++--------- src/protocol/MySQLMessage.cc | 16 ++++--------- src/protocol/ProtocolMessage.h | 24 +++++++++++++++++++ src/protocol/RedisMessage.cc | 12 +++------- .../message.cc | 10 ++++---- 7 files changed, 46 insertions(+), 63 deletions(-) diff --git a/src/protocol/HttpMessage.cc b/src/protocol/HttpMessage.cc index e7e5fc78..e142c00b 100644 --- a/src/protocol/HttpMessage.cc +++ b/src/protocol/HttpMessage.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include "HttpMessage.h" namespace protocol @@ -222,14 +223,9 @@ inline int HttpMessage::append(const void *buf, size_t *size) return ret; } -HttpMessage::HttpMessage(HttpMessage&& msg) +HttpMessage::HttpMessage(HttpMessage&& msg) : + ProtocolMessage(std::move(msg)) { - this->size_limit = msg.size_limit; - msg.size_limit = (size_t)-1; - - this->attachment = msg.attachment; - msg.attachment = NULL; - this->parser = msg.parser; msg.parser = NULL; @@ -246,11 +242,7 @@ HttpMessage& HttpMessage::operator = (HttpMessage&& msg) { if (&msg != this) { - this->size_limit = msg.size_limit; - msg.size_limit = (size_t)-1; - - this->attachment = msg.attachment; - msg.attachment = NULL; + *(ProtocolMessage *)this = std::move(msg); http_parser_deinit(this->parser); delete this->parser; diff --git a/src/protocol/HttpMessage.h b/src/protocol/HttpMessage.h index 8cd372ba..bb2b7e82 100644 --- a/src/protocol/HttpMessage.h +++ b/src/protocol/HttpMessage.h @@ -278,12 +278,8 @@ public: /* for std::move() */ public: - HttpRequest(HttpRequest&& req) : HttpMessage(std::move(req)) { } - HttpRequest& operator = (HttpRequest&& req) - { - *(HttpMessage *)this = std::move(req); - return *this; - } + HttpRequest(HttpRequest&& req) = default; + HttpRequest& operator = (HttpRequest&& req) = default; }; class HttpResponse : public HttpMessage @@ -361,12 +357,8 @@ public: /* for std::move() */ public: - HttpResponse(HttpResponse&& resp) : HttpMessage(std::move(resp)) { } - HttpResponse& operator = (HttpResponse&& resp) - { - *(HttpMessage *)this = std::move(resp); - return *this; - } + HttpResponse(HttpResponse&& resp) = default; + HttpResponse& operator = (HttpResponse&& resp) = default; }; } diff --git a/src/protocol/KafkaMessage.cc b/src/protocol/KafkaMessage.cc index 5d14ea22..d4905a94 100644 --- a/src/protocol/KafkaMessage.cc +++ b/src/protocol/KafkaMessage.cc @@ -1620,14 +1620,9 @@ KafkaMessage::~KafkaMessage() } } -KafkaMessage::KafkaMessage(KafkaMessage&& msg) +KafkaMessage::KafkaMessage(KafkaMessage&& msg) : + ProtocolMessage(std::move(msg)) { - this->size_limit = msg.size_limit; - msg.size_limit = (size_t)-1; - - this->attachment = msg.attachment; - msg.attachment = NULL; - this->parser = msg.parser; this->stream = msg.stream; msg.parser = NULL; @@ -1654,11 +1649,7 @@ KafkaMessage& KafkaMessage::operator= (KafkaMessage &&msg) { if (this != &msg) { - this->size_limit = msg.size_limit; - msg.size_limit = (size_t)-1; - - this->attachment = msg.attachment; - msg.attachment = NULL; + *(ProtocolMessage *)this = std::move(msg) kafka_parser_deinit(this->parser); delete this->parser; diff --git a/src/protocol/MySQLMessage.cc b/src/protocol/MySQLMessage.cc index 12135d4d..b3aedb29 100644 --- a/src/protocol/MySQLMessage.cc +++ b/src/protocol/MySQLMessage.cc @@ -22,6 +22,7 @@ #include #include #include +#include #include "MySQLMessage.h" #include "mysql_types.h" @@ -41,14 +42,9 @@ MySQLMessage::~MySQLMessage() } } -MySQLMessage::MySQLMessage(MySQLMessage&& move) +MySQLMessage::MySQLMessage(MySQLMessage&& move) : + ProtocolMessage(std::move(move)) { - this->size_limit = move.size_limit; - move.size_limit = (size_t)-1; - - this->attachment = move.attachment; - move.attachment = NULL; - parser_ = move.parser_; stream_ = move.stream_; seqid_ = move.seqid_; @@ -64,11 +60,7 @@ MySQLMessage& MySQLMessage::operator= (MySQLMessage&& move) { if (this != &move) { - this->size_limit = move.size_limit; - move.size_limit = (size_t)-1; - - this->attachment = move.attachment; - move.attachment = NULL; + *(ProtocolMessage *)this = std::move(move); mysql_parser_deinit(parser_); mysql_stream_deinit(stream_); diff --git a/src/protocol/ProtocolMessage.h b/src/protocol/ProtocolMessage.h index 0d0c4b7c..d0ca9431 100644 --- a/src/protocol/ProtocolMessage.h +++ b/src/protocol/ProtocolMessage.h @@ -73,6 +73,8 @@ public: protected: size_t size_limit; + +private: Attachment *attachment; public: @@ -83,6 +85,28 @@ public: } virtual ~ProtocolMessage() { delete this->attachment; } + +public: + ProtocolMessage(ProtocolMessage&& msg) + { + this->size_limit = msg.size_limit; + msg.size_limit = (size_t)-1; + this->attachment = msg.attachment; + msg.attachment = NULL; + } + + ProtocolMessage& operator = (ProtocolMessage&& msg) + { + if (&msg != this) + { + this->size_limit = msg.size_limit; + msg.size_limit = (size_t)-1; + this->attachment = msg.attachment; + msg.attachment = NULL; + } + + return *this; + } }; } diff --git a/src/protocol/RedisMessage.cc b/src/protocol/RedisMessage.cc index 741e81e5..254d69a0 100644 --- a/src/protocol/RedisMessage.cc +++ b/src/protocol/RedisMessage.cc @@ -485,14 +485,9 @@ std::string RedisValue::debug_string() const return ret; } -RedisMessage::RedisMessage(RedisMessage&& move) +RedisMessage::RedisMessage(RedisMessage&& move) : + ProtocolMessage(std::move(move)) { - this->size_limit = move.size_limit; - move.size_limit = (size_t)-1; - - this->attachment = move.attachment; - move.attachment = NULL; - parser_ = move.parser_; stream_ = move.stream_; cur_size_ = move.cur_size_; @@ -506,8 +501,7 @@ RedisMessage& RedisMessage::operator= (RedisMessage &&move) { if (this != &move) { - this->size_limit = move.size_limit; - move.size_limit = (size_t)-1; + *(ProtocolMessage *)this = std::move(move); redis_parser_deinit(parser_); delete parser_; diff --git a/tutorial/tutorial-10-user_defined_protocol/message.cc b/tutorial/tutorial-10-user_defined_protocol/message.cc index 644ec22f..c99fca22 100644 --- a/tutorial/tutorial-10-user_defined_protocol/message.cc +++ b/tutorial/tutorial-10-user_defined_protocol/message.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include "message.h" namespace protocol @@ -106,11 +107,9 @@ int TutorialMessage::set_message_body(const void *body, size_t size) return 0; } -TutorialMessage::TutorialMessage(TutorialMessage&& msg) +TutorialMessage::TutorialMessage(TutorialMessage&& msg) : + ProtocolMessage(std::move(msg)) { - this->size_limit = msg.size_limit; - msg.size_limit = (size_t)-1; - memcpy(this->head, msg.head, 4); this->head_received = msg.head_received; this->body = msg.body; @@ -126,8 +125,7 @@ TutorialMessage& TutorialMessage::operator = (TutorialMessage&& msg) { if (&msg != this) { - this->size_limit = msg.size_limit; - msg.size_limit = (size_t)-1; + *(ProtocolMessage *)this = std::move(msg); memcpy(this->head, msg.head, 4); this->head_received = msg.head_received; From 7af021bdb5a24e99e10d1eb4f43f057953a06897 Mon Sep 17 00:00:00 2001 From: XieHan Date: Wed, 27 Jan 2021 23:51:54 +0800 Subject: [PATCH 4/4] fix typo --- src/protocol/KafkaMessage.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocol/KafkaMessage.cc b/src/protocol/KafkaMessage.cc index d4905a94..5f121d02 100644 --- a/src/protocol/KafkaMessage.cc +++ b/src/protocol/KafkaMessage.cc @@ -1649,7 +1649,7 @@ KafkaMessage& KafkaMessage::operator= (KafkaMessage &&msg) { if (this != &msg) { - *(ProtocolMessage *)this = std::move(msg) + *(ProtocolMessage *)this = std::move(msg); kafka_parser_deinit(this->parser); delete this->parser;