From ac44a1f7e9bdffb88e495b635fdc1a837c8697ea Mon Sep 17 00:00:00 2001 From: Roman Gershman Date: Mon, 23 Jan 2023 14:06:17 +0200 Subject: [PATCH] fix(server): zunion now supports variadic arguments (#717) 1. Before that we did no support a real syntax with argument, now we do. 2. Fix warnings. Signed-off-by: Roman Gershman Signed-off-by: Roman Gershman --- src/server/dfly_main.cc | 10 ++- src/server/server_family.cc | 2 +- src/server/transaction.cc | 13 +++- src/server/zset_family.cc | 131 +++++++++++++++++---------------- src/server/zset_family_test.cc | 71 +++++++++++------- 5 files changed, 131 insertions(+), 96 deletions(-) diff --git a/src/server/dfly_main.cc b/src/server/dfly_main.cc index 01cd3afdc..53f26a824 100644 --- a/src/server/dfly_main.cc +++ b/src/server/dfly_main.cc @@ -156,13 +156,19 @@ std::optional GetRemoteVersion(ProactorBase* proactor, SSL_CTX* ssl static bool is_logged{false}; if (!is_logged) { is_logged = true; + +#if (OPENSSL_VERSION_NUMBER >= 0x30000000L) + const char* func_err = "ssl_internal_error"; +#else + const char* func_err = ERR_func_error_string(ec.value()); +#endif + // Unfortunately AsioStreamAdapter looses the original error category // because std::error_code can not be converted into boost::system::error_code. // It's fixed in later versions of Boost, but for now we assume it's from TLS. LOG(WARNING) << "Remote version - HTTP GET error [" << host << ":" << service << resource << "], error: " << ec.value(); - LOG(WARNING) << "ssl error: " << ERR_func_error_string(ec.value()) << "/" - << ERR_reason_error_string(ec.value()); + LOG(WARNING) << "ssl error: " << func_err << "/" << ERR_reason_error_string(ec.value()); } } diff --git a/src/server/server_family.cc b/src/server/server_family.cc index a62e6baed..03bdf590e 100644 --- a/src/server/server_family.cc +++ b/src/server/server_family.cc @@ -1363,7 +1363,7 @@ void ServerFamily::Info(CmdArgList args, ConnectionContext* cntx) { append("role", "master"); append("connected_slaves", m.conn_stats.num_replicas); auto replicas = dfly_cmd_->GetReplicasRoleInfo(); - for (auto i = 0; i < replicas.size(); i++) { + for (size_t i = 0; i < replicas.size(); i++) { auto& r = replicas[i]; // e.g. slave0:ip=172.19.0.3,port=6379 append(StrCat("slave", i), StrCat("ip=", r.address, ",port=", r.listening_port)); diff --git a/src/server/transaction.cc b/src/server/transaction.cc index 8b427deb9..d2674298c 100644 --- a/src/server/transaction.cc +++ b/src/server/transaction.cc @@ -988,7 +988,7 @@ ArgSlice Transaction::GetShardArgs(ShardId sid) const { // from local index back to original arg index skipping the command. // i.e. returns (first_key_pos -1) or bigger. size_t Transaction::ReverseArgIndex(ShardId shard_id, size_t arg_index) const { - if (unique_shard_cnt_ == 1) // mget: 0->0, 1->1. zunionstore has 0->2 + if (unique_shard_cnt_ == 1) return reverse_index_[arg_index]; const auto& sd = shard_data_[shard_id]; @@ -1264,20 +1264,25 @@ OpResult DetermineKeys(const CommandId* cid, CmdArgList args) { int num_custom_keys = -1; if (cid->opt_mask() & CO::VARIADIC_KEYS) { + // ZUNION/INTER [ ...] + // EVAL