YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/yb/yql/redis/redisserver/redis_server.cc
Line
Count
Source (jump to first uncovered line)
1
// Copyright (c) YugaByte, Inc.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
4
// in compliance with the License.  You may obtain a copy of the License at
5
//
6
// http://www.apache.org/licenses/LICENSE-2.0
7
//
8
// Unless required by applicable law or agreed to in writing, software distributed under the License
9
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
10
// or implied.  See the License for the specific language governing permissions and limitations
11
// under the License.
12
//
13
14
#include "yb/yql/redis/redisserver/redis_server.h"
15
16
#include "yb/tserver/tablet_server_interface.h"
17
18
#include "yb/util/flag_tags.h"
19
#include "yb/util/size_literals.h"
20
21
#include "yb/yql/redis/redisserver/redis_rpc.h"
22
#include "yb/yql/redis/redisserver/redis_service.h"
23
24
using yb::rpc::ServiceIf;
25
using namespace yb::size_literals;
26
27
DEFINE_int32(redis_svc_queue_length, 5000,
28
             "RPC queue length for redis service");
29
TAG_FLAG(redis_svc_queue_length, advanced);
30
31
DEFINE_int64(redis_rpc_block_size, 1_MB, "Redis RPC block size");
32
DEFINE_int64(redis_rpc_memory_limit, 0, "Redis RPC memory limit");
33
34
namespace yb {
35
namespace redisserver {
36
37
class RedisConnnectionContextFactory : public rpc::ConnectionContextFactory {
38
 public:
39
  explicit RedisConnnectionContextFactory(
40
      const std::shared_ptr<MemTracker>& parent_mem_tracker)
41
      : rpc::ConnectionContextFactory(
42
          FLAGS_redis_rpc_memory_limit, RedisConnectionContext::Name(), parent_mem_tracker),
43
2.93k
        allocator_(FLAGS_redis_rpc_block_size, buffer_tracker_) {
44
2.93k
  }
45
46
0
  virtual ~RedisConnnectionContextFactory() = default;
47
48
1.51k
  std::unique_ptr<rpc::ConnectionContext> Create(size_t) override {
49
1.51k
    return std::make_unique<RedisConnectionContext>(&allocator_, call_tracker_);
50
1.51k
  }
51
52
 private:
53
  rpc::GrowableBufferAllocator allocator_;
54
};
55
56
RedisServer::RedisServer(const RedisServerOptions& opts, tserver::TabletServerIf* tserver)
57
    : RpcAndWebServerBase(
58
          "RedisServer", opts, "yb.redisserver",
59
          MemTracker::CreateTracker(
60
              "Redis", tserver ? tserver->mem_tracker() : MemTracker::GetRootTracker(),
61
              AddToParent::kTrue, CreateMetrics::kFalse)),
62
      opts_(opts),
63
2.93k
      tserver_(tserver) {
64
2.93k
  SetConnectionContextFactory(std::make_shared<RedisConnnectionContextFactory>(
65
2.93k
      mem_tracker()->parent()));
66
2.93k
}
67
68
2.93k
Status RedisServer::Start() {
69
2.93k
  RETURN_NOT_OK(server::RpcAndWebServerBase::Init());
70
71
2.93k
  std::unique_ptr<ServiceIf> redis_service(new RedisServiceImpl(this, opts_.master_addresses_flag));
72
2.93k
  RETURN_NOT_OK(RegisterService(FLAGS_redis_svc_queue_length, std::move(redis_service)));
73
74
2.93k
  RETURN_NOT_OK(server::RpcAndWebServerBase::Start());
75
76
2.93k
  return Status::OK();
77
2.93k
}
78
79
}  // namespace redisserver
80
}  // namespace yb