diff options
-rw-r--r-- | config/src/vespa/config/frt/frtconnection.cpp | 15 | ||||
-rw-r--r-- | config/src/vespa/config/frt/frtconnection.h | 4 | ||||
-rw-r--r-- | config/src/vespa/config/frt/frtconnectionpool.cpp | 8 | ||||
-rw-r--r-- | metrics/src/vespa/metrics/metricmanager.cpp | 7 | ||||
-rw-r--r-- | metrics/src/vespa/metrics/metricmanager.h | 1 | ||||
-rw-r--r-- | metrics/src/vespa/metrics/state_api_adapter.cpp | 20 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/metrics_producer.cpp | 16 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/metrics_producer.h | 2 | ||||
-rw-r--r-- | storage/src/vespa/storage/config/distributorconfiguration.cpp | 9 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/random.cpp | 3 |
10 files changed, 50 insertions, 35 deletions
diff --git a/config/src/vespa/config/frt/frtconnection.cpp b/config/src/vespa/config/frt/frtconnection.cpp index bcdec9a4537..c5301a206aa 100644 --- a/config/src/vespa/config/frt/frtconnection.cpp +++ b/config/src/vespa/config/frt/frtconnection.cpp @@ -27,16 +27,16 @@ FRTConnection::FRTConnection(const vespalib::string& address, FRT_Supervisor& su FRTConnection::~FRTConnection() { - if (_target != NULL) { + if (_target != nullptr) { _target->SubRef(); - _target = NULL; + _target = nullptr; } } FRT_Target * FRTConnection::getTarget() { - if (_target == NULL) { + if (_target == nullptr) { _target = _supervisor.GetTarget(_address.c_str()); } else if ( ! _target->IsValid()) { _target->SubRef(); @@ -102,8 +102,7 @@ void FRTConnection::calculateSuspension(ErrorType type) } break; } - int64_t now = time(0); - now *= 1000; + int64_t now = milliSecsSinceEpoch(); _suspendedUntil = now + delay; if (_suspendWarned < (now - 5000)) { char date[32]; @@ -121,4 +120,10 @@ FRTConnection::allocRPCRequest() { return _supervisor.AllocRPCRequest(); } +using namespace std::chrono; +int64_t +FRTConnection::milliSecsSinceEpoch() { + return duration_cast<microseconds>(system_clock::now().time_since_epoch()).count(); +} + } diff --git a/config/src/vespa/config/frt/frtconnection.h b/config/src/vespa/config/frt/frtconnection.h index df57cfae92f..bde3e79b83c 100644 --- a/config/src/vespa/config/frt/frtconnection.h +++ b/config/src/vespa/config/frt/frtconnection.h @@ -34,7 +34,7 @@ public: enum ErrorType { TRANSIENT, FATAL }; FRTConnection(const vespalib::string & address, FRT_Supervisor & supervisor, const TimingValues & timingValues); - ~FRTConnection(); + ~FRTConnection() override; FRT_RPCRequest * allocRPCRequest() override; void invoke(FRT_RPCRequest * req, double timeout, FRT_IRequestWait * waiter) override; @@ -48,7 +48,7 @@ public: void setTransientDelay(int64_t delay) override { _transientDelay = delay; } int64_t getFatalDelay() { return _fatalDelay; } int64_t getMaxFatalDelay() { return getFatalDelay() * 6; } - void setFatalDelay(int64_t delay) { _fatalDelay = delay; } + static int64_t milliSecsSinceEpoch(); }; } // namespace config diff --git a/config/src/vespa/config/frt/frtconnectionpool.cpp b/config/src/vespa/config/frt/frtconnectionpool.cpp index b7440ceb7f0..5dccf033ab7 100644 --- a/config/src/vespa/config/frt/frtconnectionpool.cpp +++ b/config/src/vespa/config/frt/frtconnectionpool.cpp @@ -102,14 +102,15 @@ FRTConnectionPool::getNextHashBased() return nextFRTConnection; } + + const std::vector<FRTConnection *> & FRTConnectionPool::getReadySources(std::vector<FRTConnection*> & readySources) const { readySources.clear(); for (const auto & entry : _connections) { FRTConnection* source = entry.second.get(); - int64_t tnow = time(0); - tnow *= 1000; + int64_t tnow = FRTConnection::milliSecsSinceEpoch(); int64_t timestamp = tnow; if (source->getSuspendedUntil() < timestamp) { readySources.push_back(source); @@ -124,8 +125,7 @@ FRTConnectionPool::getSuspendedSources(std::vector<FRTConnection*> & suspendedSo suspendedSources.clear(); for (const auto & entry : _connections) { FRTConnection* source = entry.second.get(); - int64_t tnow = time(0); - tnow *= 1000; + int64_t tnow = FRTConnection::milliSecsSinceEpoch(); int64_t timestamp = tnow; if (source->getSuspendedUntil() >= timestamp) { suspendedSources.push_back(source); diff --git a/metrics/src/vespa/metrics/metricmanager.cpp b/metrics/src/vespa/metrics/metricmanager.cpp index dcc02696e2d..db2e5affa03 100644 --- a/metrics/src/vespa/metrics/metricmanager.cpp +++ b/metrics/src/vespa/metrics/metricmanager.cpp @@ -24,10 +24,15 @@ MetricManager::ConsumerSpec::ConsumerSpec() = default; MetricManager::ConsumerSpec::~ConsumerSpec() = default; time_t -MetricManager::Timer::getTime() const { +MetricManager::Timer::secondsSinceEpoch() { return std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count(); } +time_t +MetricManager::Timer::getTime() const { + return secondsSinceEpoch(); +} + void MetricManager::assertMetricLockLocked(const MetricLockGuard& g) const { if (!g.monitors(_waiter)) { diff --git a/metrics/src/vespa/metrics/metricmanager.h b/metrics/src/vespa/metrics/metricmanager.h index f2b2926873f..2edf39d67f1 100644 --- a/metrics/src/vespa/metrics/metricmanager.h +++ b/metrics/src/vespa/metrics/metricmanager.h @@ -70,6 +70,7 @@ public: struct Timer { virtual ~Timer() {} + static time_t secondsSinceEpoch(); virtual time_t getTime() const; virtual time_t getTimeInMilliSecs() const { return getTime() * 1000; } }; diff --git a/metrics/src/vespa/metrics/state_api_adapter.cpp b/metrics/src/vespa/metrics/state_api_adapter.cpp index ebb4fb4fd49..20421ebdbb2 100644 --- a/metrics/src/vespa/metrics/state_api_adapter.cpp +++ b/metrics/src/vespa/metrics/state_api_adapter.cpp @@ -15,8 +15,7 @@ StateApiAdapter::getMetrics(const vespalib::string &consumer) if (periods.empty()) { return ""; // no configuration yet } - const metrics::MetricSnapshot &snapshot( - _manager.getMetricSnapshot(guard, periods[0])); + const metrics::MetricSnapshot &snapshot(_manager.getMetricSnapshot(guard, periods[0])); vespalib::asciistream json; vespalib::JsonStream stream(json); metrics::JsonWriter metricJsonWriter(stream); @@ -31,16 +30,13 @@ StateApiAdapter::getTotalMetrics(const vespalib::string &consumer) _manager.updateMetrics(true); metrics::MetricLockGuard guard(_manager.getMetricLock()); _manager.checkMetricsAltered(guard); - time_t currentTime = time(0); - std::unique_ptr<metrics::MetricSnapshot> generated( - new metrics::MetricSnapshot( - "Total metrics from start until current time", 0, - _manager.getTotalMetricSnapshot(guard).getMetrics(), - true)); - _manager.getActiveMetrics(guard) - .addToSnapshot(*generated, false, currentTime); - generated->setFromTime( - _manager.getTotalMetricSnapshot(guard).getFromTime()); + time_t currentTime = MetricManager::Timer::secondsSinceEpoch(); + auto generated = std::make_unique<metrics::MetricSnapshot>( + "Total metrics from start until current time", 0, + _manager.getTotalMetricSnapshot(guard).getMetrics(), + true); + _manager.getActiveMetrics(guard).addToSnapshot(*generated, false, currentTime); + generated->setFromTime(_manager.getTotalMetricSnapshot(guard).getFromTime()); const metrics::MetricSnapshot &snapshot = *generated; vespalib::asciistream json; vespalib::JsonStream stream(json); diff --git a/slobrok/src/vespa/slobrok/server/metrics_producer.cpp b/slobrok/src/vespa/slobrok/server/metrics_producer.cpp index 28959e94d35..1b3f7fe5a82 100644 --- a/slobrok/src/vespa/slobrok/server/metrics_producer.cpp +++ b/slobrok/src/vespa/slobrok/server/metrics_producer.cpp @@ -7,8 +7,15 @@ namespace slobrok { +using namespace std::chrono; + namespace { +time_t +secondsSinceEpoch() { + return duration_cast<seconds>(system_clock::now().time_since_epoch()).count(); +} + class MetricsSnapshotter : public FNET_Task { MetricsProducer &_owner; @@ -100,14 +107,13 @@ MetricsProducer::MetricsProducer(const RPCHooks &hooks, : _rpcHooks(hooks), _lastMetrics(RPCHooks::Metrics::zero()), _producer(), - _startTime(time(NULL)), + _startTime(secondsSinceEpoch()), _lastSnapshotStart(_startTime), _snapshotter(new MetricsSnapshotter(transport, *this)) { } -MetricsProducer::~MetricsProducer() { -} +MetricsProducer::~MetricsProducer() = default; vespalib::string MetricsProducer::getMetrics(const vespalib::string &consumer) @@ -118,7 +124,7 @@ MetricsProducer::getMetrics(const vespalib::string &consumer) vespalib::string MetricsProducer::getTotalMetrics(const vespalib::string &) { - uint32_t now = time(NULL); + uint32_t now = secondsSinceEpoch(); RPCHooks::Metrics current = _rpcHooks.getMetrics(); RPCHooks::Metrics start = RPCHooks::Metrics::zero(); return makeSnapshot(start, current, _startTime, now); @@ -128,7 +134,7 @@ MetricsProducer::getTotalMetrics(const vespalib::string &) void MetricsProducer::snapshot() { - uint32_t now = time(NULL); + uint32_t now = secondsSinceEpoch(); RPCHooks::Metrics current = _rpcHooks.getMetrics(); _producer.setMetrics(makeSnapshot(_lastMetrics, current, _lastSnapshotStart, now)); _lastMetrics = current; diff --git a/slobrok/src/vespa/slobrok/server/metrics_producer.h b/slobrok/src/vespa/slobrok/server/metrics_producer.h index 535988f9a2e..460844a6d87 100644 --- a/slobrok/src/vespa/slobrok/server/metrics_producer.h +++ b/slobrok/src/vespa/slobrok/server/metrics_producer.h @@ -26,7 +26,7 @@ public: void snapshot(); MetricsProducer(const RPCHooks &hooks, FNET_Transport &transport); - ~MetricsProducer(); + ~MetricsProducer() override; }; diff --git a/storage/src/vespa/storage/config/distributorconfiguration.cpp b/storage/src/vespa/storage/config/distributorconfiguration.cpp index 294ce56f536..e6d9ce05d3e 100644 --- a/storage/src/vespa/storage/config/distributorconfiguration.cpp +++ b/storage/src/vespa/storage/config/distributorconfiguration.cpp @@ -8,6 +8,8 @@ #include <vespa/log/log.h> LOG_SETUP(".distributorconfiguration"); +using namespace std::chrono; + namespace storage { DistributorConfiguration::DistributorConfiguration(StorageComponent& component) @@ -38,7 +40,7 @@ DistributorConfiguration::DistributorConfiguration(StorageComponent& component) _minimumReplicaCountingMode(ReplicaCountingMode::TRUSTED) { } -DistributorConfiguration::~DistributorConfiguration() { } +DistributorConfiguration::~DistributorConfiguration() = default; namespace { @@ -60,8 +62,7 @@ DistributorConfiguration::containsTimeStatement(const std::string& documentSelec { TimeVisitor visitor; try { - document::select::Parser parser(*_component.getTypeRepo(), - _component.getBucketIdFactory()); + document::select::Parser parser(*_component.getTypeRepo(), _component.getBucketIdFactory()); std::unique_ptr<document::select::Node> node = parser.parse(documentSelection); node->visit(visitor); @@ -123,7 +124,7 @@ DistributorConfiguration::configure(const vespa::config::content::core::StorDist // Always changes. _lastGarbageCollectionChange = 1; } else if (_garbageCollectionSelection != config.garbagecollection.selectiontoremove) { - _lastGarbageCollectionChange = time(NULL); + _lastGarbageCollectionChange = duration_cast<seconds>(system_clock::now().time_since_epoch()).count(); } _garbageCollectionSelection = config.garbagecollection.selectiontoremove; diff --git a/vespalib/src/vespa/vespalib/util/random.cpp b/vespalib/src/vespa/vespalib/util/random.cpp index 0f29e398ca6..50ff41e3407 100644 --- a/vespalib/src/vespa/vespalib/util/random.cpp +++ b/vespalib/src/vespa/vespalib/util/random.cpp @@ -5,6 +5,7 @@ #include <cstring> #include <ctime> #include <unistd.h> +#include <chrono> namespace vespalib { @@ -30,7 +31,7 @@ RandomGen::RandomGen() : _state(0) { unsigned long seed = getpid(); - seed ^= time(0); + seed ^= std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now().time_since_epoch()).count(); char hn[32]; memset(hn, 0, sizeof(hn)); gethostname(hn, 32); |