From 638c35a6dc9fe62555cfc33e320a07953c073c2b Mon Sep 17 00:00:00 2001 From: xiehan <52160700+Barenboim@users.noreply.github.com> Date: Thu, 11 Mar 2021 17:57:44 +0800 Subject: [PATCH 1/5] Fix redis message warning --- src/protocol/RedisMessage.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/protocol/RedisMessage.cc b/src/protocol/RedisMessage.cc index 740bb2ec..46eaf50b 100644 --- a/src/protocol/RedisMessage.cc +++ b/src/protocol/RedisMessage.cc @@ -663,7 +663,7 @@ bool RedisRequest::get_params(std::vector& params) const #define REDIS_ASK_COMMAND "ASKING" #define REDIS_ASK_REQUEST "*1\r\n$6\r\nASKING\r\n" -#define REDIS_ASK_RESPONSE "+OK\r\n" +#define REDIS_OK_RESPONSE "+OK\r\n" int RedisRequest::encode(struct iovec vectors[], int max) { @@ -684,6 +684,7 @@ int RedisRequest::append(const void *buf, size_t *size) if (ret > 0) { std::string command; + if (get_command(command) && strcasecmp(command.c_str(), REDIS_ASK_COMMAND) == 0) { @@ -691,8 +692,8 @@ int RedisRequest::append(const void *buf, size_t *size) redis_parser_init(this->parser_); set_asking(true); - size_t size = strlen(REDIS_ASK_RESPONSE); - if (this->feedback(REDIS_ASK_RESPONSE, size) != size) + ret = this->feedback(REDIS_ASK_RESPONSE, strlen(REDIS_OK_RESPONSE)); + if (ret != strlen(REDIS_OK_RESPONSE)) { errno = EAGAIN; ret = -1; From a40bf0a1244519fd0ff70f062b7b1b451c77dcd3 Mon Sep 17 00:00:00 2001 From: xiehan <52160700+Barenboim@users.noreply.github.com> Date: Thu, 11 Mar 2021 18:03:57 +0800 Subject: [PATCH 2/5] Update RedisMessage.cc --- src/protocol/RedisMessage.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocol/RedisMessage.cc b/src/protocol/RedisMessage.cc index 46eaf50b..cb63d2dd 100644 --- a/src/protocol/RedisMessage.cc +++ b/src/protocol/RedisMessage.cc @@ -692,7 +692,7 @@ int RedisRequest::append(const void *buf, size_t *size) redis_parser_init(this->parser_); set_asking(true); - ret = this->feedback(REDIS_ASK_RESPONSE, strlen(REDIS_OK_RESPONSE)); + ret = this->feedback(REDIS_OK_RESPONSE, strlen(REDIS_OK_RESPONSE)); if (ret != strlen(REDIS_OK_RESPONSE)) { errno = EAGAIN; From 1ff698d823522eb0a038a3d243b61bbc81292594 Mon Sep 17 00:00:00 2001 From: xiehan <52160700+Barenboim@users.noreply.github.com> Date: Mon, 15 Mar 2021 18:37:33 +0800 Subject: [PATCH 3/5] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f12fecee..69a245f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ set(CMAKE_SKIP_RPATH TRUE) project( workflow - VERSION 0.9.4 + VERSION 0.9.5 LANGUAGES C CXX ) From c0848624983f9f625b43bfcc9233343e05f93835 Mon Sep 17 00:00:00 2001 From: holmes1412 Date: Wed, 17 Mar 2021 20:58:22 +0800 Subject: [PATCH 4/5] fix mysql as_int() as_ulonglong() length bug --- src/nameservice/WFServiceGovernance.cc | 11 ++++++++++- src/protocol/MySQLResult.inl | 5 +++-- src/protocol/mysql_types.h | 7 ++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/nameservice/WFServiceGovernance.cc b/src/nameservice/WFServiceGovernance.cc index d33eaade..5996e229 100644 --- a/src/nameservice/WFServiceGovernance.cc +++ b/src/nameservice/WFServiceGovernance.cc @@ -197,8 +197,17 @@ void WFServiceGovernance::success(RouteManager::RouteResult *result, WFNSTracing *tracing, CommTarget *target) { + EndpointAddress *server; + if (tracing->deleter) + { + auto *v = (std::vector *)(tracing->data); + server = (*v)[v->size() - 1]; + } + else + server = (EndpointAddress *)tracing->data; + pthread_rwlock_rdlock(&this->rwlock); - this->recover_server_from_breaker((EndpointAddress *)tracing->data); + this->recover_server_from_breaker(server); pthread_rwlock_unlock(&this->rwlock); WFDNSResolver::success(result, tracing, target); diff --git a/src/protocol/MySQLResult.inl b/src/protocol/MySQLResult.inl index 3226bb5e..f48c4a3a 100644 --- a/src/protocol/MySQLResult.inl +++ b/src/protocol/MySQLResult.inl @@ -174,7 +174,8 @@ inline int MySQLCell::as_int() const { if (!this->is_int()) return 0; - char num[MYSQL_NUM_STR_LENGTH + 1]; + + char num[MYSQL_INT_STR_LENGTH + 1]; memcpy(num, this->data, this->len); num[this->len] = '\0'; return atoi(num); @@ -222,7 +223,7 @@ inline unsigned long long MySQLCell::as_ulonglong() const if (!this->is_ulonglong()) return 0; - char num[MYSQL_NUM_STR_LENGTH + 1]; + char num[MYSQL_LONG_STR_LENGTH + 1]; memcpy(num, this->data, this->len); num[this->len] = '\0'; return strtoull(num, NULL, 10); diff --git a/src/protocol/mysql_types.h b/src/protocol/mysql_types.h index 48b5406d..ab6199f6 100644 --- a/src/protocol/mysql_types.h +++ b/src/protocol/mysql_types.h @@ -22,9 +22,10 @@ #define MYSQL_STATE_LENGTH 5 #define MYSQL_STATE_DEFAULT "HY000" -#define MYSQL_NUM_STR_LENGTH 8 // 8 Length-Encoded Integer -#define MYSQL_FLOAT_STR_LENGTH 7 // 7 for float -#define MYSQL_DOUBLE_STR_LENGTH 19 // 19 for long double +#define MYSQL_INT_STR_LENGTH 11 // 10 for unsigned int +#define MYSQL_LONG_STR_LENGTH 21 // 20 for unsigned long long +#define MYSQL_FLOAT_STR_LENGTH 7 // 7 for float +#define MYSQL_DOUBLE_STR_LENGTH 19 // 19 for long double // may be set by server in EOF/OK packet #define MYSQL_SERVER_MORE_RESULTS_EXIST 0x0008 From d9db40fefdf03620b8de6252b469ebe321fc9ff6 Mon Sep 17 00:00:00 2001 From: holmes1412 Date: Wed, 17 Mar 2021 21:00:36 +0800 Subject: [PATCH 5/5] rollback version 0.9.4 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 69a245f8..f12fecee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ set(CMAKE_SKIP_RPATH TRUE) project( workflow - VERSION 0.9.5 + VERSION 0.9.4 LANGUAGES C CXX )