diff options
Diffstat (limited to 'src/mongo/db/ftdc')
-rw-r--r-- | src/mongo/db/ftdc/compressor_test.cpp | 201 | ||||
-rw-r--r-- | src/mongo/db/ftdc/file_manager.cpp | 10 | ||||
-rw-r--r-- | src/mongo/db/ftdc/file_manager_test.cpp | 94 | ||||
-rw-r--r-- | src/mongo/db/ftdc/file_reader.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/ftdc/file_writer_test.cpp | 86 | ||||
-rw-r--r-- | src/mongo/db/ftdc/ftdc_test.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/ftdc/util.cpp | 7 | ||||
-rw-r--r-- | src/mongo/db/ftdc/varint.h | 2 |
8 files changed, 304 insertions, 103 deletions
diff --git a/src/mongo/db/ftdc/compressor_test.cpp b/src/mongo/db/ftdc/compressor_test.cpp index 6950dd93f66..688197a392a 100644 --- a/src/mongo/db/ftdc/compressor_test.cpp +++ b/src/mongo/db/ftdc/compressor_test.cpp @@ -67,12 +67,18 @@ TEST(FTDCCompressor, TestBasic) { auto st = c.addSample(BSON("name" << "joe" - << "key1" << 33 << "key2" << 42), + << "key1" + << 33 + << "key2" + << 42), Date_t()); ASSERT_HAS_SPACE(st); st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45), + << "key1" + << 34 + << "key2" + << 45), Date_t()); ASSERT_HAS_SPACE(st); @@ -179,89 +185,141 @@ TEST(FTDCCompressor, TestSchemaChanges) { auto st = c.addSample(BSON("name" << "joe" - << "key1" << 33 << "key2" << 42)); + << "key1" + << 33 + << "key2" + << 42)); ASSERT_HAS_SPACE(st); st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45)); + << "key1" + << 34 + << "key2" + << 45)); ASSERT_HAS_SPACE(st); st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45)); + << "key1" + << 34 + << "key2" + << 45)); ASSERT_HAS_SPACE(st); // Add Field st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45 << "key3" << 47)); + << "key1" + << 34 + << "key2" + << 45 + << "key3" + << 47)); ASSERT_SCHEMA_CHANGED(st); st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45 << "key3" << 47)); + << "key1" + << 34 + << "key2" + << 45 + << "key3" + << 47)); ASSERT_HAS_SPACE(st); // Rename field st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key5" << 45 << "key3" << 47)); + << "key1" + << 34 + << "key5" + << 45 + << "key3" + << 47)); ASSERT_SCHEMA_CHANGED(st); // Change type st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key5" + << "key1" + << 34 + << "key5" << "45" - << "key3" << 47)); + << "key3" + << 47)); ASSERT_SCHEMA_CHANGED(st); // Add Field st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45 << "key3" << 47 << "key7" << 34 << "key9" - << 45 << "key13" << 47)); + << "key1" + << 34 + << "key2" + << 45 + << "key3" + << 47 + << "key7" + << 34 + << "key9" + << 45 + << "key13" + << 47)); ASSERT_SCHEMA_CHANGED(st); // Remove Field st = c.addSample(BSON("name" << "joe" - << "key7" << 34 << "key9" << 45 << "key13" << 47)); + << "key7" + << 34 + << "key9" + << 45 + << "key13" + << 47)); ASSERT_SCHEMA_CHANGED(st); st = c.addSample(BSON("name" << "joe" - << "key7" << 34 << "key9" << 45 << "key13" << 47)); + << "key7" + << 34 + << "key9" + << 45 + << "key13" + << 47)); ASSERT_HAS_SPACE(st); // Start new batch st = c.addSample(BSON("name" << "joe" - << "key7" << 5)); + << "key7" + << 5)); ASSERT_SCHEMA_CHANGED(st); // Change field to object st = c.addSample(BSON("name" << "joe" - << "key7" << BSON( // nested object - "a" << 1))); + << "key7" + << BSON( // nested object + "a" << 1))); ASSERT_SCHEMA_CHANGED(st); // Change field from object to number st = c.addSample(BSON("name" << "joe" - << "key7" << 7)); + << "key7" + << 7)); ASSERT_SCHEMA_CHANGED(st); // Change field from number to array st = c.addSample(BSON("name" << "joe" - << "key7" << BSON_ARRAY(13 << 17))); + << "key7" + << BSON_ARRAY(13 << 17))); ASSERT_SCHEMA_CHANGED(st); // Change field from array to number st = c.addSample(BSON("name" << "joe" - << "key7" << 19)); + << "key7" + << 19)); ASSERT_SCHEMA_CHANGED(st); @@ -288,15 +346,24 @@ TEST(FTDCCompressor, TestNumbersCompat) { auto st = c.addSample(BSON("name" << "joe" - << "key1" << 33 << "key2" << 42LL)); + << "key1" + << 33 + << "key2" + << 42LL)); ASSERT_HAS_SPACE(st); st = c.addSample(BSON("name" << "joe" - << "key1" << 34LL << "key2" << 45.0f)); + << "key1" + << 34LL + << "key2" + << 45.0f)); ASSERT_HAS_SPACE(st); st = c.addSample(BSON("name" << "joe" - << "key1" << static_cast<char>(32) << "key2" << 45.0F)); + << "key1" + << static_cast<char>(32) + << "key2" + << 45.0F)); ASSERT_HAS_SPACE(st); } @@ -320,31 +387,49 @@ TEST(FTDCCompressor, Types) { auto st = c.addSample(BSON("name" << "joe" - << "key1" << 33 << "key2" << 42LL)); + << "key1" + << 33 + << "key2" + << 42LL)); ASSERT_HAS_SPACE(st); const char bytes[] = {0x1, 0x2, 0x3}; - BSONObj o = BSON("created" << DATENOW // date_t - << "null" << BSONNULL // { a : null } - << "undefined" << BSONUndefined // { a : undefined } - << "obj" << BSON( // nested object - "a" - << "abc" - << "b" << 123LL) << "foo" + BSONObj o = BSON("created" << DATENOW // date_t + << "null" + << BSONNULL // { a : null } + << "undefined" + << BSONUndefined // { a : undefined } + << "obj" + << BSON( // nested object + "a" + << "abc" + << "b" + << 123LL) + << "foo" << BSON_ARRAY("bar" << "baz" - << "qux") // array of strings - << "foo2" << BSON_ARRAY(5 << 6 << 7) // array of ints - << "bindata" << BSONBinData(&bytes[0], 3, bdtCustom) // bindata - << "oid" << OID("010203040506070809101112") // oid - << "bool" << true // bool - << "regex" << BSONRegEx("mongodb") // regex - << "ref" << BSONDBRef("c", OID("010203040506070809101112")) // ref - << "code" << BSONCode("func f() { return 1; }") // code - << "codewscope" << BSONCodeWScope("func f() { return 1; }", - BSON("c" << true)) // codew - << "minkey" << MINKEY // minkey - << "maxkey" << MAXKEY // maxkey + << "qux") // array of strings + << "foo2" + << BSON_ARRAY(5 << 6 << 7) // array of ints + << "bindata" + << BSONBinData(&bytes[0], 3, bdtCustom) // bindata + << "oid" + << OID("010203040506070809101112") // oid + << "bool" + << true // bool + << "regex" + << BSONRegEx("mongodb") // regex + << "ref" + << BSONDBRef("c", OID("010203040506070809101112")) // ref + << "code" + << BSONCode("func f() { return 1; }") // code + << "codewscope" + << BSONCodeWScope("func f() { return 1; }", + BSON("c" << true)) // codew + << "minkey" + << MINKEY // minkey + << "maxkey" + << MAXKEY // maxkey ); st = c.addSample(o); @@ -355,11 +440,17 @@ TEST(FTDCCompressor, Types) { st = c.addSample(BSON("name" << "joe" - << "key1" << 34LL << "key2" << 45.0f)); + << "key1" + << 34LL + << "key2" + << 45.0f)); ASSERT_SCHEMA_CHANGED(st); st = c.addSample(BSON("name" << "joe" - << "key1" << static_cast<char>(32) << "key2" << 45.0F)); + << "key1" + << static_cast<char>(32) + << "key2" + << 45.0F)); ASSERT_HAS_SPACE(st); } @@ -371,25 +462,37 @@ TEST(FTDCCompressor, TestFull) { auto st = c.addSample(BSON("name" << "joe" - << "key1" << 33 << "key2" << 42)); + << "key1" + << 33 + << "key2" + << 42)); ASSERT_HAS_SPACE(st); for (size_t i = 0; i != FTDCConfig::kMaxSamplesPerArchiveMetricChunkDefault - 2; i++) { st = c.addSample(BSON("name" << "joe" - << "key1" << static_cast<long long int>(i * j) << "key2" << 45)); + << "key1" + << static_cast<long long int>(i * j) + << "key2" + << 45)); ASSERT_HAS_SPACE(st); } st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45)); + << "key1" + << 34 + << "key2" + << 45)); ASSERT_FULL(st); // Add Value st = c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45)); + << "key1" + << 34 + << "key2" + << 45)); ASSERT_HAS_SPACE(st); } } diff --git a/src/mongo/db/ftdc/file_manager.cpp b/src/mongo/db/ftdc/file_manager.cpp index dbefc3fd451..146ad60120c 100644 --- a/src/mongo/db/ftdc/file_manager.cpp +++ b/src/mongo/db/ftdc/file_manager.cpp @@ -71,8 +71,8 @@ StatusWith<std::unique_ptr<FTDCFileManager>> FTDCFileManager::create( boost::filesystem::create_directories(dir, ec); if (ec) { return {ErrorCodes::NonExistentPath, - str::stream() << "\'" << dir.generic_string() - << "\' could not be created: " << ec.message()}; + str::stream() << "\'" << dir.generic_string() << "\' could not be created: " + << ec.message()}; } } @@ -241,7 +241,8 @@ FTDCFileManager::recoverInterimFile() { log() << "Unclean full-time diagnostic data capture shutdown detected, found interim file, " "but failed " "to open it, some " - "metrics may have been lost. " << s; + "metrics may have been lost. " + << s; // Note: We ignore any actual errors as reading from the interim files is a best-effort return docs; @@ -258,7 +259,8 @@ FTDCFileManager::recoverInterimFile() { if (!m.isOK() || !docs.empty()) { log() << "Unclean full-time diagnostic data capture shutdown detected, found interim file, " "some " - "metrics may have been lost. " << m.getStatus(); + "metrics may have been lost. " + << m.getStatus(); } // Note: We ignore any actual errors as reading from the interim files is a best-effort diff --git a/src/mongo/db/ftdc/file_manager_test.cpp b/src/mongo/db/ftdc/file_manager_test.cpp index 4d10c659bbc..6c2e5c220a6 100644 --- a/src/mongo/db/ftdc/file_manager_test.cpp +++ b/src/mongo/db/ftdc/file_manager_test.cpp @@ -28,8 +28,8 @@ #include "mongo/platform/basic.h" -#include <boost/filesystem.hpp> #include <algorithm> +#include <boost/filesystem.hpp> #include <iostream> #include <string> @@ -69,34 +69,45 @@ TEST(FTDCFileManagerTest, TestFull) { // Test a large numbers of zeros, and incremental numbers in a full buffer for (int j = 0; j < 10; j++) { - ASSERT_OK( - mgr->writeSampleAndRotateIfNeeded(client, - BSON("name" - << "joe" - << "key1" << 3230792343LL << "key2" << 235135), - Date_t())); + ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, + BSON("name" + << "joe" + << "key1" + << 3230792343LL + << "key2" + << 235135), + Date_t())); for (size_t i = 0; i <= FTDCConfig::kMaxSamplesPerArchiveMetricChunkDefault - 2; i++) { - ASSERT_OK(mgr->writeSampleAndRotateIfNeeded( - client, - BSON("name" - << "joe" - << "key1" << static_cast<long long int>(i * j * 37) << "key2" - << static_cast<long long int>(i * (645 << j))), - Date_t())); + ASSERT_OK( + mgr->writeSampleAndRotateIfNeeded(client, + BSON("name" + << "joe" + << "key1" + << static_cast<long long int>(i * j * 37) + << "key2" + << static_cast<long long int>(i * + (645 << j))), + Date_t())); } ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, BSON("name" << "joe" - << "key1" << 34 << "key2" << 45), + << "key1" + << 34 + << "key2" + << 45), Date_t())); // Add Value ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, BSON("name" << "joe" - << "key1" << 34 << "key2" << 45), + << "key1" + << 34 + << "key2" + << 45), Date_t())); } @@ -161,7 +172,9 @@ TEST(FTDCFileManagerTest, TestNormalRestart) { ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, BSON("name" << "joe" - << "key1" << 3230792343LL << "key2" + << "key1" + << 3230792343LL + << "key2" << 235135), Date_t())); @@ -171,7 +184,9 @@ TEST(FTDCFileManagerTest, TestNormalRestart) { client, BSON("name" << "joe" - << "key1" << static_cast<long long int>(i * j * 37) << "key2" + << "key1" + << static_cast<long long int>(i * j * 37) + << "key2" << static_cast<long long int>(i * (645 << j))), Date_t())); } @@ -179,14 +194,20 @@ TEST(FTDCFileManagerTest, TestNormalRestart) { ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, BSON("name" << "joe" - << "key1" << 34 << "key2" << 45), + << "key1" + << 34 + << "key2" + << 45), Date_t())); // Add Value ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, BSON("name" << "joe" - << "key1" << 34 << "key2" << 45), + << "key1" + << 34 + << "key2" + << 45), Date_t())); } @@ -221,7 +242,9 @@ TEST(FTDCFileManagerTest, TestCorruptCrashRestart) { ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, BSON("name" << "joe" - << "key1" << 3230792343LL << "key2" + << "key1" + << 3230792343LL + << "key2" << 235135), Date_t())); @@ -231,7 +254,9 @@ TEST(FTDCFileManagerTest, TestCorruptCrashRestart) { client, BSON("name" << "joe" - << "key1" << static_cast<long long int>(i * j * 37) << "key2" + << "key1" + << static_cast<long long int>(i * j * 37) + << "key2" << static_cast<long long int>(i * (645 << j))), Date_t())); } @@ -239,14 +264,20 @@ TEST(FTDCFileManagerTest, TestCorruptCrashRestart) { ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, BSON("name" << "joe" - << "key1" << 34 << "key2" << 45), + << "key1" + << 34 + << "key2" + << 45), Date_t())); // Add Value ASSERT_OK(mgr->writeSampleAndRotateIfNeeded(client, BSON("name" << "joe" - << "key1" << 34 << "key2" << 45), + << "key1" + << 34 + << "key2" + << 45), Date_t())); } @@ -277,14 +308,23 @@ TEST(FTDCFileManagerTest, TestNormalCrashInterim) { BSONObj mdoc1 = BSON("name" << "some_metadata" - << "key1" << 34 << "something" << 98); + << "key1" + << 34 + << "something" + << 98); BSONObj sdoc1 = BSON("name" << "joe" - << "key1" << 34 << "key2" << 45); + << "key1" + << 34 + << "key2" + << 45); BSONObj sdoc2 = BSON("name" << "joe" - << "key3" << 34 << "key5" << 45); + << "key3" + << 34 + << "key5" + << 45); boost::filesystem::path fileOut; diff --git a/src/mongo/db/ftdc/file_reader.cpp b/src/mongo/db/ftdc/file_reader.cpp index 55af92327d5..54b79151958 100644 --- a/src/mongo/db/ftdc/file_reader.cpp +++ b/src/mongo/db/ftdc/file_reader.cpp @@ -194,7 +194,8 @@ StatusWith<BSONObj> FTDCFileReader::readDocument() { if (readSize != _stream.gcount()) { return {ErrorCodes::FileStreamFailed, str::stream() << "Failed to read " << readSize << " bytes from file \'" - << _file.generic_string() << "\'"}; + << _file.generic_string() + << "\'"}; } ConstDataRange cdr(_buffer.data(), _buffer.data() + bsonLength); diff --git a/src/mongo/db/ftdc/file_writer_test.cpp b/src/mongo/db/ftdc/file_writer_test.cpp index 6555a13c115..00124eb2c36 100644 --- a/src/mongo/db/ftdc/file_writer_test.cpp +++ b/src/mongo/db/ftdc/file_writer_test.cpp @@ -56,10 +56,16 @@ TEST(FTDCFileTest, TestFileBasicMetadata) { BSONObj doc1 = BSON("name" << "joe" - << "key1" << 34 << "key2" << 45); + << "key1" + << 34 + << "key2" + << 45); BSONObj doc2 = BSON("name" << "joe" - << "key3" << 34 << "key5" << 45); + << "key3" + << 34 + << "key5" + << 45); FTDCConfig config; FTDCFileWriter writer(&config); @@ -101,10 +107,16 @@ TEST(FTDCFileTest, TestFileBasicCompress) { BSONObj doc1 = BSON("name" << "joe" - << "key1" << 34 << "key2" << 45); + << "key1" + << 34 + << "key2" + << 45); BSONObj doc2 = BSON("name" << "joe" - << "key3" << 34 << "key5" << 45); + << "key3" + << 34 + << "key5" + << 45); FTDCConfig config; FTDCFileWriter writer(&config); @@ -180,41 +192,69 @@ TEST(FTDCFileTest, TestSchemaChanges) { c.addSample(BSON("name" << "joe" - << "key1" << 33 << "key2" << 42)); + << "key1" + << 33 + << "key2" + << 42)); c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45)); + << "key1" + << 34 + << "key2" + << 45)); c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45)); + << "key1" + << 34 + << "key2" + << 45)); // Add Value c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45 << "key3" << 47)); + << "key1" + << 34 + << "key2" + << 45 + << "key3" + << 47)); c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45 << "key3" << 47)); + << "key1" + << 34 + << "key2" + << 45 + << "key3" + << 47)); // Rename field c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key5" << 45 << "key3" << 47)); + << "key1" + << 34 + << "key5" + << 45 + << "key3" + << 47)); // Change type c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key5" + << "key1" + << 34 + << "key5" << "45" - << "key3" << 47)); + << "key3" + << 47)); // RemoveField c.addSample(BSON("name" << "joe" << "key5" << "45" - << "key3" << 47)); + << "key3" + << 47)); } // Test a full buffer @@ -225,22 +265,34 @@ TEST(FTDCFileTest, TestFull) { c.addSample(BSON("name" << "joe" - << "key1" << 33 << "key2" << 42)); + << "key1" + << 33 + << "key2" + << 42)); for (size_t i = 0; i <= FTDCConfig::kMaxSamplesPerArchiveMetricChunkDefault - 2; i++) { c.addSample(BSON("name" << "joe" - << "key1" << static_cast<long long int>(i * j) << "key2" << 45)); + << "key1" + << static_cast<long long int>(i * j) + << "key2" + << 45)); } c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45)); + << "key1" + << 34 + << "key2" + << 45)); // Add Value c.addSample(BSON("name" << "joe" - << "key1" << 34 << "key2" << 45)); + << "key1" + << 34 + << "key2" + << 45)); } } diff --git a/src/mongo/db/ftdc/ftdc_test.cpp b/src/mongo/db/ftdc/ftdc_test.cpp index b09aa2b6ef5..3a010ab32c5 100644 --- a/src/mongo/db/ftdc/ftdc_test.cpp +++ b/src/mongo/db/ftdc/ftdc_test.cpp @@ -109,8 +109,8 @@ void createDirectoryClean(const boost::filesystem::path& dir) { boost::filesystem::create_directory(dir); } -MONGO_INITIALIZER_WITH_PREREQUISITES(FTDCTestInit, - ("ThreadNameInitializer"))(InitializerContext* context) { +MONGO_INITIALIZER_WITH_PREREQUISITES(FTDCTestInit, ("ThreadNameInitializer")) +(InitializerContext* context) { setGlobalServiceContext(stdx::make_unique<ServiceContextNoop>()); getGlobalServiceContext()->setFastClockSource(stdx::make_unique<ClockSourceMock>()); diff --git a/src/mongo/db/ftdc/util.cpp b/src/mongo/db/ftdc/util.cpp index ea87e6b58e5..d56eb8ca380 100644 --- a/src/mongo/db/ftdc/util.cpp +++ b/src/mongo/db/ftdc/util.cpp @@ -152,7 +152,8 @@ StatusWith<bool> extractMetricsFromDocument(const BSONObj& referenceDoc, !(referenceElement.isNumber() == true && currentElement.isNumber() == referenceElement.isNumber())) { LOG(4) << "full-time diagnostic data capture schema change: field type change for " - "field '" << referenceElement.fieldNameStringData() << "' from '" + "field '" + << referenceElement.fieldNameStringData() << "' from '" << static_cast<int>(referenceElement.type()) << "' to '" << static_cast<int>(currentElement.type()) << "'"; matches = false; @@ -371,7 +372,9 @@ StatusWith<FTDCType> getBSONDocumentType(const BSONObj& obj) { static_cast<FTDCType>(value) != FTDCType::kMetadata) { return {ErrorCodes::BadValue, str::stream() << "Field '" << std::string(kFTDCTypeField) - << "' is not an expected value, found '" << value << "'"}; + << "' is not an expected value, found '" + << value + << "'"}; } return {static_cast<FTDCType>(value)}; diff --git a/src/mongo/db/ftdc/varint.h b/src/mongo/db/ftdc/varint.h index 0dd4c73fb1b..beb0313b9ac 100644 --- a/src/mongo/db/ftdc/varint.h +++ b/src/mongo/db/ftdc/varint.h @@ -31,8 +31,8 @@ #include <cstddef> #include <cstdint> -#include "mongo/base/status.h" #include "mongo/base/data_type.h" +#include "mongo/base/status.h" namespace mongo { /** |