Summary: 1. write db MANIFEST, CURRENT, IDENTITY, sst files, log files to log before open Test Plan: run db and check LOG file Reviewers: ljin, yhchiang, igor, dhruba, sdong Reviewed By: sdong Subscribers: leveldb Differential Revision: https://reviews.facebook.net/D21459main
parent
0c9dc9f8e0
commit
5e642403a9
@ -0,0 +1,115 @@ |
|||||||
|
// Copyright (c) 2013, Facebook, Inc. All rights reserved.
|
||||||
|
// This source code is licensed under the BSD-style license found in the
|
||||||
|
// LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
// of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
//
|
||||||
|
// Must not be included from any .h files to avoid polluting the namespace
|
||||||
|
// with macros.
|
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <string> |
||||||
|
#include <algorithm> |
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#include "rocksdb/options.h" |
||||||
|
#include "rocksdb/env.h" |
||||||
|
#include "db/filename.h" |
||||||
|
|
||||||
|
namespace rocksdb { |
||||||
|
|
||||||
|
void DumpDBFileSummary(const DBOptions& options, const std::string& dbname) { |
||||||
|
if (options.info_log == nullptr) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
auto* env = options.env; |
||||||
|
uint64_t number; |
||||||
|
FileType type; |
||||||
|
|
||||||
|
std::vector<std::string> files; |
||||||
|
uint64_t file_num = 0; |
||||||
|
uint64_t file_size; |
||||||
|
std::string file_info, wal_info; |
||||||
|
|
||||||
|
Log(options.info_log, "DB SUMMARY\n"); |
||||||
|
// Get files in dbname dir
|
||||||
|
if (!env->GetChildren(dbname, &files).ok()) { |
||||||
|
Log(options.info_log, "Error when reading %s dir\n", dbname.c_str()); |
||||||
|
} |
||||||
|
std::sort(files.begin(), files.end()); |
||||||
|
for (std::string file : files) { |
||||||
|
ParseFileName(file, &number, &type); |
||||||
|
switch (type) { |
||||||
|
case kCurrentFile: |
||||||
|
Log(options.info_log, "CURRENT file: %s\n", file.c_str()); |
||||||
|
break; |
||||||
|
case kIdentityFile: |
||||||
|
Log(options.info_log, "IDENTITY file: %s\n", file.c_str()); |
||||||
|
break; |
||||||
|
case kDescriptorFile: |
||||||
|
env->GetFileSize(dbname + "/" + file, &file_size); |
||||||
|
Log(options.info_log, "MANIFEST file: %s size: %lu Bytes\n", |
||||||
|
file.c_str(), file_size); |
||||||
|
break; |
||||||
|
case kLogFile: |
||||||
|
env->GetFileSize(dbname + "/" + file, &file_size); |
||||||
|
char str[8]; |
||||||
|
snprintf(str, sizeof(str), "%lu", file_size); |
||||||
|
wal_info.append(file).append(" size: "). |
||||||
|
append(str, sizeof(str)).append(" ;"); |
||||||
|
break; |
||||||
|
case kTableFile: |
||||||
|
if (++file_num < 10) { |
||||||
|
file_info.append(file).append(" "); |
||||||
|
} |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Get sst files in db_path dir
|
||||||
|
for (auto& db_path : options.db_paths) { |
||||||
|
if (dbname.compare(db_path.path) != 0) { |
||||||
|
if (!env->GetChildren(db_path.path, &files).ok()) { |
||||||
|
Log(options.info_log, "Error when reading %s dir\n", |
||||||
|
db_path.path.c_str()); |
||||||
|
continue; |
||||||
|
} |
||||||
|
std::sort(files.begin(), files.end()); |
||||||
|
for (std::string file : files) { |
||||||
|
ParseFileName(file, &number, &type); |
||||||
|
if (type == kTableFile && ++file_num < 10) { |
||||||
|
file_info.append(file).append(" "); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
Log(options.info_log, "SST files in %s dir, Total Num: %lu, files: %s\n", |
||||||
|
db_path.path.c_str(), file_num, file_info.c_str()); |
||||||
|
file_num = 0; |
||||||
|
file_info.clear(); |
||||||
|
} |
||||||
|
|
||||||
|
// Get wal file in wal_dir
|
||||||
|
if (dbname.compare(options.wal_dir) != 0) { |
||||||
|
if (!env->GetChildren(options.wal_dir, &files).ok()) { |
||||||
|
Log(options.info_log, "Error when reading %s dir\n", |
||||||
|
options.wal_dir.c_str()); |
||||||
|
return; |
||||||
|
} |
||||||
|
wal_info.clear(); |
||||||
|
for (std::string file : files) { |
||||||
|
ParseFileName(file, &number, &type); |
||||||
|
if (type == kLogFile) { |
||||||
|
env->GetFileSize(options.wal_dir + "/" + file, &file_size); |
||||||
|
char str[8]; |
||||||
|
snprintf(str, sizeof(str), "%lu", file_size); |
||||||
|
wal_info.append(file).append(" size: "). |
||||||
|
append(str, sizeof(str)).append(" ;"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
Log(options.info_log, "Write Ahead Log file in %s: %s\n", |
||||||
|
options.wal_dir.c_str(), wal_info.c_str()); |
||||||
|
} |
||||||
|
} // namespace rocksdb
|
Loading…
Reference in new issue