summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-08-26 07:22:19 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2019-08-26 07:22:19 +0000
commit342e8e9753386b3e3e3d9a823723df63b8971308 (patch)
tree27969ec412e91fce6d2d27bdf09522c35bc624cf
parent78133f8c95b11b460aa4fd9ad89bd00bb716c6f8 (diff)
Avoid calling time(nullptr)
-rw-r--r--config/src/vespa/config/frt/frtconnection.cpp15
-rw-r--r--config/src/vespa/config/frt/frtconnection.h4
-rw-r--r--config/src/vespa/config/frt/frtconnectionpool.cpp8
-rw-r--r--metrics/src/vespa/metrics/metricmanager.cpp7
-rw-r--r--metrics/src/vespa/metrics/metricmanager.h1
-rw-r--r--metrics/src/vespa/metrics/state_api_adapter.cpp20
-rw-r--r--slobrok/src/vespa/slobrok/server/metrics_producer.cpp16
-rw-r--r--slobrok/src/vespa/slobrok/server/metrics_producer.h2
-rw-r--r--storage/src/vespa/storage/config/distributorconfiguration.cpp9
-rw-r--r--vespalib/src/vespa/vespalib/util/random.cpp3
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);