internal_stats.h 20.3 KB
Newer Older
1
//  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
S
Siying Dong 已提交
2 3 4
//  This source code is licensed under both the GPLv2 (found in the
//  COPYING file in the root directory) and Apache 2.0 License
//  (found in the LICENSE.Apache file in the root directory).
I
Igor Canadi 已提交
5 6 7 8 9 10 11
//
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.
//

#pragma once
12
#include <map>
I
Igor Canadi 已提交
13
#include <string>
14 15 16
#include <vector>

#include "db/version_set.h"
I
Igor Canadi 已提交
17

18 19
class ColumnFamilyData;

I
Igor Canadi 已提交
20
namespace rocksdb {
21 22

class MemTableList;
23
class DBImpl;
24

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
// Config for retrieving a property's value.
struct DBPropertyInfo {
  bool need_out_of_mutex;

  // gcc had an internal error for initializing union of pointer-to-member-
  // functions. Workaround is to populate exactly one of the following function
  // pointers with a non-nullptr value.

  // @param value Value-result argument for storing the property's string value
  // @param suffix Argument portion of the property. For example, suffix would
  //      be "5" for the property "rocksdb.num-files-at-level5". So far, only
  //      certain string properties take an argument.
  bool (InternalStats::*handle_string)(std::string* value, Slice suffix);

  // @param value Value-result argument for storing the property's uint64 value
  // @param db Many of the int properties rely on DBImpl methods.
  // @param version Version is needed in case the property is retrieved without
  //      holding db mutex, which is only supported for int properties.
  bool (InternalStats::*handle_int)(uint64_t* value, DBImpl* db,
                                    Version* version);
45 46 47

  // @param props Map of general properties to populate
  bool (InternalStats::*handle_map)(std::map<std::string, std::string>* props);
48 49
};

50
extern const DBPropertyInfo* GetPropertyInfo(const Slice& property);
51 52

#ifndef ROCKSDB_LITE
T
Tomas Kolda 已提交
53
#undef SCORE
54 55 56 57
enum class LevelStatType {
  INVALID = 0,
  NUM_FILES,
  COMPACTED_FILES,
58
  SIZE_BYTES,
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
  SCORE,
  READ_GB,
  RN_GB,
  RNP1_GB,
  WRITE_GB,
  W_NEW_GB,
  MOVED_GB,
  WRITE_AMP,
  READ_MBPS,
  WRITE_MBPS,
  COMP_SEC,
  COMP_COUNT,
  AVG_SEC,
  KEY_IN,
  KEY_DROP,
  TOTAL  // total number of types
};

struct LevelStat {
  // This what will be L?.property_name in the flat map returned to the user
  std::string property_name;
  // This will be what we will print in the header in the cli
  std::string header_name;
};

I
Igor Canadi 已提交
84 85
class InternalStats {
 public:
86 87
  static const std::map<LevelStatType, LevelStat> compaction_level_stats;

88
  enum InternalCFStatsType {
89 90
    LEVEL0_SLOWDOWN_TOTAL,
    LEVEL0_SLOWDOWN_WITH_COMPACTION,
I
Igor Canadi 已提交
91
    MEMTABLE_COMPACTION,
92
    MEMTABLE_SLOWDOWN,
93 94
    LEVEL0_NUM_FILES_TOTAL,
    LEVEL0_NUM_FILES_WITH_COMPACTION,
95
    SOFT_PENDING_COMPACTION_BYTES_LIMIT,
96
    HARD_PENDING_COMPACTION_BYTES_LIMIT,
I
Igor Canadi 已提交
97
    WRITE_STALLS_ENUM_MAX,
98
    BYTES_FLUSHED,
99
    BYTES_INGESTED_ADD_FILE,
100 101 102
    INGESTED_NUM_FILES_TOTAL,
    INGESTED_LEVEL0_NUM_FILES_TOTAL,
    INGESTED_NUM_KEYS_TOTAL,
103
    INTERNAL_CF_STATS_ENUM_MAX,
I
Igor Canadi 已提交
104 105
  };

106 107 108 109
  enum InternalDBStatsType {
    WAL_FILE_BYTES,
    WAL_FILE_SYNCED,
    BYTES_WRITTEN,
S
sdong 已提交
110
    NUMBER_KEYS_WRITTEN,
111 112 113
    WRITE_DONE_BY_OTHER,
    WRITE_DONE_BY_SELF,
    WRITE_WITH_WAL,
S
sdong 已提交
114
    WRITE_STALL_MICROS,
115 116 117
    INTERNAL_DB_STATS_ENUM_MAX,
  };

118
  InternalStats(int num_levels, Env* env, ColumnFamilyData* cfd)
119 120 121
      : db_stats_{},
        cf_stats_value_{},
        cf_stats_count_{},
122
        comp_stats_(num_levels),
123
        file_read_latency_(num_levels),
124
        bg_error_count_(0),
I
Igor Canadi 已提交
125 126
        number_levels_(num_levels),
        env_(env),
127
        cfd_(cfd),
128
        started_at_(env->NowMicros()) {}
I
Igor Canadi 已提交
129

130
  // Per level compaction stats.  comp_stats_[level] stores the stats for
I
Igor Canadi 已提交
131 132 133 134
  // compactions that produced data for the specified "level".
  struct CompactionStats {
    uint64_t micros;

135 136
    // The number of bytes read from all non-output levels
    uint64_t bytes_read_non_output_levels;
I
Igor Canadi 已提交
137

138 139
    // The number of bytes read from the compaction output level.
    uint64_t bytes_read_output_level;
I
Igor Canadi 已提交
140

141
    // Total number of bytes written during compaction
142
    uint64_t bytes_written;
I
Igor Canadi 已提交
143

144
    // Total number of bytes moved to the output level
145 146
    uint64_t bytes_moved;

147 148
    // The number of compaction input files in all non-output levels.
    int num_input_files_in_non_output_levels;
I
Igor Canadi 已提交
149

150 151
    // The number of compaction input files in the output level.
    int num_input_files_in_output_level;
I
Igor Canadi 已提交
152

153 154
    // The number of compaction output files.
    int num_output_files;
I
Igor Canadi 已提交
155

156
    // Total incoming entries during compaction between levels N and N+1
S
sdong 已提交
157
    uint64_t num_input_records;
158 159 160

    // Accumulated diff number of entries
    // (num input entries - num output entires) for compaction  levels N and N+1
S
sdong 已提交
161
    uint64_t num_dropped_records;
162

I
Igor Canadi 已提交
163 164 165
    // Number of compactions done
    int count;

I
Igor Canadi 已提交
166
    explicit CompactionStats(int _count = 0)
I
Igor Canadi 已提交
167
        : micros(0),
168 169
          bytes_read_non_output_levels(0),
          bytes_read_output_level(0),
I
Igor Canadi 已提交
170
          bytes_written(0),
171
          bytes_moved(0),
172 173 174
          num_input_files_in_non_output_levels(0),
          num_input_files_in_output_level(0),
          num_output_files(0),
175 176
          num_input_records(0),
          num_dropped_records(0),
I
Igor Canadi 已提交
177
          count(_count) {}
I
Igor Canadi 已提交
178

179 180
    explicit CompactionStats(const CompactionStats& c)
        : micros(c.micros),
181 182
          bytes_read_non_output_levels(c.bytes_read_non_output_levels),
          bytes_read_output_level(c.bytes_read_output_level),
183
          bytes_written(c.bytes_written),
184
          bytes_moved(c.bytes_moved),
185 186 187 188 189
          num_input_files_in_non_output_levels(
              c.num_input_files_in_non_output_levels),
          num_input_files_in_output_level(
              c.num_input_files_in_output_level),
          num_output_files(c.num_output_files),
190 191
          num_input_records(c.num_input_records),
          num_dropped_records(c.num_dropped_records),
192 193
          count(c.count) {}

S
Siying Dong 已提交
194 195 196 197 198 199 200 201 202 203 204 205 206 207
    void Clear() {
      this->micros = 0;
      this->bytes_read_non_output_levels = 0;
      this->bytes_read_output_level = 0;
      this->bytes_written = 0;
      this->bytes_moved = 0;
      this->num_input_files_in_non_output_levels = 0;
      this->num_input_files_in_output_level = 0;
      this->num_output_files = 0;
      this->num_input_records = 0;
      this->num_dropped_records = 0;
      this->count = 0;
    }

I
Igor Canadi 已提交
208 209
    void Add(const CompactionStats& c) {
      this->micros += c.micros;
210 211
      this->bytes_read_non_output_levels += c.bytes_read_non_output_levels;
      this->bytes_read_output_level += c.bytes_read_output_level;
I
Igor Canadi 已提交
212
      this->bytes_written += c.bytes_written;
213
      this->bytes_moved += c.bytes_moved;
214 215 216 217 218
      this->num_input_files_in_non_output_levels +=
          c.num_input_files_in_non_output_levels;
      this->num_input_files_in_output_level +=
          c.num_input_files_in_output_level;
      this->num_output_files += c.num_output_files;
219 220
      this->num_input_records += c.num_input_records;
      this->num_dropped_records += c.num_dropped_records;
L
Lei Jin 已提交
221
      this->count += c.count;
I
Igor Canadi 已提交
222
    }
223 224 225

    void Subtract(const CompactionStats& c) {
      this->micros -= c.micros;
226 227
      this->bytes_read_non_output_levels -= c.bytes_read_non_output_levels;
      this->bytes_read_output_level -= c.bytes_read_output_level;
228
      this->bytes_written -= c.bytes_written;
229
      this->bytes_moved -= c.bytes_moved;
230 231 232 233 234
      this->num_input_files_in_non_output_levels -=
          c.num_input_files_in_non_output_levels;
      this->num_input_files_in_output_level -=
          c.num_input_files_in_output_level;
      this->num_output_files -= c.num_output_files;
235 236
      this->num_input_records -= c.num_input_records;
      this->num_dropped_records -= c.num_dropped_records;
237 238
      this->count -= c.count;
    }
I
Igor Canadi 已提交
239 240
  };

S
Siying Dong 已提交
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
  void Clear() {
    for (int i = 0; i < INTERNAL_DB_STATS_ENUM_MAX; i++) {
      db_stats_[i].store(0);
    }
    for (int i = 0; i < INTERNAL_CF_STATS_ENUM_MAX; i++) {
      cf_stats_count_[i] = 0;
      cf_stats_value_[i] = 0;
    }
    for (auto& comp_stat : comp_stats_) {
      comp_stat.Clear();
    }
    for (auto& h : file_read_latency_) {
      h.Clear();
    }
    cf_stats_snapshot_.Clear();
    db_stats_snapshot_.Clear();
    bg_error_count_ = 0;
    started_at_ = env_->NowMicros();
  }

I
Igor Canadi 已提交
261
  void AddCompactionStats(int level, const CompactionStats& stats) {
262
    comp_stats_[level].Add(stats);
I
Igor Canadi 已提交
263 264
  }

265 266 267 268
  void IncBytesMoved(int level, uint64_t amount) {
    comp_stats_[level].bytes_moved += amount;
  }

269 270 271
  void AddCFStats(InternalCFStatsType type, uint64_t value) {
    cf_stats_value_[type] += value;
    ++cf_stats_count_[type];
I
Igor Canadi 已提交
272 273
  }

274 275
  void AddDBStats(InternalDBStatsType type, uint64_t value,
                  bool concurrent = false) {
276
    auto& v = db_stats_[type];
277 278 279 280 281 282
    if (concurrent) {
      v.fetch_add(value, std::memory_order_relaxed);
    } else {
      v.store(v.load(std::memory_order_relaxed) + value,
              std::memory_order_relaxed);
    }
283 284 285 286
  }

  uint64_t GetDBStats(InternalDBStatsType type) {
    return db_stats_[type].load(std::memory_order_relaxed);
I
Igor Canadi 已提交
287 288
  }

289 290 291 292
  HistogramImpl* GetFileReadHist(int level) {
    return &file_read_latency_[level];
  }

293 294 295 296
  uint64_t GetBackgroundErrorCount() const { return bg_error_count_; }

  uint64_t BumpAndGetBackgroundErrorCount() { return ++bg_error_count_; }

297 298 299
  bool GetStringProperty(const DBPropertyInfo& property_info,
                         const Slice& property, std::string* value);

300 301
  bool GetMapProperty(const DBPropertyInfo& property_info,
                      const Slice& property,
302
                      std::map<std::string, std::string>* value);
303

304 305
  bool GetIntProperty(const DBPropertyInfo& property_info, uint64_t* value,
                      DBImpl* db);
I
Igor Canadi 已提交
306

307 308
  bool GetIntPropertyOutOfMutex(const DBPropertyInfo& property_info,
                                Version* version, uint64_t* value);
309

310 311 312
  // Store a mapping from the user-facing DB::Properties string to our
  // DBPropertyInfo struct used internally for retrieving properties.
  static const std::unordered_map<std::string, DBPropertyInfo> ppt_name_to_info;
313

I
Igor Canadi 已提交
314
 private:
315
  void DumpDBStats(std::string* value);
316
  void DumpCFMapStats(std::map<std::string, std::string>* cf_stats);
317
  void DumpCFMapStats(
318 319
      std::map<int, std::map<LevelStatType, double>>* level_stats,
      CompactionStats* compaction_stats_sum);
320
  void DumpCFMapStatsIOStalls(std::map<std::string, std::string>* cf_stats);
321
  void DumpCFStats(std::string* value);
322 323
  void DumpCFStatsNoFileHistogram(std::string* value);
  void DumpCFFileHistogram(std::string* value);
324 325

  // Per-DB stats
326
  std::atomic<uint64_t> db_stats_[INTERNAL_DB_STATS_ENUM_MAX];
327
  // Per-ColumnFamily stats
328 329
  uint64_t cf_stats_value_[INTERNAL_CF_STATS_ENUM_MAX];
  uint64_t cf_stats_count_[INTERNAL_CF_STATS_ENUM_MAX];
330 331
  // Per-ColumnFamily/level compaction stats
  std::vector<CompactionStats> comp_stats_;
332
  std::vector<HistogramImpl> file_read_latency_;
I
Igor Canadi 已提交
333 334

  // Used to compute per-interval statistics
335 336 337
  struct CFStatsSnapshot {
    // ColumnFamily-level stats
    CompactionStats comp_stats;
338
    uint64_t ingest_bytes_flush;      // Bytes written to L0 (Flush)
339
    uint64_t stall_count;             // Stall count
340 341 342 343 344
    // Stats from compaction jobs - bytes written, bytes read, duration.
    uint64_t compact_bytes_write;
    uint64_t compact_bytes_read;
    uint64_t compact_micros;
    double seconds_up;
345

346 347 348 349 350 351
    // AddFile specific stats
    uint64_t ingest_bytes_addfile;     // Total Bytes ingested
    uint64_t ingest_files_addfile;     // Total number of files ingested
    uint64_t ingest_l0_files_addfile;  // Total number of files ingested to L0
    uint64_t ingest_keys_addfile;      // Total number of keys ingested

352 353
    CFStatsSnapshot()
        : comp_stats(0),
354
          ingest_bytes_flush(0),
355 356 357 358
          stall_count(0),
          compact_bytes_write(0),
          compact_bytes_read(0),
          compact_micros(0),
359 360 361 362 363
          seconds_up(0),
          ingest_bytes_addfile(0),
          ingest_files_addfile(0),
          ingest_l0_files_addfile(0),
          ingest_keys_addfile(0) {}
S
Siying Dong 已提交
364 365 366 367 368 369 370 371 372 373 374 375 376 377

    void Clear() {
      comp_stats.Clear();
      ingest_bytes_flush = 0;
      stall_count = 0;
      compact_bytes_write = 0;
      compact_bytes_read = 0;
      compact_micros = 0;
      seconds_up = 0;
      ingest_bytes_addfile = 0;
      ingest_files_addfile = 0;
      ingest_l0_files_addfile = 0;
      ingest_keys_addfile = 0;
    }
378 379 380 381 382 383 384 385
  } cf_stats_snapshot_;

  struct DBStatsSnapshot {
    // DB-level stats
    uint64_t ingest_bytes;            // Bytes written by user
    uint64_t wal_bytes;               // Bytes written to WAL
    uint64_t wal_synced;              // Number of times WAL is synced
    uint64_t write_with_wal;          // Number of writes that request WAL
I
Igor Canadi 已提交
386 387
    // These count the number of writes processed by the calling thread or
    // another thread.
388 389
    uint64_t write_other;
    uint64_t write_self;
S
sdong 已提交
390 391 392 393 394
    // Total number of keys written. write_self and write_other measure number
    // of write requests written, Each of the write request can contain updates
    // to multiple keys. num_keys_written is total number of keys updated by all
    // those writes.
    uint64_t num_keys_written;
S
sdong 已提交
395 396
    // Total time writes delayed by stalls.
    uint64_t write_stall_micros;
397 398 399 400 401 402 403 404 405
    double seconds_up;

    DBStatsSnapshot()
        : ingest_bytes(0),
          wal_bytes(0),
          wal_synced(0),
          write_with_wal(0),
          write_other(0),
          write_self(0),
406
          num_keys_written(0),
S
sdong 已提交
407
          write_stall_micros(0),
408
          seconds_up(0) {}
S
Siying Dong 已提交
409 410 411 412 413 414 415 416 417 418 419 420

    void Clear() {
      ingest_bytes = 0;
      wal_bytes = 0;
      wal_synced = 0;
      write_with_wal = 0;
      write_other = 0;
      write_self = 0;
      num_keys_written = 0;
      write_stall_micros = 0;
      seconds_up = 0;
    }
421
  } db_stats_snapshot_;
I
Igor Canadi 已提交
422

423 424 425
  // Handler functions for getting property values. They use "value" as a value-
  // result argument, and return true upon successfully setting "value".
  bool HandleNumFilesAtLevel(std::string* value, Slice suffix);
426
  bool HandleCompressionRatioAtLevelPrefix(std::string* value, Slice suffix);
427 428
  bool HandleLevelStats(std::string* value, Slice suffix);
  bool HandleStats(std::string* value, Slice suffix);
429
  bool HandleCFMapStats(std::map<std::string, std::string>* compaction_stats);
430
  bool HandleCFStats(std::string* value, Slice suffix);
431 432
  bool HandleCFStatsNoFileHistogram(std::string* value, Slice suffix);
  bool HandleCFFileHistogram(std::string* value, Slice suffix);
433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
  bool HandleDBStats(std::string* value, Slice suffix);
  bool HandleSsTables(std::string* value, Slice suffix);
  bool HandleAggregatedTableProperties(std::string* value, Slice suffix);
  bool HandleAggregatedTablePropertiesAtLevel(std::string* value, Slice suffix);
  bool HandleNumImmutableMemTable(uint64_t* value, DBImpl* db,
                                  Version* version);
  bool HandleNumImmutableMemTableFlushed(uint64_t* value, DBImpl* db,
                                         Version* version);
  bool HandleMemTableFlushPending(uint64_t* value, DBImpl* db,
                                  Version* version);
  bool HandleNumRunningFlushes(uint64_t* value, DBImpl* db, Version* version);
  bool HandleCompactionPending(uint64_t* value, DBImpl* db, Version* version);
  bool HandleNumRunningCompactions(uint64_t* value, DBImpl* db,
                                   Version* version);
  bool HandleBackgroundErrors(uint64_t* value, DBImpl* db, Version* version);
  bool HandleCurSizeActiveMemTable(uint64_t* value, DBImpl* db,
                                   Version* version);
  bool HandleCurSizeAllMemTables(uint64_t* value, DBImpl* db, Version* version);
  bool HandleSizeAllMemTables(uint64_t* value, DBImpl* db, Version* version);
  bool HandleNumEntriesActiveMemTable(uint64_t* value, DBImpl* db,
                                      Version* version);
  bool HandleNumEntriesImmMemTables(uint64_t* value, DBImpl* db,
                                    Version* version);
  bool HandleNumDeletesActiveMemTable(uint64_t* value, DBImpl* db,
                                      Version* version);
  bool HandleNumDeletesImmMemTables(uint64_t* value, DBImpl* db,
                                    Version* version);
  bool HandleEstimateNumKeys(uint64_t* value, DBImpl* db, Version* version);
  bool HandleNumSnapshots(uint64_t* value, DBImpl* db, Version* version);
  bool HandleOldestSnapshotTime(uint64_t* value, DBImpl* db, Version* version);
  bool HandleNumLiveVersions(uint64_t* value, DBImpl* db, Version* version);
464 465
  bool HandleCurrentSuperVersionNumber(uint64_t* value, DBImpl* db,
                                       Version* version);
466 467 468 469 470 471 472 473 474 475
  bool HandleIsFileDeletionsEnabled(uint64_t* value, DBImpl* db,
                                    Version* version);
  bool HandleBaseLevel(uint64_t* value, DBImpl* db, Version* version);
  bool HandleTotalSstFilesSize(uint64_t* value, DBImpl* db, Version* version);
  bool HandleEstimatePendingCompactionBytes(uint64_t* value, DBImpl* db,
                                            Version* version);
  bool HandleEstimateTableReadersMem(uint64_t* value, DBImpl* db,
                                     Version* version);
  bool HandleEstimateLiveDataSize(uint64_t* value, DBImpl* db,
                                  Version* version);
476
  bool HandleMinLogNumberToKeep(uint64_t* value, DBImpl* db, Version* version);
477 478 479
  bool HandleActualDelayedWriteRate(uint64_t* value, DBImpl* db,
                                    Version* version);
  bool HandleIsWriteStopped(uint64_t* value, DBImpl* db, Version* version);
480

481 482 483 484 485 486 487
  // Total number of background errors encountered. Every time a flush task
  // or compaction task fails, this counter is incremented. The failure can
  // be caused by any possible reason, including file system errors, out of
  // resources, or input file corruption. Failing when retrying the same flush
  // or compaction will cause the counter to increase too.
  uint64_t bg_error_count_;

488
  const int number_levels_;
I
Igor Canadi 已提交
489
  Env* env_;
490
  ColumnFamilyData* cfd_;
S
Siying Dong 已提交
491
  uint64_t started_at_;
I
Igor Canadi 已提交
492 493
};

494 495 496 497 498
#else

class InternalStats {
 public:
  enum InternalCFStatsType {
499 500
    LEVEL0_SLOWDOWN_TOTAL,
    LEVEL0_SLOWDOWN_WITH_COMPACTION,
501
    MEMTABLE_COMPACTION,
502
    MEMTABLE_SLOWDOWN,
503 504
    LEVEL0_NUM_FILES_TOTAL,
    LEVEL0_NUM_FILES_WITH_COMPACTION,
505
    SOFT_PENDING_COMPACTION_BYTES_LIMIT,
506
    HARD_PENDING_COMPACTION_BYTES_LIMIT,
507 508
    WRITE_STALLS_ENUM_MAX,
    BYTES_FLUSHED,
509
    BYTES_INGESTED_ADD_FILE,
510 511 512
    INGESTED_NUM_FILES_TOTAL,
    INGESTED_LEVEL0_NUM_FILES_TOTAL,
    INGESTED_NUM_KEYS_TOTAL,
513 514 515 516 517 518 519 520 521 522 523
    INTERNAL_CF_STATS_ENUM_MAX,
  };

  enum InternalDBStatsType {
    WAL_FILE_BYTES,
    WAL_FILE_SYNCED,
    BYTES_WRITTEN,
    NUMBER_KEYS_WRITTEN,
    WRITE_DONE_BY_OTHER,
    WRITE_DONE_BY_SELF,
    WRITE_WITH_WAL,
S
sdong 已提交
524
    WRITE_STALL_MICROS,
525 526 527 528 529 530 531
    INTERNAL_DB_STATS_ENUM_MAX,
  };

  InternalStats(int num_levels, Env* env, ColumnFamilyData* cfd) {}

  struct CompactionStats {
    uint64_t micros;
532 533
    uint64_t bytes_read_non_output_levels;
    uint64_t bytes_read_output_level;
534
    uint64_t bytes_written;
535
    uint64_t bytes_moved;
536 537 538
    int num_input_files_in_non_output_levels;
    int num_input_files_in_output_level;
    int num_output_files;
539 540 541 542 543 544 545 546 547 548 549 550 551 552 553
    uint64_t num_input_records;
    uint64_t num_dropped_records;
    int count;

    explicit CompactionStats(int _count = 0) {}

    explicit CompactionStats(const CompactionStats& c) {}

    void Add(const CompactionStats& c) {}

    void Subtract(const CompactionStats& c) {}
  };

  void AddCompactionStats(int level, const CompactionStats& stats) {}

554 555
  void IncBytesMoved(int level, uint64_t amount) {}

556 557
  void AddCFStats(InternalCFStatsType type, uint64_t value) {}

M
Maysam Yabandeh 已提交
558 559
  void AddDBStats(InternalDBStatsType type, uint64_t value,
                  bool concurrent = false) {}
560

561 562
  HistogramImpl* GetFileReadHist(int level) { return nullptr; }

563 564 565 566
  uint64_t GetBackgroundErrorCount() const { return 0; }

  uint64_t BumpAndGetBackgroundErrorCount() { return 0; }

567 568 569 570
  bool GetStringProperty(const DBPropertyInfo& property_info,
                         const Slice& property, std::string* value) {
    return false;
  }
571

572 573
  bool GetMapProperty(const DBPropertyInfo& property_info,
                      const Slice& property,
574
                      std::map<std::string, std::string>* value) {
575 576 577
    return false;
  }

578 579 580 581
  bool GetIntProperty(const DBPropertyInfo& property_info, uint64_t* value,
                      DBImpl* db) const {
    return false;
  }
582

583 584 585 586
  bool GetIntPropertyOutOfMutex(const DBPropertyInfo& property_info,
                                Version* version, uint64_t* value) const {
    return false;
  }
587 588 589
};
#endif  // !ROCKSDB_LITE

I
Igor Canadi 已提交
590
}  // namespace rocksdb