ob_config_helper.h 12.9 KB
Newer Older
O
oceanbase-admin 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/**
 * Copyright (c) 2021 OceanBase
 * OceanBase CE is licensed under Mulan PubL v2.
 * You can use this software according to the terms and conditions of the Mulan PubL v2.
 * You may obtain a copy of Mulan PubL v2 at:
 *          http://license.coscl.org.cn/MulanPubL-2.0
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PubL v2 for more details.
 */

#ifndef OCEANBASE_SHARE_CONFIG_OB_CONFIG_HELPER_H_
#define OCEANBASE_SHARE_CONFIG_OB_CONFIG_HELPER_H_

#include <arpa/inet.h>
#include "lib/hash/ob_hashmap.h"
#include "lib/hash_func/murmur_hash.h"
#include "share/ob_define.h"

namespace oceanbase {
namespace common {
class ObConfigItem;
class ObConfigIntegralItem;
class ObConfigAlwaysTrue;

class ObConfigChecker {
G
gm 已提交
28
public:
O
oceanbase-admin 已提交
29 30 31 32 33 34
  ObConfigChecker()
  {}
  virtual ~ObConfigChecker()
  {}
  virtual bool check(const ObConfigItem& t) const = 0;

G
gm 已提交
35
private:
O
oceanbase-admin 已提交
36 37 38 39
  DISALLOW_COPY_AND_ASSIGN(ObConfigChecker);
};

class ObConfigAlwaysTrue : public ObConfigChecker {
G
gm 已提交
40
public:
O
oceanbase-admin 已提交
41 42 43 44 45 46 47 48 49 50
  ObConfigAlwaysTrue()
  {}
  virtual ~ObConfigAlwaysTrue()
  {}
  bool check(const ObConfigItem& t) const
  {
    UNUSED(t);
    return true;
  }

G
gm 已提交
51
private:
O
oceanbase-admin 已提交
52 53 54 55
  DISALLOW_COPY_AND_ASSIGN(ObConfigAlwaysTrue);
};

class ObConfigIpChecker : public ObConfigChecker {
G
gm 已提交
56
public:
O
oceanbase-admin 已提交
57 58 59 60 61 62
  ObConfigIpChecker()
  {}
  virtual ~ObConfigIpChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
63
private:
O
oceanbase-admin 已提交
64 65 66 67
  DISALLOW_COPY_AND_ASSIGN(ObConfigIpChecker);
};

class ObConfigConsChecker : public ObConfigChecker {
G
gm 已提交
68
public:
O
oceanbase-admin 已提交
69 70 71 72 73
  ObConfigConsChecker(const ObConfigChecker* left, const ObConfigChecker* right) : left_(left), right_(right)
  {}
  virtual ~ObConfigConsChecker();
  bool check(const ObConfigItem& t) const;

G
gm 已提交
74
private:
O
oceanbase-admin 已提交
75 76 77 78 79 80
  const ObConfigChecker* left_;
  const ObConfigChecker* right_;
  DISALLOW_COPY_AND_ASSIGN(ObConfigConsChecker);
};

class ObConfigBinaryChecker : public ObConfigChecker {
G
gm 已提交
81
public:
O
oceanbase-admin 已提交
82 83 84 85 86 87 88 89
  explicit ObConfigBinaryChecker(const char* str);
  virtual ~ObConfigBinaryChecker()
  {}
  const char* value() const
  {
    return val_;
  }

G
gm 已提交
90
protected:
O
oceanbase-admin 已提交
91 92
  char val_[OB_MAX_CONFIG_VALUE_LEN];

G
gm 已提交
93
private:
O
oceanbase-admin 已提交
94 95 96 97 98 99 100 101 102
  DISALLOW_COPY_AND_ASSIGN(ObConfigBinaryChecker);
};
inline ObConfigBinaryChecker::ObConfigBinaryChecker(const char* str)
{
  int64_t pos = 0;
  (void)databuff_printf(val_, sizeof(val_), pos, "%s", str);
}

class ObConfigGreaterThan : public ObConfigBinaryChecker {
G
gm 已提交
103
public:
O
oceanbase-admin 已提交
104 105 106 107 108 109
  explicit ObConfigGreaterThan(const char* str) : ObConfigBinaryChecker(str)
  {}
  virtual ~ObConfigGreaterThan()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
110
private:
O
oceanbase-admin 已提交
111 112 113 114
  DISALLOW_COPY_AND_ASSIGN(ObConfigGreaterThan);
};

class ObConfigGreaterEqual : public ObConfigBinaryChecker {
G
gm 已提交
115
public:
O
oceanbase-admin 已提交
116 117 118 119 120 121
  explicit ObConfigGreaterEqual(const char* str) : ObConfigBinaryChecker(str)
  {}
  virtual ~ObConfigGreaterEqual()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
122
private:
O
oceanbase-admin 已提交
123 124 125 126
  DISALLOW_COPY_AND_ASSIGN(ObConfigGreaterEqual);
};

class ObConfigLessThan : public ObConfigBinaryChecker {
G
gm 已提交
127
public:
O
oceanbase-admin 已提交
128 129 130 131 132 133
  explicit ObConfigLessThan(const char* str) : ObConfigBinaryChecker(str)
  {}
  virtual ~ObConfigLessThan()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
134
private:
O
oceanbase-admin 已提交
135 136 137 138
  DISALLOW_COPY_AND_ASSIGN(ObConfigLessThan);
};

class ObConfigLessEqual : public ObConfigBinaryChecker {
G
gm 已提交
139
public:
O
oceanbase-admin 已提交
140 141 142 143 144 145
  explicit ObConfigLessEqual(const char* str) : ObConfigBinaryChecker(str)
  {}
  virtual ~ObConfigLessEqual()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
146
private:
O
oceanbase-admin 已提交
147 148 149 150
  DISALLOW_COPY_AND_ASSIGN(ObConfigLessEqual);
};

class ObConfigEvenIntChecker : public ObConfigChecker {
G
gm 已提交
151
public:
O
oceanbase-admin 已提交
152 153 154 155 156 157
  ObConfigEvenIntChecker()
  {}
  virtual ~ObConfigEvenIntChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
158
private:
O
oceanbase-admin 已提交
159 160 161 162
  DISALLOW_COPY_AND_ASSIGN(ObConfigEvenIntChecker);
};

class ObConfigTabletSizeChecker : public ObConfigChecker {
G
gm 已提交
163
public:
O
oceanbase-admin 已提交
164 165 166 167 168 169
  ObConfigTabletSizeChecker()
  {}
  virtual ~ObConfigTabletSizeChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
170
private:
O
oceanbase-admin 已提交
171 172 173 174
  DISALLOW_COPY_AND_ASSIGN(ObConfigTabletSizeChecker);
};

class ObConfigStaleTimeChecker : public ObConfigChecker {
G
gm 已提交
175
public:
O
oceanbase-admin 已提交
176 177 178 179 180 181
  ObConfigStaleTimeChecker()
  {}
  virtual ~ObConfigStaleTimeChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
182
private:
O
oceanbase-admin 已提交
183 184 185 186
  DISALLOW_COPY_AND_ASSIGN(ObConfigStaleTimeChecker);
};

class ObConfigPerfCompressFuncChecker : public ObConfigChecker {
G
gm 已提交
187
public:
O
oceanbase-admin 已提交
188 189 190 191 192 193
  ObConfigPerfCompressFuncChecker()
  {}
  virtual ~ObConfigPerfCompressFuncChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
194
private:
O
oceanbase-admin 已提交
195 196 197 198
  DISALLOW_COPY_AND_ASSIGN(ObConfigPerfCompressFuncChecker);
};

class ObConfigCompressFuncChecker : public ObConfigChecker {
G
gm 已提交
199
public:
O
oceanbase-admin 已提交
200 201 202 203 204 205
  ObConfigCompressFuncChecker()
  {}
  virtual ~ObConfigCompressFuncChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
206
private:
O
oceanbase-admin 已提交
207 208 209 210
  DISALLOW_COPY_AND_ASSIGN(ObConfigCompressFuncChecker);
};

class ObConfigBatchRpcCompressFuncChecker : public ObConfigChecker {
G
gm 已提交
211
public:
O
oceanbase-admin 已提交
212 213 214 215 216 217
  ObConfigBatchRpcCompressFuncChecker()
  {}
  virtual ~ObConfigBatchRpcCompressFuncChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
218
private:
O
oceanbase-admin 已提交
219 220 221 222
  DISALLOW_COPY_AND_ASSIGN(ObConfigBatchRpcCompressFuncChecker);
};

class ObConfigRowFormatChecker : public ObConfigChecker {
G
gm 已提交
223
public:
O
oceanbase-admin 已提交
224 225 226 227 228 229
  ObConfigRowFormatChecker()
  {}
  virtual ~ObConfigRowFormatChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
230
private:
O
oceanbase-admin 已提交
231 232 233 234
  DISALLOW_COPY_AND_ASSIGN(ObConfigRowFormatChecker);
};

class ObConfigCompressOptionChecker : public ObConfigChecker {
G
gm 已提交
235
public:
O
oceanbase-admin 已提交
236 237 238 239 240 241
  ObConfigCompressOptionChecker()
  {}
  virtual ~ObConfigCompressOptionChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
242
private:
O
oceanbase-admin 已提交
243 244 245 246
  DISALLOW_COPY_AND_ASSIGN(ObConfigCompressOptionChecker);
};

class ObConfigUseLargePagesChecker : public ObConfigChecker {
G
gm 已提交
247
public:
O
oceanbase-admin 已提交
248 249 250 251 252 253
  ObConfigUseLargePagesChecker()
  {}
  virtual ~ObConfigUseLargePagesChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
254
private:
O
oceanbase-admin 已提交
255 256 257 258
  DISALLOW_COPY_AND_ASSIGN(ObConfigUseLargePagesChecker);
};

class ObConfigLogLevelChecker : public ObConfigChecker {
G
gm 已提交
259
public:
O
oceanbase-admin 已提交
260 261 262 263 264
  ObConfigLogLevelChecker()
  {}
  virtual ~ObConfigLogLevelChecker(){};
  bool check(const ObConfigItem& t) const;

G
gm 已提交
265
private:
O
oceanbase-admin 已提交
266 267 268 269
  DISALLOW_COPY_AND_ASSIGN(ObConfigLogLevelChecker);
};

class ObConfigWorkAreaPolicyChecker : public ObConfigChecker {
G
gm 已提交
270
public:
O
oceanbase-admin 已提交
271 272 273 274 275
  ObConfigWorkAreaPolicyChecker()
  {}
  virtual ~ObConfigWorkAreaPolicyChecker(){};
  bool check(const ObConfigItem& t) const;

G
gm 已提交
276
private:
O
oceanbase-admin 已提交
277 278 279
  static constexpr const char* MANUAL = "MANUAL";
  static constexpr const char* AUTO = "AUTO";

G
gm 已提交
280
private:
O
oceanbase-admin 已提交
281 282 283 284
  DISALLOW_COPY_AND_ASSIGN(ObConfigWorkAreaPolicyChecker);
};

class ObConfigBackupRegionChecker : public ObConfigChecker {
G
gm 已提交
285
public:
O
oceanbase-admin 已提交
286 287 288 289 290 291 292 293 294 295 296
  ObConfigBackupRegionChecker()
  {}
  virtual ~ObConfigBackupRegionChecker()
  {}
  // TODO: backup fix it
  bool check(const ObConfigItem& t) const
  {
    UNUSED(t);
    return true;
  }

G
gm 已提交
297
private:
O
oceanbase-admin 已提交
298 299 300 301
  DISALLOW_COPY_AND_ASSIGN(ObConfigBackupRegionChecker);
};

class ObConfigLogArchiveOptionsChecker : public ObConfigChecker {
G
gm 已提交
302
public:
O
oceanbase-admin 已提交
303 304 305 306 307 308 309
  ObConfigLogArchiveOptionsChecker()
  {}
  virtual ~ObConfigLogArchiveOptionsChecker()
  {}
  // TODO: backup fix it
  bool check(const ObConfigItem& t) const;

G
gm 已提交
310
private:
O
oceanbase-admin 已提交
311 312 313 314
  DISALLOW_COPY_AND_ASSIGN(ObConfigLogArchiveOptionsChecker);
};

class ObConfigRpcChecksumChecker : public ObConfigChecker {
G
gm 已提交
315
public:
O
oceanbase-admin 已提交
316 317 318 319 320
  ObConfigRpcChecksumChecker()
  {}
  virtual ~ObConfigRpcChecksumChecker(){};
  bool check(const ObConfigItem& t) const;

G
gm 已提交
321
private:
O
oceanbase-admin 已提交
322 323 324 325
  DISALLOW_COPY_AND_ASSIGN(ObConfigRpcChecksumChecker);
};

class ObConfigMemoryLimitChecker : public ObConfigChecker {
G
gm 已提交
326
public:
O
oceanbase-admin 已提交
327 328 329 330 331
  ObConfigMemoryLimitChecker()
  {}
  virtual ~ObConfigMemoryLimitChecker(){};
  bool check(const ObConfigItem& t) const;

G
gm 已提交
332
private:
O
oceanbase-admin 已提交
333 334 335 336
  DISALLOW_COPY_AND_ASSIGN(ObConfigMemoryLimitChecker);
};

class ObConfigUpgradeStageChecker : public ObConfigChecker {
G
gm 已提交
337
public:
O
oceanbase-admin 已提交
338 339 340 341 342 343 344
  ObConfigUpgradeStageChecker()
  {}
  virtual ~ObConfigUpgradeStageChecker()
  {}

  bool check(const ObConfigItem& t) const;

G
gm 已提交
345
private:
O
oceanbase-admin 已提交
346 347 348 349
  DISALLOW_COPY_AND_ASSIGN(ObConfigUpgradeStageChecker);
};

class ObConfigPlanCacheGCChecker : public ObConfigChecker {
G
gm 已提交
350
public:
O
oceanbase-admin 已提交
351 352 353 354 355 356 357
  ObConfigPlanCacheGCChecker()
  {}
  virtual ~ObConfigPlanCacheGCChecker()
  {}

  bool check(const ObConfigItem& t) const;

G
gm 已提交
358
private:
O
oceanbase-admin 已提交
359 360 361 362
  DISALLOW_COPY_AND_ASSIGN(ObConfigPlanCacheGCChecker);
};

class ObConfigQueryRateLimitChecker : public ObConfigChecker {
G
gm 已提交
363
public:
O
oceanbase-admin 已提交
364 365 366 367 368 369 370 371
  ObConfigQueryRateLimitChecker()
  {}
  virtual ~ObConfigQueryRateLimitChecker(){};
  bool check(const ObConfigItem& t) const;

  static constexpr int64_t MAX_QUERY_RATE_LIMIT = 200000;
  static constexpr int64_t MIN_QUERY_RATE_LIMIT = 10;

G
gm 已提交
372
private:
O
oceanbase-admin 已提交
373 374 375 376
  DISALLOW_COPY_AND_ASSIGN(ObConfigQueryRateLimitChecker);
};

class ObConfigPartitionBalanceStrategyFuncChecker : public ObConfigChecker {
G
gm 已提交
377
public:
O
oceanbase-admin 已提交
378 379 380 381 382 383 384 385
  enum PartitionBalanceStrategy {
    AUTO = 0,
    STANDARD,
    DISK_UTILIZATION_ONLY,
    PARTITION_BALANCE_STRATEGY_MAX,
  };
  static const char* balance_strategy[PARTITION_BALANCE_STRATEGY_MAX];

G
gm 已提交
386
public:
O
oceanbase-admin 已提交
387 388 389 390 391 392
  ObConfigPartitionBalanceStrategyFuncChecker()
  {}
  virtual ~ObConfigPartitionBalanceStrategyFuncChecker()
  {}
  bool check(const ObConfigItem& t) const;

G
gm 已提交
393
private:
O
oceanbase-admin 已提交
394 395 396
  DISALLOW_COPY_AND_ASSIGN(ObConfigPartitionBalanceStrategyFuncChecker);
};

397 398 399 400 401 402 403 404 405 406 407 408
class ObDataStorageErrorToleranceTimeChecker : public ObConfigChecker {
public:
  ObDataStorageErrorToleranceTimeChecker()
  {}
  virtual ~ObDataStorageErrorToleranceTimeChecker()
  {}
  bool check(const ObConfigItem& t) const;

private:
  DISABLE_COPY_ASSIGN(ObDataStorageErrorToleranceTimeChecker);
};

O
obdev 已提交
409 410 411 412 413 414 415 416 417 418 419
class ObTTLDutyDurationChecker : public ObConfigChecker {
public:
  ObTTLDutyDurationChecker()
  {}
  virtual ~ObTTLDutyDurationChecker(){};
  bool check(const ObConfigItem& t) const;

private:
  DISALLOW_COPY_AND_ASSIGN(ObTTLDutyDurationChecker);
};

420 421 422 423 424 425 426 427 428 429 430
class ObConfigLogDiskSizeChecker : public ObConfigChecker {
public:
  ObConfigLogDiskSizeChecker()
  {}
  virtual ~ObConfigLogDiskSizeChecker(){};
  bool check(const ObConfigItem& t) const;

private:
  DISALLOW_COPY_AND_ASSIGN(ObConfigLogDiskSizeChecker);
};

O
oceanbase-admin 已提交
431 432
// config item container
class ObConfigStringKey {
G
gm 已提交
433
public:
O
oceanbase-admin 已提交
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454
  ObConfigStringKey()
  {
    MEMSET(str_, 0, sizeof(str_));
  }
  explicit ObConfigStringKey(const char* str);
  explicit ObConfigStringKey(const ObString& string);
  virtual ~ObConfigStringKey()
  {}
  uint64_t hash() const;

  // case unsensitive
  bool operator==(const ObConfigStringKey& str) const
  {
    return 0 == STRCASECMP(str.str_, this->str_);
  }

  const char* str() const
  {
    return str_;
  }

G
gm 已提交
455
private:
O
oceanbase-admin 已提交
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481
  char str_[OB_MAX_CONFIG_NAME_LEN];
  // DISALLOW_COPY_AND_ASSIGN(ObConfigStringKey);
};
inline ObConfigStringKey::ObConfigStringKey(const char* str)
{
  int64_t pos = 0;
  (void)databuff_printf(str_, sizeof(str_), pos, "%s", str);
}

inline ObConfigStringKey::ObConfigStringKey(const ObString& string)
{
  int64_t pos = 0;
  (void)databuff_printf(str_, sizeof(str_), pos, "%.*s", string.length(), string.ptr());
}
inline uint64_t ObConfigStringKey::hash() const
{
  // if str_ is null, hash value will be 0
  uint64_t h = 0;
  if (OB_LIKELY(NULL != str_)) {
    murmurhash(str_, (int32_t)STRLEN(str_), 0);
  }
  return h;
}

template <class Key, class Value, int num>
class __ObConfigContainer : public hash::ObHashMap<Key, Value*> {
G
gm 已提交
482
public:
O
oceanbase-admin 已提交
483 484 485 486 487 488 489 490 491
  __ObConfigContainer()
  {
    this->create(num,
        oceanbase::common::ObModIds::OB_HASH_BUCKET_CONF_CONTAINER,
        oceanbase::common::ObModIds::OB_HASH_NODE_CONF_CONTAINER);
  }
  virtual ~__ObConfigContainer()
  {}

G
gm 已提交
492
private:
O
oceanbase-admin 已提交
493 494 495 496
  DISALLOW_COPY_AND_ASSIGN(__ObConfigContainer);
};

class ObConfigIntParser {
G
gm 已提交
497
public:
O
oceanbase-admin 已提交
498 499 500 501 502 503
  ObConfigIntParser()
  {}
  virtual ~ObConfigIntParser()
  {}
  static int64_t get(const char* str, bool& valid);

G
gm 已提交
504
private:
O
oceanbase-admin 已提交
505 506 507 508
  DISALLOW_COPY_AND_ASSIGN(ObConfigIntParser);
};

class ObConfigCapacityParser {
G
gm 已提交
509
public:
O
oceanbase-admin 已提交
510 511 512 513 514 515
  ObConfigCapacityParser()
  {}
  virtual ~ObConfigCapacityParser()
  {}
  static int64_t get(const char* str, bool& valid);

G
gm 已提交
516
private:
O
oceanbase-admin 已提交
517 518 519 520 521 522 523 524 525 526 527 528 529
  enum CAP_UNIT {
    // shift bits between unit of byte and that
    CAP_B = 0,
    CAP_KB = 10,
    CAP_MB = 20,
    CAP_GB = 30,
    CAP_TB = 40,
    CAP_PB = 50,
  };
  DISALLOW_COPY_AND_ASSIGN(ObConfigCapacityParser);
};

class ObConfigReadableIntParser {
G
gm 已提交
530
public:
O
oceanbase-admin 已提交
531 532 533 534 535 536
  ObConfigReadableIntParser()
  {}
  virtual ~ObConfigReadableIntParser()
  {}
  static int64_t get(const char* str, bool& valid);

G
gm 已提交
537
private:
O
oceanbase-admin 已提交
538 539 540 541 542 543 544 545
  enum INT_UNIT {
    UNIT_K = 1000,
    UNIT_M = 1000000,
  };
  DISALLOW_COPY_AND_ASSIGN(ObConfigReadableIntParser);
};

class ObConfigTimeParser {
G
gm 已提交
546
public:
O
oceanbase-admin 已提交
547 548 549 550 551 552
  ObConfigTimeParser()
  {}
  ~ObConfigTimeParser()
  {}
  static int64_t get(const char* str, bool& valid);

G
gm 已提交
553
private:
O
oceanbase-admin 已提交
554 555 556 557 558 559 560 561 562 563 564
  enum TIME_UNIT {
    TIME_MICROSECOND = 1UL,
    TIME_MILLISECOND = 1000UL,
    TIME_SECOND = 1000 * 1000UL,
    TIME_MINUTE = 60 * 1000 * 1000UL,
    TIME_HOUR = 60 * 60 * 1000 * 1000UL,
    TIME_DAY = 24 * 60 * 60 * 1000 * 1000UL,
  };
  DISALLOW_COPY_AND_ASSIGN(ObConfigTimeParser);
};

565 566 567 568
struct ObConfigBoolParser {
  static bool get(const char* str, bool& valid);
};

O
oceanbase-admin 已提交
569 570 571 572 573
typedef __ObConfigContainer<ObConfigStringKey, ObConfigItem, OB_MAX_CONFIG_NUMBER> ObConfigContainer;
}  // namespace common
}  // namespace oceanbase

#endif  // OCEANBASE_SHARE_CONFIG_OB_CONFIG_HELPER_H_