diff --git a/flow/TDMetric.actor.h b/flow/TDMetric.actor.h index 7ace1a2e9e..d01af058ae 100755 --- a/flow/TDMetric.actor.h +++ b/flow/TDMetric.actor.h @@ -97,9 +97,7 @@ struct KeyWithWriter { KeyWithWriter( KeyWithWriter&& r ) : key(std::move(r.key)), writer(std::move(r.writer)), writerOffset(r.writerOffset) {} void operator=( KeyWithWriter&& r ) { key = std::move(r.key); writer = std::move(r.writer); writerOffset = r.writerOffset; } - StringRef value() { - return StringRef(writer.toValue().substr(writerOffset)); - } + StringRef value() const { return StringRef(writer.toValue().substr(writerOffset)); } }; // This is a very minimal interface for getting metric data from the DB which is needed @@ -238,7 +236,7 @@ struct MetricData { start = r.start; rollTime = r.rollTime; appendStart = r.appendStart; writer = std::move(r.writer); } - std::string toString(); + std::string toString() const; }; // Some common methods to reduce code redundancy across different metric definitions @@ -452,12 +450,12 @@ struct FieldValueBlockEncoding<Standalone<StringRef>> { // Field level for value type of T using header type of Header. Default header type is the default FieldHeader implementation for type T. template <class T, class Header = FieldHeader<T>, class Encoder = FieldValueBlockEncoding<T>> -struct FieldLevel { - - Deque<MetricData> metrics; +class FieldLevel { int64_t appendUsed; + Deque<MetricData> metrics; Header header; +public: // The previous header and the last timestamp at which an out going MetricData block requires header patching Optional<Header> previousHeader; uint64_t lastTimeRequiringHeaderPatch; @@ -465,15 +463,10 @@ struct FieldLevel { Encoder enc; explicit FieldLevel() : appendUsed(0) { - metrics.emplace_back(MetricData()); + metrics.emplace_back(); metrics.back().writer << header; } - FieldLevel(FieldLevel &&f) - : metrics(std::move(f.metrics)), appendUsed(f.appendUsed), enc(f.enc), header(f.header), - previousHeader(f.previousHeader), lastTimeRequiringHeaderPatch(f.lastTimeRequiringHeaderPatch) { - } - // update Header, use Encoder to write T v void log( T v, uint64_t t, bool& overflow, int64_t& bytes ) { int lastLength = metrics.back().writer.getLength(); @@ -504,7 +497,7 @@ struct FieldLevel { } metrics.back().rollTime = t; - metrics.emplace_back(MetricData()); + metrics.emplace_back(); metrics.back().writer << header; enc = Encoder(); appendUsed = 0; @@ -517,9 +510,9 @@ struct FieldLevel { metrics.back().rollTime = t; appendUsed += metrics.back().writer.getLength(); if(metrics.back().appendStart) - metrics.emplace_back(MetricData(metrics.back().appendStart)); + metrics.emplace_back(metrics.back().appendStart); else - metrics.emplace_back(MetricData(metrics.back().start)); + metrics.emplace_back(metrics.back().start); } } diff --git a/flow/TDMetric.cpp b/flow/TDMetric.cpp index f25737ea1c..b6c126eeed 100644 --- a/flow/TDMetric.cpp +++ b/flow/TDMetric.cpp @@ -211,6 +211,6 @@ void DynamicEventMetric::registerFields(MetricKeyRef const &mk, std::vector<Stan fieldsToRegister.clear(); } -std::string MetricData::toString() { +std::string MetricData::toString() const { return format("MetricData(addr=%p start=%llu appendStart=%llu rollTime=%llu writerLen=%d)", this, start, appendStart, rollTime, writer.getLength()); } diff --git a/flow/serialize.h b/flow/serialize.h index d671876719..cd60b1fa70 100644 --- a/flow/serialize.h +++ b/flow/serialize.h @@ -346,14 +346,14 @@ public: *(T*)writeBytes(sizeof(T)) = t; } void* getData() { return data; } - int getLength() { return size; } - Standalone<StringRef> toValue() { return Standalone<StringRef>( StringRef(data,size), arena ); } + int getLength() const { return size; } + Standalone<StringRef> toValue() const { return Standalone<StringRef>(StringRef(data, size), arena); } template <class VersionOptions> explicit BinaryWriter( VersionOptions vo ) : data(nullptr), size(0), allocated(0) { vo.write(*this); } BinaryWriter( BinaryWriter&& rhs ) : arena(std::move(rhs.arena)), data(rhs.data), size(rhs.size), allocated(rhs.allocated), m_protocolVersion(rhs.m_protocolVersion) { rhs.size = 0; rhs.allocated = 0; - rhs.data = 0; + rhs.data = nullptr; } void operator=( BinaryWriter&& r) { arena = std::move(r.arena); @@ -363,7 +363,7 @@ public: m_protocolVersion = r.m_protocolVersion; r.size = 0; r.allocated = 0; - r.data = 0; + r.data = nullptr; } template <class T, class VersionOptions>