dfasdf
This commit is contained in:
parent
d1adc067d6
commit
7c4063e32c
|
@ -0,0 +1,96 @@
|
||||||
|
/*
|
||||||
|
* RocksDBLogForwarder.h
|
||||||
|
*
|
||||||
|
* This source file is part of the FoundationDB open source project
|
||||||
|
*
|
||||||
|
* Copyright 2013-2022 Apple Inc. and the FoundationDB project authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ROCKSDB_LOG_FORWARDER_H__
|
||||||
|
#define __ROCKSDB_LOG_FORWARDER_H__
|
||||||
|
|
||||||
|
#include <cstdarg>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
#include <rocksdb/env.h>
|
||||||
|
|
||||||
|
#include "flow/genericactors.actor.h"
|
||||||
|
#include "flow/IRandom.h"
|
||||||
|
#include "flow/Trace.h"
|
||||||
|
|
||||||
|
namespace details {
|
||||||
|
|
||||||
|
// Stores a RocksDB log line, transformed into Key/Value pairs
|
||||||
|
struct RocksDBLogRecord {
|
||||||
|
double logReceiveTime;
|
||||||
|
Severity severity;
|
||||||
|
UID uid;
|
||||||
|
std::thread::id threadID;
|
||||||
|
std::vector<std::pair<std::string, std::string>> kvPairs;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Stores RocksDB log lines for furthur consumption
|
||||||
|
class RocksDBLogger {
|
||||||
|
// The mutex that protects log records, as RocksDB is multi-threaded
|
||||||
|
std::mutex recordsMutex;
|
||||||
|
|
||||||
|
// Main thread ID. Only triggers TraceEvent when on main thread. In FDB only the main thread contains information
|
||||||
|
// that could thread.
|
||||||
|
const std::thread::id mainThreadId;
|
||||||
|
|
||||||
|
// The log record
|
||||||
|
std::vector<RocksDBLogRecord> records;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Constructor
|
||||||
|
RocksDBLogger();
|
||||||
|
|
||||||
|
// *Moves* the record to internal records
|
||||||
|
void inject(RocksDBLogRecord&& record);
|
||||||
|
|
||||||
|
// Consumes all the records
|
||||||
|
void consume();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace details
|
||||||
|
|
||||||
|
class RocksDBLogForwarder : public rocksdb::Logger {
|
||||||
|
// The ID of the RocksDB instance
|
||||||
|
const UID id;
|
||||||
|
|
||||||
|
// The cache that stores the logs from RocksDB
|
||||||
|
details::RocksDBLogger records;
|
||||||
|
|
||||||
|
// An ACTOR that logs the non-main thread data periodically
|
||||||
|
Future<Void> periodicLogger;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Constructor
|
||||||
|
// id is the UID of the logger
|
||||||
|
// log_level specifies the log level
|
||||||
|
explicit RocksDBLogForwarder(const UID& id,
|
||||||
|
const rocksdb::InfoLogLevel log_level = rocksdb::InfoLogLevel::INFO_LEVEL);
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
virtual ~RocksDBLogForwarder();
|
||||||
|
|
||||||
|
// Writes an entry to the log file
|
||||||
|
virtual void Logv(const char* format, va_list ap);
|
||||||
|
|
||||||
|
// Writes an entry to the log file, with a specificied log level
|
||||||
|
virtual void Logv(const rocksdb::InfoLogLevel log_level, const char* format, va_list ap);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __ROCKSDB_LOG_FORWARDER_H__
|
Loading…
Reference in New Issue