diff options
author | Ian Kuehne <ian.kuehne@mongodb.com> | 2017-07-20 15:35:06 -0400 |
---|---|---|
committer | Ian Kuehne <ian.kuehne@mongodb.com> | 2017-08-09 09:10:55 -0400 |
commit | 0804895ee3f905b32e95609119b4d6f251f63901 (patch) | |
tree | dfb924ab8274236a9ad59f907153d5cb5d3fb350 /src/mongo/db/catalog/health_log.h | |
parent | aa102021070c10f802b9be8877870400cc27ed07 (diff) | |
download | mongo-0804895ee3f905b32e95609119b4d6f251f63901.tar.gz |
SERVER-30379 Add health log.
Diffstat (limited to 'src/mongo/db/catalog/health_log.h')
-rw-r--r-- | src/mongo/db/catalog/health_log.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/mongo/db/catalog/health_log.h b/src/mongo/db/catalog/health_log.h new file mode 100644 index 00000000000..84de0e215ab --- /dev/null +++ b/src/mongo/db/catalog/health_log.h @@ -0,0 +1,93 @@ +/** + * Copyright (C) 2017 MongoDB Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * As a special exception, the copyright holders give permission to link the + * code of portions of this program with the OpenSSL library under certain + * conditions as described in each individual source file and distribute + * linked combinations including the program with the OpenSSL library. You + * must comply with the GNU Affero General Public License in all respects for + * all of the code used other than as permitted herein. If you modify file(s) + * with this exception, you may extend this exception to your version of the + * file(s), but you are not obligated to do so. If you do not wish to do so, + * delete this exception statement from your version. If you delete this + * exception statement from all source files in the program, then also delete + * it in the license file. + */ + +#pragma once + +#include "mongo/base/disallow_copying.h" +#include "mongo/db/concurrency/deferred_writer.h" +#include "mongo/db/service_context.h" + +namespace mongo { + +class HealthLogEntry; + +/** + * The interface to the local healthlog. + * + * This class contains facilities for creating and asynchronously writing to the local healthlog + * collection. There should only be one instance of this class, initialized on startup and cleaned + * up on shutdown. + */ +class HealthLog { + MONGO_DISALLOW_COPYING(HealthLog); + +public: + /** + * Required to use HealthLog as a ServiceContext decorator. + * + * Should not be used anywhere else. + */ + HealthLog(); + + /** + * The maximum size of the in-memory buffer of health-log entries, in bytes. + */ + static const int64_t kMaxBufferSize = 25'000'000; + + /** + * Start the worker thread writing the buffer to the collection. + */ + void startup(void); + + /** + * Stop the worker thread. + */ + void shutdown(void); + + /** + * The name of the collection. + */ + static const NamespaceString nss; + + /** + * Get the current context's HealthLog. + */ + static HealthLog& get(ServiceContext* ctx); + static HealthLog& get(OperationContext* ctx); + + /** + * Asynchronously insert the given entry. + * + * Return `false` iff there is no more space in the buffer. + */ + bool log(const HealthLogEntry& entry); + +private: + DeferredWriter _writer; +}; +} |