diff options
Diffstat (limited to 'storage/src')
134 files changed, 321 insertions, 317 deletions
diff --git a/storage/src/tests/bucketdb/bucketmanagertest.cpp b/storage/src/tests/bucketdb/bucketmanagertest.cpp index a20902422b0..dc560cf58cd 100644 --- a/storage/src/tests/bucketdb/bucketmanagertest.cpp +++ b/storage/src/tests/bucketdb/bucketmanagertest.cpp @@ -602,7 +602,7 @@ public: return std::make_shared<api::RequestBucketInfoCommand>(makeBucketSpace(), 0, explicit_state); } - auto createFullFetchCommandWithHash(vespalib::stringref hash) const { + auto createFullFetchCommandWithHash(std::string_view hash) const { return std::make_shared<api::RequestBucketInfoCommand>(makeBucketSpace(), 0, *_state, hash); } diff --git a/storage/src/tests/common/hostreporter/hostinfotest.cpp b/storage/src/tests/common/hostreporter/hostinfotest.cpp index 13d53007af4..7548b431c2c 100644 --- a/storage/src/tests/common/hostreporter/hostinfotest.cpp +++ b/storage/src/tests/common/hostreporter/hostinfotest.cpp @@ -1,6 +1,5 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include "util.h" #include <vespa/storage/common/hostreporter/hostinfo.h> #include <vespa/storage/common/hostreporter/hostreporter.h> #include <vespa/vespalib/data/slime/slime.h> @@ -38,7 +37,7 @@ TEST(HostInfoReporterTest, host_info_reporter) { hostinfo.printReport(stream); stream << End(); - std::string jsonData = json.str(); + std::string_view jsonData = json.view(); vespalib::Slime slime; JsonFormat::decode(Memory(jsonData), slime); EXPECT_EQ(slime.get()["dummy"]["foo"].asString(), "bar"); diff --git a/storage/src/tests/common/hostreporter/util.cpp b/storage/src/tests/common/hostreporter/util.cpp index f87fb9728fb..4e40eb6aa3f 100644 --- a/storage/src/tests/common/hostreporter/util.cpp +++ b/storage/src/tests/common/hostreporter/util.cpp @@ -22,7 +22,7 @@ reporterToSlime(HostReporter &hostReporter, vespalib::Slime &slime) { stream << Object(); hostReporter.report(stream); stream << End(); - std::string jsonData = json.str(); + std::string jsonData(json.view()); size_t parsed = JsonFormat::decode(Memory(jsonData), slime); if (parsed == 0) { diff --git a/storage/src/tests/common/metricstest.cpp b/storage/src/tests/common/metricstest.cpp index 6ca84f0304a..9a52adf7fa3 100644 --- a/storage/src/tests/common/metricstest.cpp +++ b/storage/src/tests/common/metricstest.cpp @@ -204,7 +204,7 @@ TEST_F(MetricsTest, filestor_metrics) { } else { \ std::ostringstream valueost; \ valueost << metric << " count=" << count; \ - ASSERT_TRUE(s.find(valueost.str()) != std::string::npos) \ + ASSERT_TRUE(s.find(valueost.view()) != std::string::npos) \ << "Did not find value " + valueost.str() + " in metric dump " + s; \ } \ } diff --git a/storage/src/tests/distributor/distributor_host_info_reporter_test.cpp b/storage/src/tests/distributor/distributor_host_info_reporter_test.cpp index c56911a066e..3dfc91a7848 100644 --- a/storage/src/tests/distributor/distributor_host_info_reporter_test.cpp +++ b/storage/src/tests/distributor/distributor_host_info_reporter_test.cpp @@ -81,7 +81,7 @@ getBucketSpaceStats(const vespalib::Slime& root, uint16_t nodeIndex, const vespa { const auto& bucketSpaces = getNode(root, nodeIndex)["bucket-spaces"]; for (size_t i = 0; i < bucketSpaces.entries(); ++i) { - if (bucketSpaces[i]["name"].asString().make_stringref() == bucketSpaceName) { + if (bucketSpaces[i]["name"].asString().make_stringview() == bucketSpaceName) { return bucketSpaces[i]; } } @@ -181,7 +181,7 @@ TEST_F(DistributorHostInfoReporterTest, generate_example_json) { stream << End(); stream.finalize(); - std::string jsonString = json.str(); + std::string_view jsonString = json.view(); std::string path = TEST_PATH("../../../../protocols/getnodestate/distributor.json"); std::string goldenString = File::readAll(path); diff --git a/storage/src/tests/distributor/distributor_stripe_test.cpp b/storage/src/tests/distributor/distributor_stripe_test.cpp index fbc9cb44462..ee1e05154bb 100644 --- a/storage/src/tests/distributor/distributor_stripe_test.cpp +++ b/storage/src/tests/distributor/distributor_stripe_test.cpp @@ -670,7 +670,7 @@ TEST_F(DistributorStripeTest, external_client_requests_are_handled_individually_ std::vector<api::StorageMessage::Priority> priorities({50, 255, 10, 40, 0}); document::DocumentId id("id:foo:testdoctype1:n=1:foo"); - vespalib::stringref field_set = ""; + std::string_view field_set = ""; for (auto pri : priorities) { auto cmd = std::make_shared<api::GetCommand>(makeDocumentBucket(document::BucketId()), id, field_set); cmd->setPriority(pri); @@ -728,7 +728,7 @@ TEST_F(DistributorStripeTest, closing_aborts_priority_queued_client_requests) addNodesToBucketDB(bucket, "0=1/1/1/t"); document::DocumentId id("id:foo:testdoctype1:n=1:foo"); - vespalib::stringref field_set = ""; + std::string_view field_set = ""; for (int i = 0; i < 10; ++i) { auto cmd = std::make_shared<api::GetCommand>(makeDocumentBucket(document::BucketId()), id, field_set); _stripe->handle_or_enqueue_message(cmd); @@ -1071,10 +1071,23 @@ TEST_F(DistributorStripeTest, bucket_ownership_change_does_not_cancel_pending_op do_test_not_cancelled_pending_op_without_bucket_ownership_change(true); } -// TODO we do not have good handling of bucket ownership changes combined with -// distribution config changes... Hard to remove all such edge cases unless we -// make state+config change an atomic operation initiated by the cluster controller -// (hint: we should do this). +TEST_F(DistributorStripeTest, maintenance_operation_cancellation_does_not_invoke_recheck_with_invalid_bucket) { + setup_stripe(Redundancy(1), NodeCount(2), "version:1 distributor:1 storage:2"); + configure_enable_operation_cancellation(true); + addNodesToBucketDB(BucketId(16, 1), "0=3/4/5/t/u/r,1=4/5/6/t/u/r"); + + tickDistributorNTimes(10); // ==> Activation sent to node 1 (largest ready replica) + ASSERT_EQ(_sender.getCommands(true), "SetBucketState => 1"); + + // Node 1 takes a nosedive; the pending SetBucketState operation is cancelled internally. + simulate_cluster_state_transition("version:2 distributor:1 storage:2 .1.s:d", true); + auto reply = std::make_shared<api::SetBucketStateReply>(dynamic_cast<api::SetBucketStateCommand&>(*_sender.command(0))); + _stripe->handleReply(reply); + // If we have gotten this far without exploding with an invariant check failure, all is well. + EXPECT_EQ("BucketId(0x4000000000000001) : " + "node(idx=0,crc=0x3,docs=4/4,bytes=5/5,trusted=true,active=false,ready=true)", // no node 1 + dumpBucket(BucketId(16, 1))); +} } diff --git a/storage/src/tests/distributor/distributor_stripe_test_util.cpp b/storage/src/tests/distributor/distributor_stripe_test_util.cpp index 0628b62bdfe..9cc7934ddb6 100644 --- a/storage/src/tests/distributor/distributor_stripe_test_util.cpp +++ b/storage/src/tests/distributor/distributor_stripe_test_util.cpp @@ -537,7 +537,7 @@ DistributorStripeTestUtil::getBucketSpaces() const } void -DistributorStripeTestUtil::enable_cluster_state(vespalib::stringref state) +DistributorStripeTestUtil::enable_cluster_state(std::string_view state) { getBucketDBUpdater().simulate_cluster_state_bundle_activation(lib::ClusterStateBundle(lib::ClusterState(state))); } diff --git a/storage/src/tests/distributor/distributor_stripe_test_util.h b/storage/src/tests/distributor/distributor_stripe_test_util.h index 862d9bfbfba..d6877c0b3e0 100644 --- a/storage/src/tests/distributor/distributor_stripe_test_util.h +++ b/storage/src/tests/distributor/distributor_stripe_test_util.h @@ -264,7 +264,7 @@ protected: }; MessageSenderImpl _messageSender; - void enable_cluster_state(vespalib::stringref state); + void enable_cluster_state(std::string_view state); void enable_cluster_state(const lib::ClusterStateBundle& state); }; diff --git a/storage/src/tests/distributor/externaloperationhandlertest.cpp b/storage/src/tests/distributor/externaloperationhandlertest.cpp index 33da4727017..5677e5e6628 100644 --- a/storage/src/tests/distributor/externaloperationhandlertest.cpp +++ b/storage/src/tests/distributor/externaloperationhandlertest.cpp @@ -32,8 +32,8 @@ namespace storage::distributor { struct ExternalOperationHandlerTest : Test, DistributorStripeTestUtil { document::TestDocMan _testDocMan; - document::BucketId findNonOwnedUserBucketInState(vespalib::stringref state); - document::BucketId findOwned1stNotOwned2ndInStates(vespalib::stringref state1, vespalib::stringref state2); + document::BucketId findNonOwnedUserBucketInState(std::string_view state); + document::BucketId findOwned1stNotOwned2ndInStates(std::string_view state1, std::string_view state2); std::shared_ptr<api::GetCommand> makeGetCommandForUser(uint64_t id) const; std::shared_ptr<api::GetCommand> makeGetCommand(const vespalib::string& id) const; @@ -130,7 +130,7 @@ TEST_F(ExternalOperationHandlerTest, bucket_split_mask) { document::BucketId ExternalOperationHandlerTest::findNonOwnedUserBucketInState( - vespalib::stringref statestr) + std::string_view statestr) { lib::ClusterState state(statestr); for (uint64_t i = 1; i < 1000; ++i) { @@ -144,8 +144,8 @@ ExternalOperationHandlerTest::findNonOwnedUserBucketInState( document::BucketId ExternalOperationHandlerTest::findOwned1stNotOwned2ndInStates( - vespalib::stringref statestr1, - vespalib::stringref statestr2) + std::string_view statestr1, + std::string_view statestr2) { lib::ClusterState state1(statestr1); lib::ClusterState state2(statestr2); diff --git a/storage/src/tests/distributor/mergeoperationtest.cpp b/storage/src/tests/distributor/mergeoperationtest.cpp index 754974ebf97..19752e2db9e 100644 --- a/storage/src/tests/distributor/mergeoperationtest.cpp +++ b/storage/src/tests/distributor/mergeoperationtest.cpp @@ -148,13 +148,12 @@ TEST_F(MergeOperationTest, fail_if_delete_bucket_fails) { namespace { std::string getNodeList(std::string state, uint32_t redundancy, std::string existing) { - lib::Distribution distribution( - lib::Distribution::getDefaultDistributionConfig(redundancy)); + lib::Distribution distribution(lib::Distribution::getDefaultDistributionConfig(redundancy)); lib::ClusterState clusterState(state); vespalib::StringTokenizer st(existing, ","); std::vector<BucketCopy> bucketDB(st.size()); for (uint32_t i = 0; i < st.size(); i++) { - std::string num = st[i]; + std::string num(st[i]); size_t pos = num.find('t'); bool trusted = false; diff --git a/storage/src/tests/distributor/read_for_write_visitor_operation_test.cpp b/storage/src/tests/distributor/read_for_write_visitor_operation_test.cpp index 21116f8a281..d4b8c0605af 100644 --- a/storage/src/tests/distributor/read_for_write_visitor_operation_test.cpp +++ b/storage/src/tests/distributor/read_for_write_visitor_operation_test.cpp @@ -215,7 +215,7 @@ TEST_F(ReadForWriteVisitorOperationStarterTest, visitor_locks_bucket_with_random auto cmd = std::dynamic_pointer_cast<api::CreateVisitorCommand>(_sender.command(0)); ASSERT_TRUE(cmd); EXPECT_EQ(cmd->getParameters().get(reindexing_bucket_lock_visitor_parameter_key(), - vespalib::stringref("not found :I")), + std::string_view("not found :I")), "fritjof"); } diff --git a/storage/src/tests/distributor/simplemaintenancescannertest.cpp b/storage/src/tests/distributor/simplemaintenancescannertest.cpp index 3541857e029..ba77f9b3abe 100644 --- a/storage/src/tests/distributor/simplemaintenancescannertest.cpp +++ b/storage/src/tests/distributor/simplemaintenancescannertest.cpp @@ -28,7 +28,7 @@ struct SimpleMaintenanceScannerTest : Test { void addBucketToDb(document::BucketSpace bucketSpace, int bucketNum); void addBucketToDb(int bucketNum); - bool scanEntireDatabase(int expected); + bool scanEntireDatabase(int expected) const; std::string stringifyGlobalPendingStats(const PendingStats& stats) const; void SetUp() override; @@ -58,8 +58,7 @@ SimpleMaintenanceScannerTest::addBucketToDb(int bucketNum) } std::string -SimpleMaintenanceScannerTest::stringifyGlobalPendingStats( - const PendingStats& stats) const +SimpleMaintenanceScannerTest::stringifyGlobalPendingStats(const PendingStats& stats) const { std::ostringstream ss; ss << stats.global; @@ -99,8 +98,11 @@ namespace { std::string sortLines(const std::string& source) { vespalib::StringTokenizer st(source,"\n",""); - std::vector<std::string> lines; - std::copy(st.begin(), st.end(), std::back_inserter(lines)); + std::vector<vespalib::string> lines; + lines.reserve(st.size()); + for (const auto & token : st) { + lines.emplace_back(token); + } std::sort(lines.begin(), lines.end()); std::ostringstream ost; for (auto& line : lines) { @@ -125,7 +127,7 @@ TEST_F(SimpleMaintenanceScannerTest, prioritize_multiple_buckets) { } bool -SimpleMaintenanceScannerTest::scanEntireDatabase(int expected) +SimpleMaintenanceScannerTest::scanEntireDatabase(int expected) const { for (int i = 0; i < expected; ++i) { if (_scanner->scanNext().isDone()) { diff --git a/storage/src/tests/distributor/top_level_bucket_db_updater_test.cpp b/storage/src/tests/distributor/top_level_bucket_db_updater_test.cpp index 4fe8d88fb8d..26242720966 100644 --- a/storage/src/tests/distributor/top_level_bucket_db_updater_test.cpp +++ b/storage/src/tests/distributor/top_level_bucket_db_updater_test.cpp @@ -407,10 +407,10 @@ public: std::vector<uint16_t> expand_node_vec(const std::vector<uint16_t>& nodes); void trigger_completed_but_not_yet_activated_transition( - vespalib::stringref initial_state_str, + std::string_view initial_state_str, uint32_t initial_buckets, uint32_t initial_expected_msgs, - vespalib::stringref pending_state_str, + std::string_view pending_state_str, uint32_t pending_buckets, uint32_t pending_expected_msgs); @@ -603,10 +603,10 @@ TopLevelBucketDBUpdaterTest::get_node_list(const std::vector<uint16_t>& nodes) void TopLevelBucketDBUpdaterTest::trigger_completed_but_not_yet_activated_transition( - vespalib::stringref initial_state_str, + std::string_view initial_state_str, uint32_t initial_buckets, uint32_t initial_expected_msgs, - vespalib::stringref pending_state_str, + std::string_view pending_state_str, uint32_t pending_buckets, uint32_t pending_expected_msgs) { diff --git a/storage/src/tests/distributor/top_level_distributor_test.cpp b/storage/src/tests/distributor/top_level_distributor_test.cpp index 8463e0b548c..d14929b81fe 100644 --- a/storage/src/tests/distributor/top_level_distributor_test.cpp +++ b/storage/src/tests/distributor/top_level_distributor_test.cpp @@ -56,7 +56,6 @@ struct TopLevelDistributorTest : Test, TopLevelDistributorTestUtil { // added type safety. using NodeCount = int; using Redundancy = int; - using ConfigBuilder = vespa::config::content::core::StorDistributormanagerConfigBuilder; std::string resolve_stripe_operation_routing(const std::shared_ptr<api::StorageMessage> & msg) { handle_top_level_message(msg); @@ -70,7 +69,7 @@ struct TopLevelDistributorTest : Test, TopLevelDistributorTestUtil { } stripes[i]->_messageQueue.clear(); } - return posted_msgs.str(); + return std::string(posted_msgs.view()); } StatusReporterDelegate& distributor_status_delegate() { diff --git a/storage/src/tests/distributor/top_level_distributor_test_util.cpp b/storage/src/tests/distributor/top_level_distributor_test_util.cpp index 4816c1dce22..4fb3fba904b 100644 --- a/storage/src/tests/distributor/top_level_distributor_test_util.cpp +++ b/storage/src/tests/distributor/top_level_distributor_test_util.cpp @@ -419,7 +419,7 @@ TopLevelDistributorTestUtil::all_distributor_stripes_are_in_recovery_mode() cons } void -TopLevelDistributorTestUtil::enable_distributor_cluster_state(vespalib::stringref state, +TopLevelDistributorTestUtil::enable_distributor_cluster_state(std::string_view state, bool has_bucket_ownership_transfer) { bucket_db_updater().simulate_cluster_state_bundle_activation( diff --git a/storage/src/tests/distributor/top_level_distributor_test_util.h b/storage/src/tests/distributor/top_level_distributor_test_util.h index 5ae6646502f..b4fd0ccec12 100644 --- a/storage/src/tests/distributor/top_level_distributor_test_util.h +++ b/storage/src/tests/distributor/top_level_distributor_test_util.h @@ -168,7 +168,7 @@ protected: MessageSenderImpl _message_sender; uint32_t _num_distributor_stripes; - void enable_distributor_cluster_state(vespalib::stringref state, bool has_bucket_ownership_transfer = false); + void enable_distributor_cluster_state(std::string_view state, bool has_bucket_ownership_transfer = false); void enable_distributor_cluster_state(const lib::ClusterStateBundle& state); }; diff --git a/storage/src/tests/distributor/twophaseupdateoperationtest.cpp b/storage/src/tests/distributor/twophaseupdateoperationtest.cpp index 8ccca37e6c1..02473f31a54 100644 --- a/storage/src/tests/distributor/twophaseupdateoperationtest.cpp +++ b/storage/src/tests/distributor/twophaseupdateoperationtest.cpp @@ -134,7 +134,7 @@ struct TwoPhaseUpdateOperationTest : Test, DistributorStripeTestUtil { _timestampToUpdate = ts; return *this; } - UpdateOptions& condition(vespalib::stringref cond) { + UpdateOptions& condition(std::string_view cond) { _condition = documentapi::TestAndSetCondition(cond); return *this; } diff --git a/storage/src/tests/distributor/visitoroperationtest.cpp b/storage/src/tests/distributor/visitoroperationtest.cpp index 5ad0ef939b0..cf07303fd24 100644 --- a/storage/src/tests/distributor/visitoroperationtest.cpp +++ b/storage/src/tests/distributor/visitoroperationtest.cpp @@ -1114,7 +1114,7 @@ TEST_F(VisitorOperationTest, assigning_put_lock_access_token_sets_special_visito auto cmd = std::dynamic_pointer_cast<api::CreateVisitorCommand>(_sender.command(0)); ASSERT_TRUE(cmd); EXPECT_EQ(cmd->getParameters().get(reindexing_bucket_lock_visitor_parameter_key(), - vespalib::stringref("")), + std::string_view("")), "its-a me, mario"); } diff --git a/storage/src/tests/frameworkimpl/status/statustest.cpp b/storage/src/tests/frameworkimpl/status/statustest.cpp index 8592a332f0c..72886d2c29d 100644 --- a/storage/src/tests/frameworkimpl/status/statustest.cpp +++ b/storage/src/tests/frameworkimpl/status/statustest.cpp @@ -30,7 +30,7 @@ vespalib::string fetch(int port, const vespalib::string &path) { vespalib::string result; ssize_t res = conn->read(buf, sizeof(buf)); while (res > 0) { - result.append(vespalib::stringref(buf, res)); + result.append(std::string_view(buf, res)); res = conn->read(buf, sizeof(buf)); } assert(res == 0); diff --git a/storage/src/tests/persistence/filestorage/feed_operation_batching_test.cpp b/storage/src/tests/persistence/filestorage/feed_operation_batching_test.cpp index cf16123933b..1e4f581b779 100644 --- a/storage/src/tests/persistence/filestorage/feed_operation_batching_test.cpp +++ b/storage/src/tests/persistence/filestorage/feed_operation_batching_test.cpp @@ -139,7 +139,7 @@ struct FeedOperationBatchingTest : FileStorTestFixture { auto id = as_cmd->getDocumentId(); ASSERT_TRUE(id.getScheme().hasNumber()); EXPECT_EQ(id.getScheme().getNumber(), expected_bucket_idx) << id; - std::string actual_id_part = id.getScheme().getNamespaceSpecific(); + std::string actual_id_part(id.getScheme().getNamespaceSpecific()); std::string expected_id_part = std::to_string(expected_doc_idx); EXPECT_EQ(actual_id_part, expected_id_part) << id; } diff --git a/storage/src/tests/persistence/mergehandlertest.cpp b/storage/src/tests/persistence/mergehandlertest.cpp index 2514f524b57..1a80374d182 100644 --- a/storage/src/tests/persistence/mergehandlertest.cpp +++ b/storage/src/tests/persistence/mergehandlertest.cpp @@ -44,7 +44,7 @@ struct MergeHandlerTest : PersistenceTestUtils { // @TODO Add test to test that buildBucketInfo and mergeLists create minimal list (wrong sorting screws this up) - void fillDummyApplyDiff(std::vector<api::ApplyBucketDiffCommand::Entry>& diff); + void fillDummyApplyDiff(std::vector<api::ApplyBucketDiffCommand::Entry>& diff) const; std::shared_ptr<api::ApplyBucketDiffCommand> createDummyApplyDiff( int timestampOffset, uint16_t hasMask = 0x1, @@ -73,7 +73,6 @@ struct MergeHandlerTest : PersistenceTestUtils { virtual void invoke(MergeHandlerTest&, MergeHandler&, spi::Context&) = 0; virtual std::string afterInvoke(MergeHandlerTest&, MergeHandler&) = 0; }; - friend class HandlerInvoker; class NoReplyHandlerInvoker : public HandlerInvoker @@ -92,13 +91,6 @@ struct MergeHandlerTest : PersistenceTestUtils { void invoke(MergeHandlerTest&, MergeHandler&, spi::Context&) override; }; - class HandleMergeBucketReplyInvoker - : public NoReplyHandlerInvoker - { - public: - void invoke(MergeHandlerTest&, MergeHandler&, spi::Context&) override; - }; - class HandleGetBucketDiffInvoker : public NoReplyHandlerInvoker { @@ -168,13 +160,13 @@ struct MergeHandlerTest : PersistenceTestUtils { HandlerInvoker& invoker, const ExpectedExceptionSpec& spec); - MergeHandler createHandler(size_t maxChunkSize = 0x400000) { - return MergeHandler(getEnv(), getPersistenceProvider(), - getEnv()._component.cluster_context(), getEnv()._component.getClock(), *_sequenceTaskExecutor, maxChunkSize); + MergeHandler createHandler(uint32_t maxChunkSize = 0x400000) { + return {getEnv(), getPersistenceProvider(), getEnv()._component.cluster_context(), + getEnv()._component.getClock(), *_sequenceTaskExecutor, maxChunkSize}; } MergeHandler createHandler(spi::PersistenceProvider & spi) { - return MergeHandler(getEnv(), spi, - getEnv()._component.cluster_context(), getEnv()._component.getClock(), *_sequenceTaskExecutor, 4190208); + return {getEnv(), spi, getEnv()._component.cluster_context(), + getEnv()._component.getClock(), *_sequenceTaskExecutor, 4190208}; } std::shared_ptr<api::StorageMessage> get_queued_reply() { @@ -425,8 +417,8 @@ size_t getFilledCount(const std::vector<api::ApplyBucketDiffCommand::Entry>& diff) { size_t filledCount = 0; - for (size_t i=0; i<diff.size(); ++i) { - if (diff[i].filled()) { + for (const auto & i : diff) { + if (i.filled()) { ++filledCount; } } @@ -437,9 +429,9 @@ size_t getFilledDataSize(const std::vector<api::ApplyBucketDiffCommand::Entry>& diff) { size_t filledSize = 0; - for (size_t i=0; i<diff.size(); ++i) { - filledSize += diff[i]._headerBlob.size(); - filledSize += diff[i]._bodyBlob.size(); + for (const auto & i : diff) { + filledSize += i._headerBlob.size(); + filledSize += i._bodyBlob.size(); } return filledSize; } @@ -480,14 +472,14 @@ TEST_F(MergeHandlerTest, chunked_apply_bucket_diff) { // Include node 1 in hasmask for all diffs to indicate it's done // Also remember the diffs we've seen thus far to ensure chunking // does not send duplicates. - for (size_t i = 0; i < diff.size(); ++i) { - if (!diff[i].filled()) { + for (auto & i : diff) { + if (!i.filled()) { continue; } - diff[i]._entry._hasMask |= 2u; - auto inserted = seen.emplace(spi::Timestamp(diff[i]._entry._timestamp)); + i._entry._hasMask |= 2u; + auto inserted = seen.emplace(i._entry._timestamp); if (!inserted.second) { - FAIL() << "Diff for " << diff[i] + FAIL() << "Diff for " << i << " has already been seen in another ApplyBucketDiff"; } } @@ -561,8 +553,7 @@ TEST_F(MergeHandlerTest, max_timestamp) { } void -MergeHandlerTest::fillDummyApplyDiff( - std::vector<api::ApplyBucketDiffCommand::Entry>& diff) +MergeHandlerTest::fillDummyApplyDiff(std::vector<api::ApplyBucketDiffCommand::Entry>& diff) const { document::TestDocMan docMan; document::Document::SP doc(docMan.createRandomDocumentAtLocation(_location)); @@ -776,7 +767,7 @@ MergeHandlerTest::convert_delayed_error_to_exception(MergeHandler& handler) getEnv()._fileStorHandler.clearMergeStatus(_bucket, return_code); fetchSingleMessage<api::ApplyBucketDiffReply>(); fetchSingleMessage<api::ApplyBucketDiffCommand>(); - throw std::runtime_error(return_code.getMessage()); + throw std::runtime_error(std::string(return_code.getMessage())); } } } @@ -1052,7 +1043,7 @@ MergeHandlerTest::HandleApplyBucketDiffReplyInvoker::convert_delayed_error_to_ex auto chained_reply = _stub.replies.back(); _stub.replies.pop_back(); test.messageKeeper().sendReply(chained_reply); - throw std::runtime_error(chained_reply->getResult().getMessage()); + throw std::runtime_error(std::string(chained_reply->getResult().getMessage())); } } @@ -1221,8 +1212,7 @@ TEST_F(MergeHandlerTest, remove_put_on_existing_timestamp) { // Timestamp should now be a regular remove bool foundTimestamp = false; - for (size_t i = 0; i < getBucketDiffCmd->getDiff().size(); ++i) { - const api::GetBucketDiffCommand::Entry& e(getBucketDiffCmd->getDiff()[i]); + for (const auto & e : getBucketDiffCmd->getDiff()) { if (e._timestamp == ts) { EXPECT_EQ( uint16_t(MergeHandler::IN_USE | MergeHandler::DELETED), diff --git a/storage/src/tests/persistence/provider_error_wrapper_test.cpp b/storage/src/tests/persistence/provider_error_wrapper_test.cpp index d5ce8400b25..7ecc9dac30e 100644 --- a/storage/src/tests/persistence/provider_error_wrapper_test.cpp +++ b/storage/src/tests/persistence/provider_error_wrapper_test.cpp @@ -16,11 +16,11 @@ struct ProviderErrorWrapperTest : PersistenceTestUtils { namespace { struct MockErrorListener : ProviderErrorListener { - void on_fatal_error(vespalib::stringref message) override { + void on_fatal_error(std::string_view message) override { _seen_fatal_error = true; _fatal_error = message; } - void on_resource_exhaustion_error(vespalib::stringref message) override { + void on_resource_exhaustion_error(std::string_view message) override { _seen_resource_exhaustion_error = true; _resource_exhaustion_error = message; } diff --git a/storage/src/tests/storageserver/changedbucketownershiphandlertest.cpp b/storage/src/tests/storageserver/changedbucketownershiphandlertest.cpp index 6993882f479..e4962c45921 100644 --- a/storage/src/tests/storageserver/changedbucketownershiphandlertest.cpp +++ b/storage/src/tests/storageserver/changedbucketownershiphandlertest.cpp @@ -90,7 +90,7 @@ struct ChangedBucketOwnershipHandlerTest : Test { } static std::shared_ptr<const lib::ClusterStateBundle> make_state_bundle_with_config( - vespalib::stringref state_str, uint16_t node_count) + std::string_view state_str, uint16_t node_count) { return std::make_shared<const lib::ClusterStateBundle>( std::make_shared<const lib::ClusterState>(state_str), diff --git a/storage/src/tests/storageserver/communicationmanagertest.cpp b/storage/src/tests/storageserver/communicationmanagertest.cpp index b741d79582f..7de9d7ca011 100644 --- a/storage/src/tests/storageserver/communicationmanagertest.cpp +++ b/storage/src/tests/storageserver/communicationmanagertest.cpp @@ -295,7 +295,7 @@ using vespa::config::content::core::BucketspacesConfigBuilder; namespace { -BucketspacesConfigBuilder::Documenttype doc_type(vespalib::stringref name, vespalib::stringref space) { +BucketspacesConfigBuilder::Documenttype doc_type(std::string_view name, std::string_view space) { BucketspacesConfigBuilder::Documenttype dt; dt.name = name; dt.bucketspace = space; diff --git a/storage/src/tests/storageserver/configurable_bucket_resolver_test.cpp b/storage/src/tests/storageserver/configurable_bucket_resolver_test.cpp index 499bc365edd..da8e76e7e93 100644 --- a/storage/src/tests/storageserver/configurable_bucket_resolver_test.cpp +++ b/storage/src/tests/storageserver/configurable_bucket_resolver_test.cpp @@ -76,7 +76,7 @@ using BucketSpacesConfigBuilder = vespa::config::content::core::BucketspacesConf namespace { -BucketSpacesConfigBuilder::Documenttype make_doc_type(vespalib::stringref name, vespalib::stringref space) { +BucketSpacesConfigBuilder::Documenttype make_doc_type(std::string_view name, std::string_view space) { BucketSpacesConfigBuilder::Documenttype doc_type; doc_type.name = name; doc_type.bucketspace = space; diff --git a/storage/src/tests/storageserver/rpc/caching_rpc_target_resolver_test.cpp b/storage/src/tests/storageserver/rpc/caching_rpc_target_resolver_test.cpp index 9b9b32a74ab..dcdc53aae8c 100644 --- a/storage/src/tests/storageserver/rpc/caching_rpc_target_resolver_test.cpp +++ b/storage/src/tests/storageserver/rpc/caching_rpc_target_resolver_test.cpp @@ -17,8 +17,8 @@ public: Mappings mappings; uint32_t gen; MockMirror() : mappings(), gen(1) {} - SpecList lookup(vespalib::stringref pattern) const override { - auto itr = mappings.find(pattern); + SpecList lookup(std::string_view pattern) const override { + auto itr = mappings.find(vespalib::string(pattern)); if (itr != mappings.end()) { return itr->second; } diff --git a/storage/src/tests/storageserver/rpc/cluster_controller_rpc_api_service_test.cpp b/storage/src/tests/storageserver/rpc/cluster_controller_rpc_api_service_test.cpp index e59f6d22080..ca348b06c1c 100644 --- a/storage/src/tests/storageserver/rpc/cluster_controller_rpc_api_service_test.cpp +++ b/storage/src/tests/storageserver/rpc/cluster_controller_rpc_api_service_test.cpp @@ -125,7 +125,7 @@ struct SetStateFixture : FixtureBase { } }; -std::shared_ptr<const lib::ClusterState> state_of(vespalib::stringref state) { +std::shared_ptr<const lib::ClusterState> state_of(std::string_view state) { return std::make_shared<const lib::ClusterState>(state); } @@ -135,7 +135,7 @@ vespalib::string make_compressable_state_string() { ss << " ." << i << ".s:d"; } return vespalib::make_string("version:123 distributor:100%s storage:100%s", - ss.str().data(), ss.str().data()); + ss.view().data(), ss.view().data()); } } // anon namespace diff --git a/storage/src/tests/storageserver/rpc/storage_api_rpc_service_test.cpp b/storage/src/tests/storageserver/rpc/storage_api_rpc_service_test.cpp index 010f2b441ef..5852e27f78d 100644 --- a/storage/src/tests/storageserver/rpc/storage_api_rpc_service_test.cpp +++ b/storage/src/tests/storageserver/rpc/storage_api_rpc_service_test.cpp @@ -129,7 +129,7 @@ public: const SharedRpcResources& shared_rpc_resources() const noexcept { return *_shared_rpc_resources; } SharedRpcResources& shared_rpc_resources() noexcept { return *_shared_rpc_resources; } - void wait_until_visible_in_slobrok(vespalib::stringref id) { + void wait_until_visible_in_slobrok(std::string_view id) { const auto deadline = std::chrono::steady_clock::now() + slobrok_register_timeout; while (_shared_rpc_resources->slobrok_mirror().lookup(id).empty()) { if (std::chrono::steady_clock::now() > deadline) { diff --git a/storage/src/tests/storageserver/service_layer_error_listener_test.cpp b/storage/src/tests/storageserver/service_layer_error_listener_test.cpp index b84f96dd847..d7222700026 100644 --- a/storage/src/tests/storageserver/service_layer_error_listener_test.cpp +++ b/storage/src/tests/storageserver/service_layer_error_listener_test.cpp @@ -24,7 +24,7 @@ class TestShutdownListener public: TestShutdownListener() : _reason() {} - void requestShutdown(vespalib::stringref reason) override { + void requestShutdown(std::string_view reason) override { _reason = reason; } diff --git a/storage/src/tests/storageserver/statemanagertest.cpp b/storage/src/tests/storageserver/statemanagertest.cpp index 45ad44b1152..c7f6ef0c5c0 100644 --- a/storage/src/tests/storageserver/statemanagertest.cpp +++ b/storage/src/tests/storageserver/statemanagertest.cpp @@ -33,14 +33,14 @@ struct StateManagerTest : Test, NodeStateReporter { void SetUp() override; void TearDown() override; - static std::shared_ptr<api::SetSystemStateCommand> make_set_state_cmd(vespalib::stringref state_str, uint16_t cc_index) { + static std::shared_ptr<api::SetSystemStateCommand> make_set_state_cmd(std::string_view state_str, uint16_t cc_index) { auto cmd = std::make_shared<api::SetSystemStateCommand>(lib::ClusterState(state_str)); cmd->setSourceIndex(cc_index); return cmd; } static std::shared_ptr<const lib::ClusterStateBundle> make_state_bundle_with_config( - vespalib::stringref state_str, uint16_t num_nodes) + std::string_view state_str, uint16_t num_nodes) { auto state = std::make_shared<const ClusterState>(state_str); auto distr = lib::DistributionConfigBundle::of(lib::Distribution::getDefaultDistributionConfig(1, num_nodes)); @@ -51,7 +51,7 @@ struct StateManagerTest : Test, NodeStateReporter { static std::shared_ptr<api::SetSystemStateCommand> make_set_state_cmd_with_config( - vespalib::stringref state_str, uint16_t num_nodes) + std::string_view state_str, uint16_t num_nodes) { return std::make_shared<api::SetSystemStateCommand>(make_state_bundle_with_config(state_str, num_nodes)); } diff --git a/storage/src/tests/visiting/commandqueuetest.cpp b/storage/src/tests/visiting/commandqueuetest.cpp index 74de7430c3f..f8068c8c915 100644 --- a/storage/src/tests/visiting/commandqueuetest.cpp +++ b/storage/src/tests/visiting/commandqueuetest.cpp @@ -16,13 +16,13 @@ namespace storage { namespace { std::shared_ptr<api::CreateVisitorCommand> getCommand( - vespalib::stringref name, vespalib::duration timeout, + std::string_view name, vespalib::duration timeout, uint8_t priority = 0) { vespalib::asciistream ost; ost << name << " t=" << vespalib::count_ms(timeout) << " p=" << static_cast<unsigned int>(priority); // Piggyback name in document selection - auto cmd = std::make_shared<api::CreateVisitorCommand>(makeBucketSpace(), "", "", ost.str()); + auto cmd = std::make_shared<api::CreateVisitorCommand>(makeBucketSpace(), "", "", ost.view()); cmd->setQueueTimeout(timeout); cmd->setPriority(priority); return cmd; diff --git a/storage/src/tests/visiting/visitortest.cpp b/storage/src/tests/visiting/visitortest.cpp index 075ebd13741..3d34230c98f 100644 --- a/storage/src/tests/visiting/visitortest.cpp +++ b/storage/src/tests/visiting/visitortest.cpp @@ -80,7 +80,7 @@ struct VisitorTest : Test { VisitorOptions() {} - VisitorOptions& withVisitorType(vespalib::stringref type) { + VisitorOptions& withVisitorType(std::string_view type) { visitorType = type; return *this; } @@ -109,7 +109,7 @@ struct VisitorTest : Test { protected: void doTestVisitorInstanceHasConsistencyLevel( - vespalib::stringref visitorType, + std::string_view visitorType, spi::ReadConsistency expectedConsistency); template <typename T> @@ -850,7 +850,7 @@ TEST_F(VisitorTest, no_more_iterators_sent_while_memory_used_above_limit) { void VisitorTest::doTestVisitorInstanceHasConsistencyLevel( - vespalib::stringref visitorType, + std::string_view visitorType, spi::ReadConsistency expectedConsistency) { ASSERT_NO_FATAL_FAILURE(initializeTest()); diff --git a/storage/src/vespa/storage/bucketdb/bucketmanager.cpp b/storage/src/vespa/storage/bucketdb/bucketmanager.cpp index 280afe8fb91..44b9283145f 100644 --- a/storage/src/vespa/storage/bucketdb/bucketmanager.cpp +++ b/storage/src/vespa/storage/bucketdb/bucketmanager.cpp @@ -202,7 +202,7 @@ struct MetricsUpdater { namespace { void -output(vespalib::JsonStream & json, vespalib::stringref name, uint64_t value, vespalib::stringref bucketSpace) { +output(vespalib::JsonStream & json, std::string_view name, uint64_t value, std::string_view bucketSpace) { using namespace vespalib::jsonstream; json << Object(); json << "name" << name; @@ -216,7 +216,7 @@ output(vespalib::JsonStream & json, vespalib::stringref name, uint64_t value, ve } void -output(vespalib::JsonStream & json, vespalib::stringref name, uint64_t value) { +output(vespalib::JsonStream & json, std::string_view name, uint64_t value) { output(json, name, value, ""); } diff --git a/storage/src/vespa/storage/common/content_bucket_space.h b/storage/src/vespa/storage/common/content_bucket_space.h index 67ee4209d35..9dfd6031346 100644 --- a/storage/src/vespa/storage/common/content_bucket_space.h +++ b/storage/src/vespa/storage/common/content_bucket_space.h @@ -25,7 +25,9 @@ struct ClusterStateAndDistribution { // Precondition: valid() == true [[nodiscard]] const lib::ClusterState& cluster_state() const noexcept { return *_cluster_state; } + [[nodiscard]] const std::shared_ptr<const lib::ClusterState>& cluster_state_sp() const noexcept { return _cluster_state; } [[nodiscard]] const lib::Distribution& distribution() const noexcept { return *_distribution; } + [[nodiscard]] const std::shared_ptr<const lib::Distribution>& distribution_sp() const noexcept { return _distribution; } [[nodiscard]] std::shared_ptr<const ClusterStateAndDistribution> with_new_state( std::shared_ptr<const lib::ClusterState> cluster_state) const; diff --git a/storage/src/vespa/storage/common/distributorcomponent.cpp b/storage/src/vespa/storage/common/distributorcomponent.cpp index c2249a1ef68..3091173be37 100644 --- a/storage/src/vespa/storage/common/distributorcomponent.cpp +++ b/storage/src/vespa/storage/common/distributorcomponent.cpp @@ -8,7 +8,7 @@ namespace storage { DistributorComponent::DistributorComponent(DistributorComponentRegister& compReg, - vespalib::stringref name) + std::string_view name) : StorageComponent(compReg, name), _timeCalculator(nullptr), _distributorConfig(std::make_unique<DistributorManagerConfig>()), diff --git a/storage/src/vespa/storage/common/distributorcomponent.h b/storage/src/vespa/storage/common/distributorcomponent.h index cb5e76fe44b..79e36bd0967 100644 --- a/storage/src/vespa/storage/common/distributorcomponent.h +++ b/storage/src/vespa/storage/common/distributorcomponent.h @@ -75,7 +75,7 @@ class DistributorComponent : public StorageComponent, public: using UP = std::unique_ptr<DistributorComponent>; - DistributorComponent(DistributorComponentRegister& compReg, vespalib::stringref name); + DistributorComponent(DistributorComponentRegister& compReg, std::string_view name); ~DistributorComponent() override; [[nodiscard]] api::Timestamp getUniqueTimestamp() const { diff --git a/storage/src/vespa/storage/common/node_identity.cpp b/storage/src/vespa/storage/common/node_identity.cpp index 048ad72cb5c..42052c80bdc 100644 --- a/storage/src/vespa/storage/common/node_identity.cpp +++ b/storage/src/vespa/storage/common/node_identity.cpp @@ -4,7 +4,7 @@ namespace storage { -NodeIdentity::NodeIdentity(vespalib::stringref cluster_name_in, +NodeIdentity::NodeIdentity(std::string_view cluster_name_in, const lib::NodeType& node_type_in, uint16_t node_index_in) : _cluster_name(cluster_name_in), diff --git a/storage/src/vespa/storage/common/node_identity.h b/storage/src/vespa/storage/common/node_identity.h index 301fd59658c..789bb41c858 100644 --- a/storage/src/vespa/storage/common/node_identity.h +++ b/storage/src/vespa/storage/common/node_identity.h @@ -17,7 +17,7 @@ private: uint16_t _node_index; public: - NodeIdentity(vespalib::stringref cluster_name_in, + NodeIdentity(std::string_view cluster_name_in, const lib::NodeType& node_type_in, uint16_t node_index_in); const vespalib::string& cluster_name() const { return _cluster_name; } diff --git a/storage/src/vespa/storage/common/servicelayercomponent.h b/storage/src/vespa/storage/common/servicelayercomponent.h index 23bed3b6a82..2a300e54530 100644 --- a/storage/src/vespa/storage/common/servicelayercomponent.h +++ b/storage/src/vespa/storage/common/servicelayercomponent.h @@ -62,7 +62,7 @@ public: using UP = std::unique_ptr<ServiceLayerComponent>; ServiceLayerComponent(ServiceLayerComponentRegister& compReg, - vespalib::stringref name) + std::string_view name) : StorageComponent(compReg, name), _bucketSpaceRepo(nullptr), _minUsedBitsTracker(nullptr) diff --git a/storage/src/vespa/storage/common/statusmetricconsumer.cpp b/storage/src/vespa/storage/common/statusmetricconsumer.cpp index a2cfbf0843b..7d26276473b 100644 --- a/storage/src/vespa/storage/common/statusmetricconsumer.cpp +++ b/storage/src/vespa/storage/common/statusmetricconsumer.cpp @@ -131,12 +131,12 @@ StatusMetricConsumer::reportStatus(std::ostream& out, _manager.visit(metricLock, *snapshot, metricJsonWriter, consumer); stream << End(); stream.finalize(); - out << jsonStreamData.str(); + out << jsonStreamData.view(); } else if (prometheus) { vespalib::asciistream ps; metrics::PrometheusWriter pw(ps); _manager.visit(metricLock, *snapshot, pw, consumer); - out << ps.str(); + out << ps.view(); } else { std::string pattern = path.getAttribute("pattern", ".*"); metrics::TextWriter textWriter(out, snapshot->getPeriod(), pattern, verbosity > 0); diff --git a/storage/src/vespa/storage/common/storagecomponent.cpp b/storage/src/vespa/storage/common/storagecomponent.cpp index 148683750ea..7c48aa4f4e0 100644 --- a/storage/src/vespa/storage/common/storagecomponent.cpp +++ b/storage/src/vespa/storage/common/storagecomponent.cpp @@ -20,7 +20,7 @@ StorageComponent::Repos::~Repos() = default; StorageComponent::~StorageComponent() = default; void -StorageComponent::setNodeInfo(vespalib::stringref clusterName, +StorageComponent::setNodeInfo(std::string_view clusterName, const lib::NodeType& nodeType, uint16_t index) { @@ -67,7 +67,7 @@ StorageComponent::setNodeStateUpdater(NodeStateUpdater& updater) } StorageComponent::StorageComponent(StorageComponentRegister& compReg, - vespalib::stringref name) + std::string_view name) : Component(compReg, name), _cluster_ctx(), _nodeType(nullptr), diff --git a/storage/src/vespa/storage/common/storagecomponent.h b/storage/src/vespa/storage/common/storagecomponent.h index ba12fc666a9..c30ccddf124 100644 --- a/storage/src/vespa/storage/common/storagecomponent.h +++ b/storage/src/vespa/storage/common/storagecomponent.h @@ -67,7 +67,7 @@ public: * Node type is supposed to be set immediately, and never be updated. * Thus it does not need to be threadsafe. Should never be used before set. */ - void setNodeInfo(vespalib::stringref clusterName, const lib::NodeType& nodeType, uint16_t index); + void setNodeInfo(std::string_view clusterName, const lib::NodeType& nodeType, uint16_t index); /** * Node state updater is supposed to be set immediately, and never be @@ -79,7 +79,7 @@ public: void setBucketIdFactory(const document::BucketIdFactory&); void setDistribution(DistributionSP); - StorageComponent(StorageComponentRegister&, vespalib::stringref name); + StorageComponent(StorageComponentRegister&, std::string_view name); ~StorageComponent() override; const ClusterContext & cluster_context() const noexcept { return _cluster_ctx; } diff --git a/storage/src/vespa/storage/distributor/activecopy.cpp b/storage/src/vespa/storage/distributor/activecopy.cpp index b823978a0cc..d70e7daef51 100644 --- a/storage/src/vespa/storage/distributor/activecopy.cpp +++ b/storage/src/vespa/storage/distributor/activecopy.cpp @@ -28,34 +28,26 @@ using IndexList = lib::Distribution::IndexList; vespalib::string ActiveCopy::getReason() const { + vespalib::asciistream ost; if (_ready && (_doc_count > 0) && valid_ideal()) { - vespalib::asciistream ost; ost << "copy is ready, has " << _doc_count << " docs and ideal state priority " << _ideal; - return ost.str(); } else if (_ready && (_doc_count > 0)) { - vespalib::asciistream ost; ost << "copy is ready with " << _doc_count << " docs"; - return ost.str(); } else if (_ready) { return "copy is ready"; } else if ((_doc_count > 0) && valid_ideal()) { - vespalib::asciistream ost; ost << "copy has " << _doc_count << " docs and ideal state priority " << _ideal; - return ost.str(); } else if (_doc_count > 0) { - vespalib::asciistream ost; ost << "copy has " << _doc_count << " docs"; - return ost.str(); } else if (_active) { return "copy is already active"; } else if (valid_ideal()) { - vespalib::asciistream ost; ost << "copy is ideal state priority " << _ideal; - return ost.str(); } else { return "first available copy"; } + return ost.str(); } std::ostream& diff --git a/storage/src/vespa/storage/distributor/distributor_stripe.cpp b/storage/src/vespa/storage/distributor/distributor_stripe.cpp index f8abdf78c2b..2b3fb4bda60 100644 --- a/storage/src/vespa/storage/distributor/distributor_stripe.cpp +++ b/storage/src/vespa/storage/distributor/distributor_stripe.cpp @@ -233,7 +233,14 @@ DistributorStripe::handleReply(const std::shared_ptr<api::StorageReply>& reply) } if (_maintenanceOperationOwner.handleReply(reply)) { - _scanner->prioritizeBucket(bucket); + // If a maintenance operation reply comes from a node that went down after its original + // request was sent _and_ cancelling is enabled, the operation will be present in + // _maintenanceOperationOwner but _not_ in _pendingMessageTracker. The latter returns + // the zero bucket (including an invalid bucket space) if no mapping could be found, + // which is not accepted by prioritizeBucket(). + if (bucket.getBucketId() != document::BucketId(0)) { + _scanner->prioritizeBucket(bucket); + } return true; } @@ -701,7 +708,7 @@ toBucketSpacesStats(const NodeMaintenanceStatsTracker &maintenanceStats) { PerNodeBucketSpacesStats result; for (const auto &entry : maintenanceStats.perNodeStats()) { - auto bucketSpace = document::FixedBucketSpaces::to_string(entry.first.bucketSpace()); + const vespalib::string & bucketSpace(document::FixedBucketSpaces::to_string(entry.first.bucketSpace())); result[entry.first.node()][bucketSpace] = toBucketSpaceStats(entry.second); } return result; diff --git a/storage/src/vespa/storage/distributor/operation_sequencer.h b/storage/src/vespa/storage/distributor/operation_sequencer.h index b74729bd7ec..194a083d7fe 100644 --- a/storage/src/vespa/storage/distributor/operation_sequencer.h +++ b/storage/src/vespa/storage/distributor/operation_sequencer.h @@ -31,7 +31,7 @@ public: vespalib::string lock_token; BlockedByLockedBucket() = default; - explicit BlockedByLockedBucket(vespalib::stringref token) : lock_token(token) {} + explicit BlockedByLockedBucket(std::string_view token) : lock_token(token) {} }; private: OperationSequencer* _sequencer; @@ -103,7 +103,7 @@ public: [[nodiscard]] bool is_blocked_by_bucket() const noexcept { return std::holds_alternative<BlockedByLockedBucket>(_handle); } - [[nodiscard]] bool is_bucket_blocked_with_token(vespalib::stringref token) const noexcept { + [[nodiscard]] bool is_bucket_blocked_with_token(std::string_view token) const noexcept { return (std::holds_alternative<BlockedByLockedBucket>(_handle) && (std::get<BlockedByLockedBucket>(_handle).lock_token == token)); } diff --git a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp index 849746416d6..738a5c6e13a 100644 --- a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp @@ -633,7 +633,7 @@ TwoPhaseUpdateOperation::hasTasCondition() const noexcept } void -TwoPhaseUpdateOperation::replyWithTasFailure(DistributorStripeMessageSender& sender, vespalib::stringref message) +TwoPhaseUpdateOperation::replyWithTasFailure(DistributorStripeMessageSender& sender, std::string_view message) { sendReplyWithResult(sender, api::ReturnCode(api::ReturnCode::TEST_AND_SET_CONDITION_FAILED, message)); } diff --git a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h index 0511c07a5c1..5c9a3a030bc 100644 --- a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h +++ b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h @@ -131,7 +131,7 @@ private: void addTraceFromReply(api::StorageReply& reply); [[nodiscard]] bool hasTasCondition() const noexcept; void replyWithTasFailure(DistributorStripeMessageSender& sender, - vespalib::stringref message); + std::string_view message); bool may_restart_with_fast_path(const api::GetReply& reply); [[nodiscard]] bool replica_set_unchanged_after_get_operation() const; void restart_with_fast_path_due_to_consistent_get_timestamps(DistributorStripeMessageSender& sender); diff --git a/storage/src/vespa/storage/distributor/operations/external/visitoroperation.cpp b/storage/src/vespa/storage/distributor/operations/external/visitoroperation.cpp index afbb74851c7..5b8422e6a86 100644 --- a/storage/src/vespa/storage/distributor/operations/external/visitoroperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/external/visitoroperation.cpp @@ -51,7 +51,7 @@ VisitorOperation::SuperBucketInfo::~SuperBucketInfo() = default; namespace { [[nodiscard]] bool -matches_visitor_library(vespalib::stringref input, vespalib::stringref expected) +matches_visitor_library(std::string_view input, std::string_view expected) { if (input.size() != expected.size()) { return false; @@ -233,7 +233,7 @@ namespace { class VisitorVerificationException { public: VisitorVerificationException(api::ReturnCode::Result result, - vespalib::stringref message) + std::string_view message) : _code(result, message) {} @@ -813,7 +813,7 @@ VisitorOperation::sendStorageVisitor(uint16_t node, os << _msg->getInstanceId() << '-' << _node_ctx.node_index() << '-' << cmd->getMsgId(); - vespalib::string storageInstanceId(os.str()); + vespalib::string storageInstanceId(os.view()); cmd->setInstanceId(storageInstanceId); cmd->setAddress(api::StorageMessageAddress::create(_node_ctx.cluster_name_ptr(), lib::NodeType::STORAGE, node)); cmd->setMaximumPendingReplyCount(pending); diff --git a/storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.h b/storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.h index 37539c3d563..d52ce68d1cf 100644 --- a/storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.h +++ b/storage/src/vespa/storage/distributor/operations/idealstate/idealstateoperation.h @@ -195,12 +195,12 @@ public: */ api::StorageMessage::Priority getPriority() const noexcept { return _priority; } - void setDetailedReason(const std::string& detailedReason) { - _detailedReason = detailedReason; - } - void setDetailedReason(std::string&& detailedReason) { + void setDetailedReason(std::string detailedReason) { _detailedReason = std::move(detailedReason); } + void setDetailedReason(std::string_view detailedReason) { + _detailedReason = std::string(detailedReason); + } const std::string& getDetailedReason() const override { return _detailedReason; diff --git a/storage/src/vespa/storage/distributor/statecheckers.cpp b/storage/src/vespa/storage/distributor/statecheckers.cpp index 562cbe3dc3e..1310a446ddd 100644 --- a/storage/src/vespa/storage/distributor/statecheckers.cpp +++ b/storage/src/vespa/storage/distributor/statecheckers.cpp @@ -80,7 +80,7 @@ SplitBucketStateChecker::generateMinimumBucketSplitOperation(const Context& c) c.distributorConfig.getMinimalBucketSplit(), 0, 0); so->setPriority(c.distributorConfig.getMaintenancePriorities().splitDistributionBits); - so->setDetailedReason("[Splitting bucket because the current system size requires a higher minimum split bit]"); + so->setDetailedReason(std::string("[Splitting bucket because the current system size requires a higher minimum split bit]")); return Result::createStoredResult(std::move(so), MaintenancePriority::MEDIUM); } @@ -103,7 +103,7 @@ SplitBucketStateChecker::generateMaxSizeExceededSplitOperation(const Context& c) << c.distributorConfig.getSplitSize() << ", " << c.distributorConfig.getSplitCount() << ")]"; - so->setDetailedReason(ost.str()); + so->setDetailedReason(ost.view()); return Result::createStoredResult(std::move(so), MaintenancePriority::HIGH); } @@ -431,7 +431,7 @@ JoinBucketsStateChecker::check(const Context &c) const << getTotalMetaCount(c) << " docs) is less than the configured limit of (" << c.distributorConfig.getJoinSize() << ", " << c.distributorConfig.getJoinCount() << ")"; - op->setDetailedReason(ost.str()); + op->setDetailedReason(ost.view()); return Result::createStoredResult(std::move(op), MaintenancePriority::VERY_LOW); } @@ -498,7 +498,7 @@ SplitInconsistentStateChecker::check(const Context &c) const getHighestUsedBits(c.entries), 0, 0); op->setPriority(c.distributorConfig.getMaintenancePriorities().splitInconsistentBucket); - op->setDetailedReason(getReason(c.getBucketId(), c.entries)); + op->setDetailedReason(std::string(getReason(c.getBucketId(), c.entries))); return Result::createStoredResult(std::move(op), MaintenancePriority::HIGH); } @@ -591,7 +591,7 @@ public: const std::vector<uint16_t>& nodes() const noexcept { return _nodes; } uint8_t priority() const noexcept { return _priority; } - std::string reason() const { return _reason.str(); } + std::string_view reason() const { return _reason.view(); } private: void updatePriority(uint8_t pri) noexcept { @@ -637,7 +637,7 @@ MergeNodes::~MergeNodes() = default; void MergeNodes::operator+=(const MergeNodes& other) { - _reason << other._reason.str(); + _reason << other._reason.view(); _problemFlags |= other._problemFlags; _nodes.reserve(_nodes.size() + other._nodes.size()); _nodes.insert(_nodes.end(), other._nodes.begin(), other._nodes.end()); @@ -940,7 +940,7 @@ DeleteExtraCopiesStateChecker::check(const Context &c) const auto ro = std::make_unique<RemoveBucketOperation>(c.node_ctx, BucketAndNodes(c.getBucket(), removedCopies)); ro->setPriority(c.distributorConfig.getMaintenancePriorities().deleteBucketCopy); - ro->setDetailedReason(reasons.str()); + ro->setDetailedReason(reasons.view()); return Result::createStoredResult(std::move(ro), MaintenancePriority::HIGH); } @@ -1052,7 +1052,7 @@ BucketStateStateChecker::check(const Context &c) const } else { op->setPriority(c.distributorConfig.getMaintenancePriorities().activateWithExistingActive); } - op->setDetailedReason(reason.str()); + op->setDetailedReason(reason.view()); return Result::createStoredResult(std::move(op), MaintenancePriority::HIGHEST); } @@ -1097,7 +1097,7 @@ GarbageCollectionStateChecker::check(const Context &c) const << vespalib::to_s(c.distributorConfig.getGarbageCollectionInterval()) << "]"; op->setPriority(c.distributorConfig.getMaintenancePriorities().garbageCollection); - op->setDetailedReason(reason.c_str()); + op->setDetailedReason(reason.view()); return Result::createStoredResult(std::move(op), MaintenancePriority::VERY_LOW); } else { return Result::noMaintenanceNeeded(); diff --git a/storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp b/storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp index 30306784c20..84d54307e6e 100644 --- a/storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp +++ b/storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp @@ -130,7 +130,7 @@ TopLevelBucketDBUpdater::remove_superfluous_buckets( && db_pruning_may_be_elided(old_cluster_state, *new_cluster_state, up_states)) { LOG(debug, "[bucket space '%s']: eliding DB pruning for state transition '%s' -> '%s'", - document::FixedBucketSpaces::to_string(elem.first).data(), + document::FixedBucketSpaces::to_string(elem.first).c_str(), old_cluster_state.toString().c_str(), new_cluster_state->toString().c_str()); continue; } diff --git a/storage/src/vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.cpp b/storage/src/vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.cpp index ab1d80dc0b9..b078fdcf951 100644 --- a/storage/src/vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.cpp +++ b/storage/src/vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.cpp @@ -41,7 +41,7 @@ StorageComponentRegisterImpl::registerStorageComponent(StorageComponent& smc) } void -StorageComponentRegisterImpl::setNodeInfo(vespalib::stringref clusterName, +StorageComponentRegisterImpl::setNodeInfo(std::string_view clusterName, const lib::NodeType& nodeType, uint16_t index) { diff --git a/storage/src/vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.h b/storage/src/vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.h index 271b38399b6..93f0db39f97 100644 --- a/storage/src/vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.h +++ b/storage/src/vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.h @@ -47,7 +47,7 @@ public: void registerStorageComponent(StorageComponent&) override; - void setNodeInfo(vespalib::stringref clusterName, const lib::NodeType& nodeType, uint16_t index); + void setNodeInfo(std::string_view clusterName, const lib::NodeType& nodeType, uint16_t index); virtual void setNodeStateUpdater(NodeStateUpdater& updater); virtual void setDocumentTypeRepo(std::shared_ptr<const document::DocumentTypeRepo>); virtual void setBucketIdFactory(const document::BucketIdFactory&); diff --git a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp index 5e374f12440..f89d6188b88 100644 --- a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp +++ b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp @@ -183,7 +183,7 @@ StatusWebServer::handlePage(const framework::HttpUrlPath& urlpath, vespalib::Por vespalib::string link(urlpath.getPath()); // We allow a fixed path prefix that aliases down to whatever is provided after the prefix. - vespalib::stringref optional_status_path_prefix = "/contentnode-status/v1/"; + std::string_view optional_status_path_prefix = "/contentnode-status/v1/"; if (link.starts_with(optional_status_path_prefix)) { link = link.substr(optional_status_path_prefix.size()); } diff --git a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h index e5eeafc53fa..d92bd37ae34 100644 --- a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h +++ b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h @@ -59,7 +59,7 @@ class StatusWebServer : private config::IFetcherCallback<vespa::config::content: vespalib::string _serverSpec; std::unique_ptr<vespalib::string> _result; - HttpRequest(vespalib::stringref url, vespalib::stringref serverSpec) + HttpRequest(std::string_view url, std::string_view serverSpec) : _url(url), _serverSpec(serverSpec), _result() diff --git a/storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp b/storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp index 7b3ab16790c..098dd0429d0 100644 --- a/storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp +++ b/storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp @@ -165,7 +165,7 @@ namespace { } else if (state != DeadLockDetector::OK) { vespalib::asciistream ost; ost << "Thread " << id << " has registered tick again."; - LOGBP(info, "%s", ost.str().data()); + LOGBP(info, "%s", ost.view().data()); state = DeadLockDetector::OK; } } @@ -199,12 +199,12 @@ DeadLockDetector::handleDeadlock(vespalib::steady_time currentTime, } if (warnOnly) { if (warning_enabled) { - LOGBT(warning, "deadlockw-" + id, "%s", vespalib::string(error.str()).c_str()); + LOGBT(warning, "deadlockw-" + id, "%s", vespalib::string(error.view()).c_str()); } return; } else { if (shutdown_enabled || warning_enabled) { - LOGBT(error, "deadlock-" + id, "%s", vespalib::string(error.str()).c_str()); + LOGBT(error, "deadlock-" + id, "%s", vespalib::string(error.view()).c_str()); } } if (shutdown_enabled) { @@ -315,7 +315,7 @@ DeadLockDetector::reportHtmlStatus(std::ostream& os, << "<pre>\n" << getBucketLockInfo() << "</pre>\n"; - os << out.str(); + os << out.view(); } } // storage diff --git a/storage/src/vespa/storage/persistence/apply_bucket_diff_state.cpp b/storage/src/vespa/storage/persistence/apply_bucket_diff_state.cpp index f4184a1561c..a90079d40b2 100644 --- a/storage/src/vespa/storage/persistence/apply_bucket_diff_state.cpp +++ b/storage/src/vespa/storage/persistence/apply_bucket_diff_state.cpp @@ -88,7 +88,7 @@ ApplyBucketDiffState::on_entry_complete(std::unique_ptr<Result> result, const do << " for " << doc_id.toString() << " in " << _bucket << ": " << result->toString(); - _fail_message = ss.str(); + _fail_message = ss.view(); } } diff --git a/storage/src/vespa/storage/persistence/asynchandler.cpp b/storage/src/vespa/storage/persistence/asynchandler.cpp index ab176ebb9cb..8ce4fd4d742 100644 --- a/storage/src/vespa/storage/persistence/asynchandler.cpp +++ b/storage/src/vespa/storage/persistence/asynchandler.cpp @@ -284,7 +284,7 @@ AsyncHandler::handle_delete_bucket_throttling(api::DeleteBucketCommand& cmd, Mes for (auto& meta : meta_entries) { auto token = throttler.blocking_acquire_one(); remove_by_gid_metric->count.inc(); - std::vector<spi::DocTypeGidAndTimestamp> to_remove = {{meta->getDocumentType(), meta->getGid(), meta->getTimestamp()}}; + std::vector<spi::DocTypeGidAndTimestamp> to_remove = {{vespalib::string(meta->getDocumentType()), meta->getGid(), meta->getTimestamp()}}; auto task = makeResultTask([bucket = cmd.getBucket(), token = std::move(token), invoke_delete_on_zero_refs, remove_by_gid_metric, op_timer = framework::MilliSecTimer(_env._component.getClock())] diff --git a/storage/src/vespa/storage/persistence/bucketprocessor.cpp b/storage/src/vespa/storage/persistence/bucketprocessor.cpp index 84df361d2e1..8372de107cb 100644 --- a/storage/src/vespa/storage/persistence/bucketprocessor.cpp +++ b/storage/src/vespa/storage/persistence/bucketprocessor.cpp @@ -55,7 +55,7 @@ BucketProcessor::iterateAll(spi::PersistenceProvider& provider, vespalib::asciistream ss; ss << "Failed to create iterator: " << createIterResult.getErrorMessage(); - throw std::runtime_error(ss.str()); + throw std::runtime_error(std::string(ss.view())); } spi::IteratorId iteratorId(createIterResult.getIteratorId()); @@ -66,7 +66,7 @@ BucketProcessor::iterateAll(spi::PersistenceProvider& provider, if (result.getErrorCode() != spi::Result::ErrorType::NONE) { vespalib::asciistream ss; ss << "Failed: " << result.getErrorMessage(); - throw std::runtime_error(ss.str()); + throw std::runtime_error(std::string(ss.view())); } for (auto& entry : result.steal_entries()) { diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp index e44490388e2..8e566604d16 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp @@ -249,7 +249,7 @@ FileStorManager::on_configure(const StorFilestorConfig& config) void FileStorManager::replyDroppedOperation(api::StorageMessage& msg, const document::Bucket& bucket, - api::ReturnCode::Result returnCode, vespalib::stringref reason) + api::ReturnCode::Result returnCode, std::string_view reason) { std::ostringstream error; error << "Dropping " << msg.getType() << " to bucket " @@ -520,10 +520,10 @@ FileStorManager::onDeleteBucket(const shared_ptr<api::DeleteBucketCommand>& cmd) << ", but storage bucket database contains " << entry->getBucketInfo().toString(); - LOG(debug, "Rejecting bucket delete: %s", ost.str().data()); + LOG(debug, "Rejecting bucket delete: %s", ost.view().data()); std::shared_ptr<api::StorageReply> reply = cmd->makeReply(); static_cast<api::DeleteBucketReply&>(*reply).setBucketInfo(entry->getBucketInfo()); - reply->setResult(api::ReturnCode(api::ReturnCode::REJECTED, ost.str())); + reply->setResult(api::ReturnCode(api::ReturnCode::REJECTED, ost.view())); entry.unlock(); sendUp(reply); return true; @@ -941,8 +941,8 @@ FileStorManager::updateState() } contentBucketSpace.setNodeUpInLastNodeStateSeenByProvider(node_up_in_space); contentBucketSpace.setNodeMaintenanceInLastNodeStateSeenByProvider(in_maintenance); - spi::ClusterState spiState(state_and_distr->cluster_state(), _component.getIndex(), - state_and_distr->distribution(), in_maintenance); + spi::ClusterState spiState(state_and_distr->cluster_state_sp(), state_and_distr->distribution_sp(), + _component.getIndex(), in_maintenance); _provider->setClusterState(bucketSpace, spiState); } } diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h index e68f8bfe27b..91ff22680da 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h @@ -125,7 +125,7 @@ private: void replyDroppedOperation(api::StorageMessage& msg, const document::Bucket& bucket, api::ReturnCode::Result returnCode, - vespalib::stringref reason); + std::string_view reason); StorBucketDatabase::WrappedEntry ensureConsistentBucket( const document::Bucket& bucket, diff --git a/storage/src/vespa/storage/persistence/mergehandler.cpp b/storage/src/vespa/storage/persistence/mergehandler.cpp index b3207428f5f..0b365d13540 100644 --- a/storage/src/vespa/storage/persistence/mergehandler.cpp +++ b/storage/src/vespa/storage/persistence/mergehandler.cpp @@ -655,7 +655,7 @@ MergeHandler::enumerate_newest_document_versions(const std::vector<api::ApplyBuc if (e._docName.empty()) { continue; } - auto [existing_iter, inserted] = newest_per_doc.insert(std::make_pair(vespalib::stringref(e._docName), e._entry._timestamp)); + auto [existing_iter, inserted] = newest_per_doc.insert(std::make_pair(std::string_view(e._docName), e._entry._timestamp)); if (!inserted) { assert(existing_iter != newest_per_doc.end()); existing_iter->second = std::max(existing_iter->second, e._entry._timestamp); diff --git a/storage/src/vespa/storage/persistence/mergehandler.h b/storage/src/vespa/storage/persistence/mergehandler.h index 2be45e7bc8b..9afb3d4e4d4 100644 --- a/storage/src/vespa/storage/persistence/mergehandler.h +++ b/storage/src/vespa/storage/persistence/mergehandler.h @@ -43,7 +43,7 @@ private: using MessageTrackerUP = std::unique_ptr<MessageTracker>; using Timestamp = framework::MicroSecTime; public: - using NewestDocumentVersionMapping = vespalib::hash_map<vespalib::stringref, api::Timestamp>; + using NewestDocumentVersionMapping = vespalib::hash_map<std::string_view, api::Timestamp>; enum StateFlag { IN_USE = 0x01, diff --git a/storage/src/vespa/storage/persistence/persistenceutil.h b/storage/src/vespa/storage/persistence/persistenceutil.h index 67e96befe00..f311b3927d6 100644 --- a/storage/src/vespa/storage/persistence/persistenceutil.h +++ b/storage/src/vespa/storage/persistence/persistenceutil.h @@ -88,7 +88,7 @@ public: } /** Utility function to be able to write a bit less in client. */ - void fail(uint32_t result, const vespalib::string & message = "") { + void fail(uint32_t result, std::string_view message = "") { fail(api::ReturnCode((api::ReturnCode::Result)result, message)); } /** Set the request to fail with the given failure. */ diff --git a/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp b/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp index 9a414cd295a..50dc3045acb 100644 --- a/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp +++ b/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp @@ -29,14 +29,14 @@ ProviderErrorWrapper::handle(const spi::Result & result) const { } } -void ProviderErrorWrapper::trigger_shutdown_listeners(vespalib::stringref reason) const { +void ProviderErrorWrapper::trigger_shutdown_listeners(std::string_view reason) const { std::lock_guard<std::mutex> guard(_mutex); for (auto& listener : _listeners) { listener->on_fatal_error(reason); } } -void ProviderErrorWrapper::trigger_resource_exhaustion_listeners(vespalib::stringref reason) const { +void ProviderErrorWrapper::trigger_resource_exhaustion_listeners(std::string_view reason) const { std::lock_guard<std::mutex> guard(_mutex); for (auto& listener : _listeners) { listener->on_resource_exhaustion_error(reason); diff --git a/storage/src/vespa/storage/persistence/provider_error_wrapper.h b/storage/src/vespa/storage/persistence/provider_error_wrapper.h index 7c4518d1db1..d614f593902 100644 --- a/storage/src/vespa/storage/persistence/provider_error_wrapper.h +++ b/storage/src/vespa/storage/persistence/provider_error_wrapper.h @@ -23,10 +23,10 @@ class ServiceLayerComponent; class ProviderErrorListener { public: virtual ~ProviderErrorListener() = default; - virtual void on_fatal_error(vespalib::stringref message) { + virtual void on_fatal_error(std::string_view message) { (void)message; } - virtual void on_resource_exhaustion_error(vespalib::stringref message) { + virtual void on_resource_exhaustion_error(std::string_view message) { (void)message; } }; @@ -69,8 +69,8 @@ private: ResultType checkResult(ResultType&& result) const; void handle(const spi::Result &) const override; - void trigger_shutdown_listeners(vespalib::stringref reason) const; - void trigger_resource_exhaustion_listeners(vespalib::stringref reason) const; + void trigger_shutdown_listeners(std::string_view reason) const; + void trigger_resource_exhaustion_listeners(std::string_view reason) const; spi::PersistenceProvider& _impl; std::vector<std::shared_ptr<ProviderErrorListener>> _listeners; diff --git a/storage/src/vespa/storage/persistence/simplemessagehandler.cpp b/storage/src/vespa/storage/persistence/simplemessagehandler.cpp index 27304e5d763..c92e165f22b 100644 --- a/storage/src/vespa/storage/persistence/simplemessagehandler.cpp +++ b/storage/src/vespa/storage/persistence/simplemessagehandler.cpp @@ -32,7 +32,7 @@ api_read_consistency_to_spi(api::InternalReadConsistency consistency) noexcept { } document::FieldSet::SP -getFieldSet(const document::FieldSetRepo & repo, vespalib::stringref name, MessageTracker & tracker) { +getFieldSet(const document::FieldSetRepo & repo, std::string_view name, MessageTracker & tracker) { try { return repo.getFieldSet(name); } catch (document::FieldNotFoundException & e) { diff --git a/storage/src/vespa/storage/persistence/splitbitdetector.h b/storage/src/vespa/storage/persistence/splitbitdetector.h index 12af51291de..994b808fb9d 100644 --- a/storage/src/vespa/storage/persistence/splitbitdetector.h +++ b/storage/src/vespa/storage/persistence/splitbitdetector.h @@ -42,7 +42,7 @@ struct SplitBitDetector public: Result() : _result(EMPTY), _singleTarget(false) {} - Result(vespalib::stringref error) + Result(std::string_view error) : _result(ERROR), _reason(error), _singleTarget(false) {} Result(const document::BucketId& t1, const document::BucketId& t2, bool single) diff --git a/storage/src/vespa/storage/persistence/testandsethelper.h b/storage/src/vespa/storage/persistence/testandsethelper.h index f586f720e23..21ec7afc805 100644 --- a/storage/src/vespa/storage/persistence/testandsethelper.h +++ b/storage/src/vespa/storage/persistence/testandsethelper.h @@ -27,8 +27,8 @@ class TestAndSetException : public std::runtime_error { api::ReturnCode _code; public: explicit TestAndSetException(api::ReturnCode code) - : std::runtime_error(code.getMessage()), - _code(std::move(code)) + : std::runtime_error(std::string(code.getMessage())), + _code(std::move(code)) {} const api::ReturnCode & getCode() const { return _code; } diff --git a/storage/src/vespa/storage/storageserver/communicationmanager.cpp b/storage/src/vespa/storage/storageserver/communicationmanager.cpp index 1b119a0e631..c6844f84d57 100644 --- a/storage/src/vespa/storage/storageserver/communicationmanager.cpp +++ b/storage/src/vespa/storage/storageserver/communicationmanager.cpp @@ -597,7 +597,7 @@ CommunicationManager::serializeNodeState(const api::GetNodeStateReply& gns, std: } else { _component.getStateUpdater().getReportedNodeState()->serialize(tmp, "", includeDescription); } - os << tmp.str(); + os << tmp.view(); } void @@ -626,7 +626,7 @@ CommunicationManager::sendDirectRPCReply(RPCRequestWrapper& request, // due to a higher version having been previously received. auto& state_reply = dynamic_cast<api::SetSystemStateReply&>(*reply); if (state_reply.getResult().getResult() == api::ReturnCode::REJECTED) { - vespalib::string err_msg = state_reply.getResult().getMessage(); // ReturnCode message is stringref + vespalib::string err_msg(state_reply.getResult().getMessage()); // ReturnCode message is string_view request.returnError(FRTE_RPC_METHOD_FAILED, err_msg.c_str()); return; } @@ -637,7 +637,7 @@ CommunicationManager::sendDirectRPCReply(RPCRequestWrapper& request, activate_reply.activateVersion(), activate_reply.actualVersion()); } else { request.addReturnInt(reply->getResult().getResult()); - vespalib::stringref m = reply->getResult().getMessage(); + std::string_view m = reply->getResult().getMessage(); request.addReturnString(m.data(), m.size()); if (reply->getType() == api::MessageType::GETNODESTATE_REPLY) { @@ -664,7 +664,7 @@ CommunicationManager::sendMessageBusReply(StorageTransportContext& context, // Create an MBus reply and transfer state to it. if (reply->getResult().getResult() == api::ReturnCode::WRONG_DISTRIBUTION) { - replyUP = std::make_unique<documentapi::WrongDistributionReply>(reply->getResult().getMessage()); + replyUP = std::make_unique<documentapi::WrongDistributionReply>(vespalib::string(reply->getResult().getMessage())); replyUP->swapState(*context._docAPIMsg); replyUP->setTrace(reply->steal_trace()); replyUP->addError(mbus::Error(documentapi::DocumentProtocol::ERROR_WRONG_DISTRIBUTION, diff --git a/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.cpp b/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.cpp index d839bc4d874..55e69109ba4 100644 --- a/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.cpp +++ b/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.cpp @@ -1,9 +1,10 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include "configurable_bucket_resolver.h" #include <vespa/document/base/documentid.h> #include <vespa/document/bucket/fixed_bucket_spaces.h> #include <vespa/vespalib/util/exceptions.h> -#include "configurable_bucket_resolver.h" +#include <vespa/vespalib/stllike/hash_map.hpp> using namespace document; @@ -14,14 +15,15 @@ ConfigurableBucketResolver::ConfigurableBucketResolver(BucketSpaceMapping type_t {} ConfigurableBucketResolver::~ConfigurableBucketResolver() = default; -document::Bucket ConfigurableBucketResolver::bucketFromId(const DocumentId& id) const { +document::Bucket +ConfigurableBucketResolver::bucketFromId(const DocumentId& id) const { if (!id.hasDocType()) { // Legacy document ids without document type maps to default bucket space - return Bucket(FixedBucketSpaces::default_space(), BucketId(0)); + return {FixedBucketSpaces::default_space(), BucketId(0)}; } auto iter = _type_to_space.find(id.getDocType()); if (iter != _type_to_space.end()) { - return Bucket(iter->second, BucketId(0)); + return {iter->second, BucketId(0)}; } throw UnknownBucketSpaceException("Unknown bucket space mapping for document type '" + id.getDocType() + "' in id: '" + id.toString() + "'", VESPA_STRLOC); @@ -39,9 +41,11 @@ std::shared_ptr<ConfigurableBucketResolver> ConfigurableBucketResolver::from_con const vespa::config::content::core::BucketspacesConfig& config) { ConfigurableBucketResolver::BucketSpaceMapping type_to_space; for (auto& mapping : config.documenttype) { - type_to_space.emplace(mapping.name, FixedBucketSpaces::from_string(mapping.bucketspace)); + type_to_space.insert(std::make_pair(mapping.name, FixedBucketSpaces::from_string(mapping.bucketspace))); } return std::make_shared<ConfigurableBucketResolver>(std::move(type_to_space)); } } + +VESPALIB_HASH_MAP_INSTANTIATE(vespalib::string, document::BucketSpace); diff --git a/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.h b/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.h index 8ef952c305b..e1249900fc3 100644 --- a/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.h +++ b/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.h @@ -4,8 +4,8 @@ #include <vespa/config-bucketspaces.h> #include <vespa/storage/common/bucket_resolver.h> #include <vespa/vespalib/stllike/hash_fun.h> +#include <vespa/vespalib/stllike/hash_map.h> #include <memory> -#include <unordered_map> namespace storage { @@ -18,7 +18,7 @@ namespace storage { */ class ConfigurableBucketResolver : public BucketResolver { public: - using BucketSpaceMapping = std::unordered_map<vespalib::string, document::BucketSpace, vespalib::hash<vespalib::string>>; + using BucketSpaceMapping = vespalib::hash_map<vespalib::string, document::BucketSpace>; const BucketSpaceMapping _type_to_space; public: explicit ConfigurableBucketResolver(BucketSpaceMapping type_to_space) noexcept; diff --git a/storage/src/vespa/storage/storageserver/documentapiconverter.cpp b/storage/src/vespa/storage/storageserver/documentapiconverter.cpp index 5b8052a05f8..cabfc103665 100644 --- a/storage/src/vespa/storage/storageserver/documentapiconverter.cpp +++ b/storage/src/vespa/storage/storageserver/documentapiconverter.cpp @@ -242,7 +242,7 @@ DocumentApiConverter::toDocumentAPI(api::StorageCommand& fromMsg) for (uint32_t i = 0; i < from.getCompletedBucketsList().size(); ++i) { to->getFinishedBuckets().push_back(from.getCompletedBucketsList()[i].bucketId); } - to->setErrorMessage(from.getErrorCode().getMessage()); + to->setErrorMessage(vespalib::string(from.getErrorCode().getMessage())); toMsg = std::move(to); break; } diff --git a/storage/src/vespa/storage/storageserver/mergethrottler.cpp b/storage/src/vespa/storage/storageserver/mergethrottler.cpp index c14bc6dc5eb..52593a9b0fa 100644 --- a/storage/src/vespa/storage/storageserver/mergethrottler.cpp +++ b/storage/src/vespa/storage/storageserver/mergethrottler.cpp @@ -475,7 +475,7 @@ MergeThrottler::rejectMergeIfOutdated( << ", storage node has version " << rejectLessThanVersion; sendReply(cmd, - api::ReturnCode(api::ReturnCode::WRONG_DISTRIBUTION, oss.str()), + api::ReturnCode(api::ReturnCode::WRONG_DISTRIBUTION, oss.view()), msgGuard, _metrics->chaining); LOG(debug, "Immediately rejected %s, due to it having state version < %u", cmd.toString().c_str(), rejectLessThanVersion); @@ -582,7 +582,7 @@ MergeThrottler::attemptProcessNextQueuedMerge(MessageGuard& msgGuard) "been started by someone else since it was queued"; LOG(debug, "%s", oss.c_str()); sendReply(dynamic_cast<const api::MergeBucketCommand&>(*msg), - api::ReturnCode(api::ReturnCode::BUSY, oss.str()), + api::ReturnCode(api::ReturnCode::BUSY, oss.view()), msgGuard, _metrics->chaining); } return true; @@ -852,7 +852,7 @@ MergeThrottler::validateNewMerge( oss << mergeCmd.toString() << " sent to node " << _component.getIndex() << ", which is not in its forwarding chain"; - LOG(error, "%s", oss.str().data()); + LOG(error, "%s", oss.view().data()); } else if (mergeCmd.getChain().size() >= nodeSeq.unordered_nodes().size()) { // Chain is full but we haven't seen the merge! This means // the node has probably gone down with a merge it previously @@ -860,19 +860,19 @@ MergeThrottler::validateNewMerge( oss << mergeCmd.toString() << " is not in node's internal state, but has a " << "full chain, meaning it cannot be forwarded."; - LOG(debug, "%s", oss.str().data()); + LOG(debug, "%s", oss.view().data()); } else if (nodeSeq.chain_contains_this_node()) { oss << mergeCmd.toString() << " is not in node's internal state, but contains " << "this node in its non-full chain. This should not happen!"; - LOG(error, "%s", oss.str().data()); + LOG(error, "%s", oss.view().data()); } else { valid = true; } if (!valid) { sendReply(mergeCmd, - api::ReturnCode(api::ReturnCode::REJECTED, oss.str()), + api::ReturnCode(api::ReturnCode::REJECTED, oss.view()), msgGuard, _metrics->local); } @@ -1184,10 +1184,10 @@ MergeThrottler::bucketIsUnknownOrAborted(const document::Bucket& bucket) const std::shared_ptr<api::StorageMessage> MergeThrottler::makeAbortReply(api::StorageCommand& cmd, - vespalib::stringref reason) const + std::string_view reason) const { LOG(debug, "Aborting message %s with reason '%s'", - cmd.toString().c_str(), reason.data()); + cmd.toString().c_str(), std::string(reason).c_str()); std::unique_ptr<api::StorageReply> reply(cmd.makeReply()); reply->setResult(api::ReturnCode(api::ReturnCode::ABORTED, reason)); return std::shared_ptr<api::StorageMessage>(reply.release()); diff --git a/storage/src/vespa/storage/storageserver/mergethrottler.h b/storage/src/vespa/storage/storageserver/mergethrottler.h index 1e791136476..1579d486f82 100644 --- a/storage/src/vespa/storage/storageserver/mergethrottler.h +++ b/storage/src/vespa/storage/storageserver/mergethrottler.h @@ -405,7 +405,7 @@ private: std::shared_ptr<api::StorageMessage> makeAbortReply( api::StorageCommand& cmd, - vespalib::stringref reason) const; + std::string_view reason) const; void handleOutdatedMerges(const api::SetSystemStateCommand&); void rejectOperationsInThreadQueue(MessageGuard&, uint32_t minimumStateVersion); diff --git a/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp b/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp index eb933f5eb2c..166b0377025 100644 --- a/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp +++ b/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp @@ -84,7 +84,7 @@ SharedRpcResources::~SharedRpcResources() { } } -void SharedRpcResources::start_server_and_register_slobrok(vespalib::stringref my_handle) { +void SharedRpcResources::start_server_and_register_slobrok(std::string_view my_handle) { LOG(debug, "Starting main RPC supervisor on port %d with slobrok handle '%s'", _rpc_server_port, vespalib::string(my_handle).c_str()); if (!_orb->Listen(_rpc_server_port)) { diff --git a/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.h b/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.h index d8f7eefad53..a99a93abd68 100644 --- a/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.h +++ b/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.h @@ -40,7 +40,7 @@ public: slobrok::api::MirrorAPI& slobrok_mirror() noexcept { return *_slobrok_mirror; } const slobrok::api::MirrorAPI& slobrok_mirror() const noexcept { return *_slobrok_mirror; } // To be called after all RPC handlers have been registered. - void start_server_and_register_slobrok(vespalib::stringref my_handle); + void start_server_and_register_slobrok(std::string_view my_handle); void sync_all_threads(); diff --git a/storage/src/vespa/storage/storageserver/rpc/slime_cluster_state_bundle_codec.cpp b/storage/src/vespa/storage/storageserver/rpc/slime_cluster_state_bundle_codec.cpp index f143066ac34..dda58d808fe 100644 --- a/storage/src/vespa/storage/storageserver/rpc/slime_cluster_state_bundle_codec.cpp +++ b/storage/src/vespa/storage/storageserver/rpc/slime_cluster_state_bundle_codec.cpp @@ -194,7 +194,7 @@ struct StateInserter : vespalib::slime::ObjectTraverser { : _space_states(space_states) {} void field(const Memory& symbol, const Inspector& inspector) override { - _space_states.emplace(FixedBucketSpaces::from_string(symbol.make_stringref()), + _space_states.emplace(FixedBucketSpaces::from_string(symbol.make_stringview()), std::make_shared<const lib::ClusterState>(inspector.asString().make_string())); } }; diff --git a/storage/src/vespa/storage/storageserver/rpc/storage_api_rpc_service.cpp b/storage/src/vespa/storage/storageserver/rpc/storage_api_rpc_service.cpp index f8b4f9ef42d..4a6fa058c56 100644 --- a/storage/src/vespa/storage/storageserver/rpc/storage_api_rpc_service.cpp +++ b/storage/src/vespa/storage/storageserver/rpc/storage_api_rpc_service.cpp @@ -228,7 +228,7 @@ void StorageApiRpcService::send_rpc_v1_request(std::shared_ptr<api::StorageComma auto reply = cmd->makeReply(); reply->setResult(make_no_address_for_service_error(*cmd->getAddress())); if (reply->getTrace().shouldTrace(TraceLevel::ERROR)) { - reply->getTrace().trace(TraceLevel::ERROR, reply->getResult().getMessage()); + reply->getTrace().trace(TraceLevel::ERROR, vespalib::string(reply->getResult().getMessage())); } // Always dispatch async for synchronously generated replies, or we risk nuking the // stack if the reply receiver keeps resending synchronously as well. @@ -323,7 +323,7 @@ void StorageApiRpcService::handle_request_done_rpc_error(FRT_RPCRequest& req, } void StorageApiRpcService::handle_request_done_decode_error(const RpcRequestContext& req_ctx, - vespalib::stringref description) { + std::string_view description) { auto& cmd = *req_ctx._originator_cmd; assert(cmd.has_transport_context()); // Otherwise, reply already (destructively) generated by codec create_and_dispatch_error_reply(cmd, api::ReturnCode( @@ -336,7 +336,7 @@ void StorageApiRpcService::create_and_dispatch_error_reply(api::StorageCommand& cmd.getAddress()->toString().c_str(), error.toString().c_str()); error_reply->getTrace().swap(cmd.getTrace()); if (error_reply->getTrace().shouldTrace(TraceLevel::ERROR)) { - error_reply->getTrace().trace(TraceLevel::ERROR, error.getMessage()); + error_reply->getTrace().trace(TraceLevel::ERROR, vespalib::string(error.getMessage())); } error_reply->setResult(std::move(error)); _message_dispatcher.dispatch_sync(std::move(error_reply)); diff --git a/storage/src/vespa/storage/storageserver/rpc/storage_api_rpc_service.h b/storage/src/vespa/storage/storageserver/rpc/storage_api_rpc_service.h index 49165b36314..cfab705928f 100644 --- a/storage/src/vespa/storage/storageserver/rpc/storage_api_rpc_service.h +++ b/storage/src/vespa/storage/storageserver/rpc/storage_api_rpc_service.h @@ -84,7 +84,7 @@ private: void handle_request_done_rpc_error(FRT_RPCRequest& req, const RpcRequestContext& req_ctx); void handle_request_done_decode_error(const RpcRequestContext& req_ctx, - vespalib::stringref description); + std::string_view description); void create_and_dispatch_error_reply(api::StorageCommand& cmd, api::ReturnCode error); api::ReturnCode map_frt_error_to_storage_api_error(FRT_RPCRequest& req, const RpcRequestContext& req_ctx); diff --git a/storage/src/vespa/storage/storageserver/service_layer_error_listener.cpp b/storage/src/vespa/storage/storageserver/service_layer_error_listener.cpp index 3cd8c212dc1..484e70267af 100644 --- a/storage/src/vespa/storage/storageserver/service_layer_error_listener.cpp +++ b/storage/src/vespa/storage/storageserver/service_layer_error_listener.cpp @@ -9,7 +9,7 @@ LOG_SETUP(".node.errorlistener"); namespace storage { -void ServiceLayerErrorListener::on_fatal_error(vespalib::stringref message) { +void ServiceLayerErrorListener::on_fatal_error(std::string_view message) { bool expected = false; if (_shutdown_initiated.compare_exchange_strong(expected, true)) { LOG(info, @@ -26,7 +26,7 @@ void ServiceLayerErrorListener::on_fatal_error(vespalib::stringref message) { } } -void ServiceLayerErrorListener::on_resource_exhaustion_error(vespalib::stringref message) { +void ServiceLayerErrorListener::on_resource_exhaustion_error(std::string_view message) { LOG(debug, "SPI reports resource exhaustion ('%s'). " "Applying back-pressure to merge throttler", vespalib::string(message).c_str()); diff --git a/storage/src/vespa/storage/storageserver/service_layer_error_listener.h b/storage/src/vespa/storage/storageserver/service_layer_error_listener.h index ae90ad8f711..08633ed25a6 100644 --- a/storage/src/vespa/storage/storageserver/service_layer_error_listener.h +++ b/storage/src/vespa/storage/storageserver/service_layer_error_listener.h @@ -29,8 +29,8 @@ public: _shutdown_initiated(false) {} - void on_fatal_error(vespalib::stringref message) override; - void on_resource_exhaustion_error(vespalib::stringref message) override; + void on_fatal_error(std::string_view message) override; + void on_resource_exhaustion_error(std::string_view message) override; }; } diff --git a/storage/src/vespa/storage/storageserver/statemanager.cpp b/storage/src/vespa/storage/storageserver/statemanager.cpp index 560982fb6c0..6e476caa909 100644 --- a/storage/src/vespa/storage/storageserver/statemanager.cpp +++ b/storage/src/vespa/storage/storageserver/statemanager.cpp @@ -160,7 +160,7 @@ StateManager::reportHtmlStatus(std::ostream& out, << "<th>Received at time</th><th>State</th></tr>\n"; for (const auto & it : std::ranges::reverse_view(_systemStateHistory)) { out << "<tr><td>" << vespalib::to_string(vespalib::to_utc(it.first)) << "</td><td>" - << xml_content_escaped(it.second->getBaselineClusterState()->toString()) << "</td></tr>\n"; + << xml_content_escaped(it.second->toString()) << "</td></tr>\n"; } out << "</table>\n"; } @@ -692,7 +692,7 @@ StateManager::getNodeInfo() const stream << End(); stream.finalize(); - return json.str(); + return std::string(json.view()); } void diff --git a/storage/src/vespa/storage/storageserver/storagenode.cpp b/storage/src/vespa/storage/storageserver/storagenode.cpp index 5b665f830d3..be527928129 100644 --- a/storage/src/vespa/storage/storageserver/storagenode.cpp +++ b/storage/src/vespa/storage/storageserver/storagenode.cpp @@ -498,7 +498,7 @@ StorageNode::waitUntilInitialized(vespalib::duration timeout) { } void -StorageNode::requestShutdown(vespalib::stringref reason) +StorageNode::requestShutdown(std::string_view reason) { bool was_stopped = false; const bool stop_now = _attemptedStopped.compare_exchange_strong(was_stopped, true, diff --git a/storage/src/vespa/storage/storageserver/storagenode.h b/storage/src/vespa/storage/storageserver/storagenode.h index 93265bece3c..da57b4c671f 100644 --- a/storage/src/vespa/storage/storageserver/storagenode.h +++ b/storage/src/vespa/storage/storageserver/storagenode.h @@ -100,7 +100,7 @@ public: * is alive, no calls will be made towards the persistence provider. */ virtual ResumeGuard pause() = 0; - void requestShutdown(vespalib::stringref reason) override; + void requestShutdown(std::string_view reason) override; DoneInitializeHandler& getDoneInitializeHandler() { return *this; } void configure(std::unique_ptr<StorServerConfig> config); diff --git a/storage/src/vespa/storage/storageserver/tls_statistics_metrics_wrapper.cpp b/storage/src/vespa/storage/storageserver/tls_statistics_metrics_wrapper.cpp index a1e63f02ac7..7a9bfe860b6 100644 --- a/storage/src/vespa/storage/storageserver/tls_statistics_metrics_wrapper.cpp +++ b/storage/src/vespa/storage/storageserver/tls_statistics_metrics_wrapper.cpp @@ -4,8 +4,8 @@ namespace storage { -TlsStatisticsMetricsWrapper::EndpointMetrics::EndpointMetrics(vespalib::stringref type, metrics::MetricSet* owner) - : metrics::MetricSet(type, {}, "Endpoint type metrics", owner), +TlsStatisticsMetricsWrapper::EndpointMetrics::EndpointMetrics(std::string_view type, metrics::MetricSet* owner) + : metrics::MetricSet(vespalib::string(type), {}, "Endpoint type metrics", owner), tls_connections_established("tls-connections-established", {}, "Number of secure mTLS connections established", this), insecure_connections_established("insecure-connections-established", {}, diff --git a/storage/src/vespa/storage/storageserver/tls_statistics_metrics_wrapper.h b/storage/src/vespa/storage/storageserver/tls_statistics_metrics_wrapper.h index 8aa28e959df..299fa2eacaa 100644 --- a/storage/src/vespa/storage/storageserver/tls_statistics_metrics_wrapper.h +++ b/storage/src/vespa/storage/storageserver/tls_statistics_metrics_wrapper.h @@ -14,7 +14,7 @@ namespace storage { // periodic metric snapshotting. class TlsStatisticsMetricsWrapper : public metrics::MetricSet { struct EndpointMetrics : metrics::MetricSet { - EndpointMetrics(vespalib::stringref type, metrics::MetricSet* owner); + EndpointMetrics(std::string_view type, metrics::MetricSet* owner); ~EndpointMetrics() override; metrics::LongCountMetric tls_connections_established; diff --git a/storage/src/vespa/storage/visiting/countvisitor.cpp b/storage/src/vespa/storage/visiting/countvisitor.cpp index fe1569f84da..6637e7392bd 100644 --- a/storage/src/vespa/storage/visiting/countvisitor.cpp +++ b/storage/src/vespa/storage/visiting/countvisitor.cpp @@ -35,7 +35,7 @@ CountVisitor::handleDocuments(const document::BucketId& /*bucketId*/, hitCounter.addHit(doc->getId(), 0); if (_doNamespace) { - _namespaceCount[idString.getNamespace()]++; + _namespaceCount[vespalib::string(idString.getNamespace())]++; } if (_doUser && idString.hasNumber()) { @@ -43,7 +43,7 @@ CountVisitor::handleDocuments(const document::BucketId& /*bucketId*/, } if (_doGroup && idString.hasGroup()) { - _groupCount[idString.getGroup()]++; + _groupCount[vespalib::string(idString.getGroup())]++; } if (_doScheme) { diff --git a/storage/src/vespa/storage/visiting/recoveryvisitor.cpp b/storage/src/vespa/storage/visiting/recoveryvisitor.cpp index 27f49f5e7ec..7bd9579d48a 100644 --- a/storage/src/vespa/storage/visiting/recoveryvisitor.cpp +++ b/storage/src/vespa/storage/visiting/recoveryvisitor.cpp @@ -6,6 +6,7 @@ #include <vespa/documentapi/messagebus/messages/visitor.h> #include <vespa/document/fieldvalue/document.h> #include <vespa/vespalib/text/stringtokenizer.h> +#include <utility> #include <vespa/vespalib/stllike/hash_map.hpp> #include <vespa/log/log.h> @@ -18,11 +19,11 @@ RecoveryVisitor::RecoveryVisitor(StorageComponent& component, : Visitor(component) { if (params.hasValue("requestfields")) { - std::string fields = params.get("requestfields"); + std::string_view fields = params.get("requestfields"); vespalib::StringTokenizer tokenizer(fields); - for (uint32_t i = 0; i < tokenizer.size(); i++) { - _requestedFields.insert(tokenizer[i]); + for (auto field : tokenizer) { + _requestedFields.emplace(field); } } @@ -42,7 +43,7 @@ RecoveryVisitor::handleDocuments(const document::BucketId& bid, documentapi::DocumentListMessage* cmd = nullptr; { - CommandMap::iterator iter = _activeCommands.find(bid); + auto iter = _activeCommands.find(bid); if (iter == _activeCommands.end()) { CommandPtr ptr(new documentapi::DocumentListMessage(bid)); @@ -54,9 +55,9 @@ RecoveryVisitor::handleDocuments(const document::BucketId& bid, } // Remove all fields from the document that are not listed in requestedFields. - for (size_t i = 0; i < entries.size(); ++i) { - const spi::DocEntry& entry(*entries[i]); - std::unique_ptr<document::Document> doc(entry.getDocument()->clone()); + for (const auto & entrie : entries) { + const spi::DocEntry& entry(*entrie); + std::shared_ptr<document::Document> doc(entry.getDocument()->clone()); if (_requestedFields.empty()) { doc->clear(); } else { @@ -74,10 +75,7 @@ RecoveryVisitor::handleDocuments(const document::BucketId& bid, hitCounter.addHit(doc->getId(), doc->serialize().size()); int64_t timestamp = doc->getLastModified(); - cmd->getDocuments().push_back(documentapi::DocumentListMessage::Entry( - timestamp, - document::Document::SP(doc.release()), - entry.isRemove())); + cmd->getDocuments().emplace_back(timestamp, std::move(doc), entry.isRemove()); } } @@ -90,15 +88,15 @@ void RecoveryVisitor::completedBucket(const document::BucketId& bid, HitCounter& { std::lock_guard guard(_mutex); - CommandMap::iterator iter = _activeCommands.find(bid); + auto iter = _activeCommands.find(bid); if (iter != _activeCommands.end()) { - _msgToSend.reset(iter->second.release()); + _msgToSend = std::move(iter->second); _activeCommands.erase(iter); } } - if (_msgToSend.get()) { + if (_msgToSend) { sendMessage(std::move(_msgToSend)); } } diff --git a/storage/src/vespa/storage/visiting/reindexing_visitor.cpp b/storage/src/vespa/storage/visiting/reindexing_visitor.cpp index 5b095ef6af0..c9bde68be3f 100644 --- a/storage/src/vespa/storage/visiting/reindexing_visitor.cpp +++ b/storage/src/vespa/storage/visiting/reindexing_visitor.cpp @@ -47,9 +47,9 @@ bool ReindexingVisitor::remap_docapi_message_error_code(api::ReturnCode& in_out_ vespalib::string ReindexingVisitor::make_lock_access_token() const { vespalib::string prefix = reindexing_bucket_lock_bypass_prefix(); - vespalib::stringref passed_token = visitor_parameters().get( + std::string_view passed_token = visitor_parameters().get( reindexing_bucket_lock_visitor_parameter_key(), - vespalib::stringref("")); + std::string_view("")); if (passed_token.empty()) { return prefix; } diff --git a/storage/src/vespa/storage/visiting/visitor.cpp b/storage/src/vespa/storage/visiting/visitor.cpp index ceb356a982c..f9845007159 100644 --- a/storage/src/vespa/storage/visiting/visitor.cpp +++ b/storage/src/vespa/storage/visiting/visitor.cpp @@ -458,7 +458,7 @@ Visitor::reportProblem(const api::ReturnCode& problemCode) os << "[From content node " << _ownNodeIndex << "] "; os << api::ReturnCode::getResultString(problemCode.getResult()) << ": " << problemCode.getMessage(); - reportProblem(os.str()); + reportProblem(std::string(os.view())); } void diff --git a/storage/src/vespa/storage/visiting/visitormetrics.cpp b/storage/src/vespa/storage/visiting/visitormetrics.cpp index 23c4765c3be..bb296840c93 100644 --- a/storage/src/vespa/storage/visiting/visitormetrics.cpp +++ b/storage/src/vespa/storage/visiting/visitormetrics.cpp @@ -2,7 +2,7 @@ #include "visitormetrics.h" #include <vespa/vespalib/util/exceptions.h> -#include <vespa/vespalib/stllike/asciistream.h> +#include <sstream> namespace storage { @@ -41,7 +41,7 @@ VisitorMetrics::initThreads(uint16_t threadCount) { threads.clear(); threads.resize(threadCount); for (uint32_t i=0; i<threads.size(); ++i) { - vespalib::asciistream ost; + std::ostringstream ost; ost << "visitor_thread_" << i; threads[i] = std::make_shared<VisitorThreadMetrics>( ost.str(), ost.str()); registerMetric(*threads[i]); diff --git a/storage/src/vespa/storage/visiting/visitorthread.cpp b/storage/src/vespa/storage/visiting/visitorthread.cpp index 9d03f2c597a..1031b48c38f 100644 --- a/storage/src/vespa/storage/visiting/visitorthread.cpp +++ b/storage/src/vespa/storage/visiting/visitorthread.cpp @@ -237,8 +237,8 @@ VisitorThread::run(framework::ThreadHandle& thread) } catch (std::exception& e) { vespalib::asciistream ost; ost << "Failed to handle visitor message:" << e.what(); - LOG(warning, "Failed handling visitor message: %s", ost.str().data()); - result = ReturnCode(ReturnCode::INTERNAL_FAILURE, ost.str()); + LOG(warning, "Failed handling visitor message: %s", ost.view().data()); + result = ReturnCode(ReturnCode::INTERNAL_FAILURE, ost.view()); if (entry._message.get() && entry._message->getType() == api::MessageType::VISITOR_CREATE) { _messageSender.closed(entry._visitorId); _metrics.failedVisitors.inc(1); @@ -326,18 +326,18 @@ VisitorThread::handleNonExistingVisitorCall(const Event& entry, ReturnCode& code vespalib::asciistream ost; ost << "Visitor " << entry._visitorId << " no longer exist"; - code = ReturnCode(ReturnCode::ILLEGAL_PARAMETERS, ost.str()); + code = ReturnCode(ReturnCode::ILLEGAL_PARAMETERS, ost.view()); } /** * Utility function to get a visitor instance from a given library. */ std::shared_ptr<Visitor> -VisitorThread::createVisitor(vespalib::stringref libName, +VisitorThread::createVisitor(std::string_view libName, const vdslib::Parameters& params, vespalib::asciistream & error) { - vespalib::string str = libName; + vespalib::string str(libName); std::transform(str.begin(), str.end(), str.begin(), tolower); auto it = _visitorFactories.find(str); @@ -423,9 +423,9 @@ VisitorThread::onCreateVisitor(const std::shared_ptr<api::CreateVisitorCommand>& vespalib::asciistream errors; visitor = createVisitor(cmd->getLibraryName(), cmd->getParameters(), errors); if (!visitor) { - result = ReturnCode(ReturnCode::ILLEGAL_PARAMETERS, errors.str()); + result = ReturnCode(ReturnCode::ILLEGAL_PARAMETERS, errors.view()); LOG(warning, "CreateVisitor(%s): Failed to create visitor: %s", - cmd->getInstanceId().c_str(), errors.str().data()); + cmd->getInstanceId().c_str(), errors.view().data()); break; } // Set visitor parameters @@ -465,17 +465,17 @@ VisitorThread::onCreateVisitor(const std::shared_ptr<api::CreateVisitorCommand>& vespalib::asciistream ost; ost << "Failed to parse document select string '" << cmd->getDocumentSelection() << "': " << e.getMessage(); - result = ReturnCode(ReturnCode::ILLEGAL_PARAMETERS, ost.str()); + result = ReturnCode(ReturnCode::ILLEGAL_PARAMETERS, ost.view()); LOG(warning, "CreateVisitor(%s): %s", - cmd->getInstanceId().c_str(), ost.str().data()); + cmd->getInstanceId().c_str(), ost.view().data()); break; } catch (document::select::ParsingFailedException& e) { vespalib::asciistream ost; ost << "Failed to parse document select string '" << cmd->getDocumentSelection() << "': " << e.getMessage(); - result = ReturnCode(ReturnCode::ILLEGAL_PARAMETERS, ost.str()); + result = ReturnCode(ReturnCode::ILLEGAL_PARAMETERS, ost.view()); LOG(warning, "CreateVisitor(%s): %s", - cmd->getInstanceId().c_str(), ost.str().data()); + cmd->getInstanceId().c_str(), ost.view().data()); break; } LOG(debug, "CreateVisitor(%s): Successfully created visitor", @@ -569,7 +569,7 @@ VisitorThread::onInternal(const std::shared_ptr<api::InternalCommand>& cmd) auto& rsp = dynamic_cast<RequestStatusPage&>(*cmd); vespalib::asciistream ost; getStatus(ost, rsp.getPath()); - _messageSender.send(std::make_shared<RequestStatusPageReply>(rsp, ost.str())); + _messageSender.send(std::make_shared<RequestStatusPageReply>(rsp, std::string(ost.view()))); break; } default: diff --git a/storage/src/vespa/storage/visiting/visitorthread.h b/storage/src/vespa/storage/visiting/visitorthread.h index 034c726e947..693ae6fe78a 100644 --- a/storage/src/vespa/storage/visiting/visitorthread.h +++ b/storage/src/vespa/storage/visiting/visitorthread.h @@ -115,7 +115,7 @@ private: void trimRecentlyCompletedList(vespalib::steady_time currentTime); void handleNonExistingVisitorCall(const Event& entry, api::ReturnCode& code); - std::shared_ptr<Visitor> createVisitor(vespalib::stringref libName, + std::shared_ptr<Visitor> createVisitor(std::string_view libName, const vdslib::Parameters& params, vespalib::asciistream & error); diff --git a/storage/src/vespa/storageapi/mbusprot/protocolserialization7.cpp b/storage/src/vespa/storageapi/mbusprot/protocolserialization7.cpp index 0f4a34cc775..dfe11c840d9 100644 --- a/storage/src/vespa/storageapi/mbusprot/protocolserialization7.cpp +++ b/storage/src/vespa/storageapi/mbusprot/protocolserialization7.cpp @@ -523,7 +523,7 @@ void ProtocolSerialization7::onEncode(GBBuf& buf, const api::RemoveReply& msg) c api::StorageCommand::UP ProtocolSerialization7::onDecodeRemoveCommand(BBuf& buf) const { return decode_bucket_request<protobuf::RemoveRequest>(buf, [&](auto& req, auto& bucket) { - document::DocumentId doc_id(vespalib::stringref(req.document_id().data(), req.document_id().size())); + document::DocumentId doc_id(std::string_view(req.document_id().data(), req.document_id().size())); auto cmd = std::make_unique<api::RemoveCommand>(bucket, doc_id, req.new_timestamp()); if (req.has_condition()) { cmd->setCondition(get_tas_condition(req.condition())); @@ -600,7 +600,7 @@ void ProtocolSerialization7::onEncode(GBBuf& buf, const api::GetReply& msg) cons api::StorageCommand::UP ProtocolSerialization7::onDecodeGetCommand(BBuf& buf) const { return decode_bucket_request<protobuf::GetRequest>(buf, [&](auto& req, auto& bucket) { - document::DocumentId doc_id(vespalib::stringref(req.document_id().data(), req.document_id().size())); + document::DocumentId doc_id(std::string_view(req.document_id().data(), req.document_id().size())); auto op = std::make_unique<api::GetCommand>(bucket, std::move(doc_id), req.field_set(), req.before_timestamp()); op->set_internal_read_consistency(read_consistency_from_protobuf(req.internal_read_consistency())); diff --git a/storage/src/vespa/storageapi/mbusprot/serializationhelper.h b/storage/src/vespa/storageapi/mbusprot/serializationhelper.h index 616059aef0b..e54c24248d4 100644 --- a/storage/src/vespa/storageapi/mbusprot/serializationhelper.h +++ b/storage/src/vespa/storageapi/mbusprot/serializationhelper.h @@ -30,12 +30,12 @@ public: return tmp; } - static vespalib::stringref getString(document::ByteBuffer& buf) { + static std::string_view getString(document::ByteBuffer& buf) { uint32_t tmp; buf.getIntNetwork((int32_t&) tmp); const char * p = buf.getBufferAtPos(); buf.incPos(tmp); - vespalib::stringref s(p, tmp); + std::string_view s(p, tmp); return s; } diff --git a/storage/src/vespa/storageapi/message/bucket.cpp b/storage/src/vespa/storageapi/message/bucket.cpp index 499d2f4abe2..38067494f50 100644 --- a/storage/src/vespa/storageapi/message/bucket.cpp +++ b/storage/src/vespa/storageapi/message/bucket.cpp @@ -457,7 +457,7 @@ RequestBucketInfoCommand::RequestBucketInfoCommand( RequestBucketInfoCommand::RequestBucketInfoCommand( document::BucketSpace bucketSpace, uint16_t distributor, const lib::ClusterState& state, - vespalib::stringref distributionHash) + std::string_view distributionHash) : StorageCommand(MessageType::REQUESTBUCKETINFO), _bucketSpace(bucketSpace), _buckets(), diff --git a/storage/src/vespa/storageapi/message/bucket.h b/storage/src/vespa/storageapi/message/bucket.h index 4aa2ff8b0c1..b34ce624755 100644 --- a/storage/src/vespa/storageapi/message/bucket.h +++ b/storage/src/vespa/storageapi/message/bucket.h @@ -357,7 +357,7 @@ public: RequestBucketInfoCommand(document::BucketSpace bucketSpace, uint16_t distributor, const lib::ClusterState& state, - vespalib::stringref _distributionHash); + std::string_view _distributionHash); RequestBucketInfoCommand(document::BucketSpace bucketSpace, uint16_t distributor, diff --git a/storage/src/vespa/storageapi/message/datagram.cpp b/storage/src/vespa/storageapi/message/datagram.cpp index 103b7ead08c..6c7c8714596 100644 --- a/storage/src/vespa/storageapi/message/datagram.cpp +++ b/storage/src/vespa/storageapi/message/datagram.cpp @@ -25,7 +25,7 @@ MapVisitorCommand::print(std::ostream& out, bool verbose, if (verbose) { for (const auto & stat : _statistics) { out << ",\n" << indent << " " << stat.first << ": " - << vespalib::stringref(stat.second.c_str(), stat.second.length()); + << std::string_view(stat.second.c_str(), stat.second.length()); } out << ") : "; StorageCommand::print(out, verbose, indent); diff --git a/storage/src/vespa/storageapi/message/persistence.cpp b/storage/src/vespa/storageapi/message/persistence.cpp index af054855bbe..aaf3cf291c3 100644 --- a/storage/src/vespa/storageapi/message/persistence.cpp +++ b/storage/src/vespa/storageapi/message/persistence.cpp @@ -194,7 +194,7 @@ UpdateReply::print(std::ostream& out, bool verbose, const std::string& indent) c } GetCommand::GetCommand(const document::Bucket &bucket, const document::DocumentId& docId, - vespalib::stringref fieldSet, Timestamp before) + std::string_view fieldSet, Timestamp before) : BucketInfoCommand(MessageType::GET, bucket), _docId(docId), _beforeTimestamp(before), diff --git a/storage/src/vespa/storageapi/message/persistence.h b/storage/src/vespa/storageapi/message/persistence.h index 0676e1d0f44..7df3cf2edcb 100644 --- a/storage/src/vespa/storageapi/message/persistence.h +++ b/storage/src/vespa/storageapi/message/persistence.h @@ -206,13 +206,13 @@ class GetCommand : public BucketInfoCommand { InternalReadConsistency _internal_read_consistency; public: GetCommand(const document::Bucket &bucket, const document::DocumentId&, - vespalib::stringref fieldSet, Timestamp before = MAX_TIMESTAMP); + std::string_view fieldSet, Timestamp before = MAX_TIMESTAMP); ~GetCommand() override; void setBeforeTimestamp(Timestamp ts) { _beforeTimestamp = ts; } const document::DocumentId& getDocumentId() const { return _docId; } Timestamp getBeforeTimestamp() const { return _beforeTimestamp; } const vespalib::string& getFieldSet() const { return _fieldSet; } - void setFieldSet(vespalib::stringref fieldSet) { _fieldSet = fieldSet; } + void setFieldSet(std::string_view fieldSet) { _fieldSet = fieldSet; } [[nodiscard]] bool has_condition() const noexcept { return _condition.isPresent(); } [[nodiscard]] const TestAndSetCondition& condition() const noexcept { return _condition; } void set_condition(TestAndSetCondition cond) { _condition = std::move(cond); } diff --git a/storage/src/vespa/storageapi/message/removelocation.cpp b/storage/src/vespa/storageapi/message/removelocation.cpp index 1c7c84a77d6..12693558c42 100644 --- a/storage/src/vespa/storageapi/message/removelocation.cpp +++ b/storage/src/vespa/storageapi/message/removelocation.cpp @@ -8,7 +8,7 @@ namespace storage::api { IMPLEMENT_COMMAND(RemoveLocationCommand, RemoveLocationReply) IMPLEMENT_REPLY(RemoveLocationReply) -RemoveLocationCommand::RemoveLocationCommand(vespalib::stringref documentSelection, +RemoveLocationCommand::RemoveLocationCommand(std::string_view documentSelection, const document::Bucket &bucket) : BucketInfoCommand(MessageType::REMOVELOCATION, bucket), _documentSelection(documentSelection), diff --git a/storage/src/vespa/storageapi/message/removelocation.h b/storage/src/vespa/storageapi/message/removelocation.h index d61510244bf..64e5bb0db63 100644 --- a/storage/src/vespa/storageapi/message/removelocation.h +++ b/storage/src/vespa/storageapi/message/removelocation.h @@ -11,7 +11,7 @@ namespace storage::api { class RemoveLocationCommand : public BucketInfoCommand { public: - RemoveLocationCommand(vespalib::stringref documentSelection, const document::Bucket &bucket); + RemoveLocationCommand(std::string_view documentSelection, const document::Bucket &bucket); ~RemoveLocationCommand() override; void print(std::ostream& out, bool verbose, const std::string& indent) const override; diff --git a/storage/src/vespa/storageapi/message/stat.cpp b/storage/src/vespa/storageapi/message/stat.cpp index 6a51c41b17b..62ad41f178d 100644 --- a/storage/src/vespa/storageapi/message/stat.cpp +++ b/storage/src/vespa/storageapi/message/stat.cpp @@ -11,7 +11,7 @@ IMPLEMENT_COMMAND(GetBucketListCommand, GetBucketListReply) IMPLEMENT_REPLY(GetBucketListReply) StatBucketCommand::StatBucketCommand(const document::Bucket& bucket, - vespalib::stringref documentSelection) + std::string_view documentSelection) : BucketCommand(MessageType::STATBUCKET, bucket), _docSelection(documentSelection) { @@ -32,7 +32,7 @@ StatBucketCommand::print(std::ostream& out, bool verbose, } StatBucketReply::StatBucketReply(const StatBucketCommand& cmd, - vespalib::stringref results) + std::string_view results) : BucketReply(cmd), _results(results) { diff --git a/storage/src/vespa/storageapi/message/stat.h b/storage/src/vespa/storageapi/message/stat.h index 8b2de193ced..fcda1ce2be3 100644 --- a/storage/src/vespa/storageapi/message/stat.h +++ b/storage/src/vespa/storageapi/message/stat.h @@ -20,7 +20,7 @@ private: vespalib::string _docSelection; public: StatBucketCommand(const document::Bucket &bucket, - vespalib::stringref documentSelection); + std::string_view documentSelection); ~StatBucketCommand() override; const vespalib::string& getDocumentSelection() const { return _docSelection; } @@ -31,7 +31,7 @@ public: class StatBucketReply : public BucketReply { vespalib::string _results; public: - explicit StatBucketReply(const StatBucketCommand&, vespalib::stringref results = ""); + explicit StatBucketReply(const StatBucketCommand&, std::string_view results = ""); const vespalib::string& getResults() const noexcept { return _results; } void print(std::ostream& out, bool verbose, const std::string& indent) const override; DECLARE_STORAGEREPLY(StatBucketReply, onStatBucketReply) @@ -61,7 +61,7 @@ public: vespalib::string _bucketInformation; BucketInfo(const document::BucketId& id, - vespalib::stringref bucketInformation) noexcept + std::string_view bucketInformation) noexcept : _bucket(id), _bucketInformation(bucketInformation) {} diff --git a/storage/src/vespa/storageapi/message/visitor.cpp b/storage/src/vespa/storageapi/message/visitor.cpp index 821b98ab7b2..272677f872b 100644 --- a/storage/src/vespa/storageapi/message/visitor.cpp +++ b/storage/src/vespa/storageapi/message/visitor.cpp @@ -16,9 +16,9 @@ IMPLEMENT_COMMAND(VisitorInfoCommand, VisitorInfoReply) IMPLEMENT_REPLY(VisitorInfoReply) CreateVisitorCommand::CreateVisitorCommand(document::BucketSpace bucketSpace, - vespalib::stringref libraryName, - vespalib::stringref instanceId, - vespalib::stringref docSelection) + std::string_view libraryName, + std::string_view instanceId, + std::string_view docSelection) : StorageCommand(MessageType::VISITOR_CREATE), _bucketSpace(bucketSpace), _libName(libraryName), @@ -146,7 +146,7 @@ CreateVisitorReply::print(std::ostream& out, bool verbose, } } -DestroyVisitorCommand::DestroyVisitorCommand(vespalib::stringref instanceId) +DestroyVisitorCommand::DestroyVisitorCommand(std::string_view instanceId) : StorageCommand(MessageType::VISITOR_DESTROY), _instanceId(instanceId) { diff --git a/storage/src/vespa/storageapi/message/visitor.h b/storage/src/vespa/storageapi/message/visitor.h index 979b8064bd8..0ad1582efd0 100644 --- a/storage/src/vespa/storageapi/message/visitor.h +++ b/storage/src/vespa/storageapi/message/visitor.h @@ -52,25 +52,25 @@ private: public: CreateVisitorCommand(document::BucketSpace bucketSpace, - vespalib::stringref libraryName, - vespalib::stringref instanceId, - vespalib::stringref docSelection); + std::string_view libraryName, + std::string_view instanceId, + std::string_view docSelection); /** Create another command with similar visitor settings. */ CreateVisitorCommand(const CreateVisitorCommand& template_); ~CreateVisitorCommand() override; void setVisitorCmdId(uint32_t id) { _visitorCmdId = id; } - void setControlDestination(vespalib::stringref d) { _controlDestination = d; } - void setDataDestination(vespalib::stringref d) { _dataDestination = d; } + void setControlDestination(std::string_view d) { _controlDestination = d; } + void setDataDestination(std::string_view d) { _dataDestination = d; } void setParameters(const vdslib::Parameters& params) { _params = params; } void setMaximumPendingReplyCount(uint32_t count) { _maxPendingReplyCount = count; } - void setFieldSet(vespalib::stringref fieldSet) { _fieldSet = fieldSet; } + void setFieldSet(std::string_view fieldSet) { _fieldSet = fieldSet; } void setVisitRemoves(bool value = true) { _visitRemoves = value; } void setVisitInconsistentBuckets(bool visitInconsistent = true) { _visitInconsistentBuckets = visitInconsistent; } void addBucketToBeVisited(const document::BucketId& id) { _buckets.push_back(id); } void setVisitorId(const VisitorId id) { _visitorId = id; } - void setInstanceId(vespalib::stringref id) { _instanceId = id; } + void setInstanceId(std::string_view id) { _instanceId = id; } void setQueueTimeout(duration milliSecs) { _queueTimeout = milliSecs; } void setFromTime(Timestamp ts) { _fromTime = ts; } void setToTime(Timestamp ts) { _toTime = ts; } @@ -147,7 +147,7 @@ private: vespalib::string _instanceId; public: - explicit DestroyVisitorCommand(vespalib::stringref instanceId); + explicit DestroyVisitorCommand(std::string_view instanceId); const vespalib::string & getInstanceId() const { return _instanceId; } diff --git a/storage/src/vespa/storageapi/messageapi/maintenancecommand.h b/storage/src/vespa/storageapi/messageapi/maintenancecommand.h index 69e5c8a175c..7c634fb9c40 100644 --- a/storage/src/vespa/storageapi/messageapi/maintenancecommand.h +++ b/storage/src/vespa/storageapi/messageapi/maintenancecommand.h @@ -18,7 +18,7 @@ public: ~MaintenanceCommand() override; const vespalib::string& getReason() const { return _reason; }; - void setReason(vespalib::stringref reason) { _reason = reason; }; + void setReason(std::string_view reason) { _reason = reason; }; protected: vespalib::string _reason; }; diff --git a/storage/src/vespa/storageapi/messageapi/returncode.cpp b/storage/src/vespa/storageapi/messageapi/returncode.cpp index d3e321b11b6..4c8ebc9d766 100644 --- a/storage/src/vespa/storageapi/messageapi/returncode.cpp +++ b/storage/src/vespa/storageapi/messageapi/returncode.cpp @@ -7,7 +7,7 @@ namespace storage::api { ReturnCode & ReturnCode::operator = (ReturnCode &&) noexcept = default; -ReturnCode::ReturnCode(Result result, vespalib::stringref msg) +ReturnCode::ReturnCode(Result result, std::string_view msg) : _result(result), _message() { diff --git a/storage/src/vespa/storageapi/messageapi/returncode.h b/storage/src/vespa/storageapi/messageapi/returncode.h index 99ceb32be8b..2e2cf51705c 100644 --- a/storage/src/vespa/storageapi/messageapi/returncode.h +++ b/storage/src/vespa/storageapi/messageapi/returncode.h @@ -69,16 +69,16 @@ public: : _result(result), _message() {} - ReturnCode(Result result, vespalib::stringref msg); + ReturnCode(Result result, std::string_view msg); ReturnCode(const ReturnCode &); ReturnCode & operator = (const ReturnCode &); ReturnCode(ReturnCode &&) noexcept = default; ReturnCode & operator = (ReturnCode &&) noexcept; - vespalib::stringref getMessage() const { + std::string_view getMessage() const { return _message - ? _message->operator vespalib::stringref() - : vespalib::stringref(); + ? _message->operator std::string_view() + : std::string_view(); } Result getResult() const { return _result; } diff --git a/storage/src/vespa/storageapi/messageapi/storagemessage.cpp b/storage/src/vespa/storageapi/messageapi/storagemessage.cpp index f62c6410882..57a7b6537d5 100644 --- a/storage/src/vespa/storageapi/messageapi/storagemessage.cpp +++ b/storage/src/vespa/storageapi/messageapi/storagemessage.cpp @@ -106,7 +106,7 @@ MessageType::MessageType::get(Id id) } return *it->second; } -MessageType::MessageType(vespalib::stringref name, Id id, +MessageType::MessageType(std::string_view name, Id id, const MessageType* replyOf) : _name(name), _id(id), _reply(nullptr), _replyOf(replyOf) { @@ -139,7 +139,7 @@ std::ostream & operator << (std::ostream & os, const StorageMessageAddress & add namespace { vespalib::string -createAddress(vespalib::stringref cluster, const lib::NodeType &type, uint16_t index) { +createAddress(std::string_view cluster, const lib::NodeType &type, uint16_t index) { vespalib::asciistream os; os << STORAGEADDRESS_PREFIX << cluster << '/' << type.toString() << '/' << index << "/default"; return os.str(); diff --git a/storage/src/vespa/storageapi/messageapi/storagemessage.h b/storage/src/vespa/storageapi/messageapi/storagemessage.h index af7f5e6cd7d..326a4ff0f04 100644 --- a/storage/src/vespa/storageapi/messageapi/storagemessage.h +++ b/storage/src/vespa/storageapi/messageapi/storagemessage.h @@ -152,7 +152,7 @@ private: MessageType *_reply; const MessageType *_replyOf; - MessageType(vespalib::stringref name, Id id, const MessageType* replyOf = 0); + MessageType(std::string_view name, Id id, const MessageType* replyOf = 0); public: static const MessageType DOCBLOCK; static const MessageType DOCBLOCK_REPLY; diff --git a/storage/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp b/storage/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp index 146d7f441a3..75be8ce6686 100644 --- a/storage/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp +++ b/storage/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp @@ -39,7 +39,7 @@ ComponentRegisterImpl::registerComponent(ManagedComponent& mc) } void -ComponentRegisterImpl::requestShutdown(vespalib::stringref reason) +ComponentRegisterImpl::requestShutdown(std::string_view reason) { std::lock_guard lock(_componentLock); if (_shutdownListener) { @@ -89,7 +89,7 @@ ComponentRegisterImpl::setThreadPool(ThreadPool& tp) } const StatusReporter* -ComponentRegisterImpl::getStatusReporter(vespalib::stringref id) +ComponentRegisterImpl::getStatusReporter(std::string_view id) { std::lock_guard lock(_componentLock); for (auto* component : _components) { @@ -126,7 +126,7 @@ namespace { struct MetricHookWrapper : public metrics::UpdateHook { MetricUpdateHook& _hook; - MetricHookWrapper(vespalib::stringref name, MetricUpdateHook& hook, vespalib::system_time::duration period) + MetricHookWrapper(std::string_view name, MetricUpdateHook& hook, vespalib::system_time::duration period) : metrics::UpdateHook(name.data(), period), // Expected to point to static name _hook(hook) { @@ -137,7 +137,7 @@ namespace { } void -ComponentRegisterImpl::registerUpdateHook(vespalib::stringref name, +ComponentRegisterImpl::registerUpdateHook(std::string_view name, MetricUpdateHook& hook, vespalib::system_time::duration period) { diff --git a/storage/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h b/storage/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h index 15260cfff0f..0722993b8f1 100644 --- a/storage/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h +++ b/storage/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h @@ -36,7 +36,7 @@ namespace storage::framework::defaultimplementation { struct ShutdownListener { virtual ~ShutdownListener() = default; - virtual void requestShutdown(vespalib::stringref reason) = 0; + virtual void requestShutdown(std::string_view reason) = 0; }; class ComponentRegisterImpl : public virtual ComponentRegister, @@ -63,17 +63,17 @@ public: metrics::MetricManager& getMetricManager() { return *_metricManager; } void registerComponent(ManagedComponent&) override; - void requestShutdown(vespalib::stringref reason) override; + void requestShutdown(std::string_view reason) override; void setMetricManager(metrics::MetricManager&); void setClock(Clock&); void setThreadPool(ThreadPool&); - const StatusReporter* getStatusReporter(vespalib::stringref id) override; + const StatusReporter* getStatusReporter(std::string_view id) override; std::vector<const StatusReporter*> getStatusReporters() override; void registerMetric(metrics::Metric&) override; - void registerUpdateHook(vespalib::stringref name, MetricUpdateHook& hook, vespalib::system_time::duration period) override; + void registerUpdateHook(std::string_view name, MetricUpdateHook& hook, vespalib::system_time::duration period) override; void registerShutdownListener(ShutdownListener&); }; diff --git a/storage/src/vespa/storageframework/defaultimplementation/thread/threadimpl.cpp b/storage/src/vespa/storageframework/defaultimplementation/thread/threadimpl.cpp index 5a24549c093..740b776f7e9 100644 --- a/storage/src/vespa/storageframework/defaultimplementation/thread/threadimpl.cpp +++ b/storage/src/vespa/storageframework/defaultimplementation/thread/threadimpl.cpp @@ -16,7 +16,7 @@ namespace storage::framework::defaultimplementation { ThreadImpl::ThreadImpl(ThreadPoolImpl& pool, Runnable& runnable, - vespalib::stringref id, + std::string_view id, vespalib::duration waitTime, vespalib::duration maxProcessTime, int ticksBeforeWait, diff --git a/storage/src/vespa/storageframework/defaultimplementation/thread/threadimpl.h b/storage/src/vespa/storageframework/defaultimplementation/thread/threadimpl.h index a0142addbc8..51bf46f5585 100644 --- a/storage/src/vespa/storageframework/defaultimplementation/thread/threadimpl.h +++ b/storage/src/vespa/storageframework/defaultimplementation/thread/threadimpl.h @@ -51,7 +51,7 @@ class ThreadImpl final : public Thread void run(); public: - ThreadImpl(ThreadPoolImpl&, Runnable&, vespalib::stringref id, vespalib::duration waitTime, + ThreadImpl(ThreadPoolImpl&, Runnable&, std::string_view id, vespalib::duration waitTime, vespalib::duration maxProcessTime, int ticksBeforeWait, std::optional<vespalib::CpuUsage::Category> cpu_category); ~ThreadImpl() override; diff --git a/storage/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.cpp b/storage/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.cpp index 5402965589b..b06826234f0 100644 --- a/storage/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.cpp +++ b/storage/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.cpp @@ -46,7 +46,7 @@ ThreadPoolImpl::~ThreadPoolImpl() } Thread::UP -ThreadPoolImpl::startThread(Runnable& runnable, vespalib::stringref id, vespalib::duration waitTime, +ThreadPoolImpl::startThread(Runnable& runnable, std::string_view id, vespalib::duration waitTime, vespalib::duration maxProcessTime, int ticksBeforeWait, std::optional<vespalib::CpuUsage::Category> cpu_category) { diff --git a/storage/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h b/storage/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h index d4c259fda2c..592ab78ebfd 100644 --- a/storage/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h +++ b/storage/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h @@ -22,7 +22,7 @@ public: ThreadPoolImpl(Clock&); ~ThreadPoolImpl() override; - std::unique_ptr<Thread> startThread(Runnable&, vespalib::stringref id, vespalib::duration waitTime, + std::unique_ptr<Thread> startThread(Runnable&, std::string_view id, vespalib::duration waitTime, vespalib::duration maxProcessTime, int ticksBeforeWait, std::optional<vespalib::CpuUsage::Category> cpu_category) override; void visitThreads(ThreadVisitor&) const override; diff --git a/storage/src/vespa/storageframework/generic/component/component.cpp b/storage/src/vespa/storageframework/generic/component/component.cpp index 1488c756b27..e221bac9b93 100644 --- a/storage/src/vespa/storageframework/generic/component/component.cpp +++ b/storage/src/vespa/storageframework/generic/component/component.cpp @@ -20,7 +20,7 @@ Component::close() { } -Component::Component(ComponentRegister& cr, vespalib::stringref name) +Component::Component(ComponentRegister& cr, std::string_view name) : _componentRegister(&cr), _name(name), _status(nullptr), @@ -89,7 +89,7 @@ Component::startThread(Runnable& runnable, vespalib::duration waitTime, vespalib } void -Component::requestShutdown(vespalib::stringref reason) +Component::requestShutdown(std::string_view reason) { _componentRegister->requestShutdown(reason); } diff --git a/storage/src/vespa/storageframework/generic/component/component.h b/storage/src/vespa/storageframework/generic/component/component.h index fc4b934e7e3..99dff7dfe43 100644 --- a/storage/src/vespa/storageframework/generic/component/component.h +++ b/storage/src/vespa/storageframework/generic/component/component.h @@ -101,7 +101,7 @@ class Component : private ManagedComponent public: using UP = std::unique_ptr<Component>; - Component(ComponentRegister&, vespalib::stringref name); + Component(ComponentRegister&, std::string_view name); ~Component() override; /** @@ -157,7 +157,7 @@ public: int ticksBeforeWait = 1, std::optional<vespalib::CpuUsage::Category> cpu_category = std::nullopt) const; - void requestShutdown(vespalib::stringref reason); + void requestShutdown(std::string_view reason); }; diff --git a/storage/src/vespa/storageframework/generic/component/componentregister.h b/storage/src/vespa/storageframework/generic/component/componentregister.h index 614b8a87d55..84ebd6049a1 100644 --- a/storage/src/vespa/storageframework/generic/component/componentregister.h +++ b/storage/src/vespa/storageframework/generic/component/componentregister.h @@ -21,7 +21,7 @@ struct ComponentRegister { virtual ~ComponentRegister() {} virtual void registerComponent(ManagedComponent&) = 0; - virtual void requestShutdown(vespalib::stringref reason) = 0; + virtual void requestShutdown(std::string_view reason) = 0; }; } diff --git a/storage/src/vespa/storageframework/generic/metric/metricregistrator.h b/storage/src/vespa/storageframework/generic/metric/metricregistrator.h index df774fa9864..0caab22ef71 100644 --- a/storage/src/vespa/storageframework/generic/metric/metricregistrator.h +++ b/storage/src/vespa/storageframework/generic/metric/metricregistrator.h @@ -24,7 +24,7 @@ struct MetricRegistrator { virtual ~MetricRegistrator() = default; virtual void registerMetric(metrics::Metric&) = 0; - virtual void registerUpdateHook(vespalib::stringref name, MetricUpdateHook& hook, vespalib::system_time::duration period) = 0; + virtual void registerUpdateHook(std::string_view name, MetricUpdateHook& hook, vespalib::system_time::duration period) = 0; }; } diff --git a/storage/src/vespa/storageframework/generic/status/htmlstatusreporter.cpp b/storage/src/vespa/storageframework/generic/status/htmlstatusreporter.cpp index 7aa6bd326c4..8fadf388768 100644 --- a/storage/src/vespa/storageframework/generic/status/htmlstatusreporter.cpp +++ b/storage/src/vespa/storageframework/generic/status/htmlstatusreporter.cpp @@ -4,7 +4,7 @@ namespace storage::framework { -HtmlStatusReporter::HtmlStatusReporter(vespalib::stringref id, vespalib::stringref name) +HtmlStatusReporter::HtmlStatusReporter(std::string_view id, std::string_view name) : StatusReporter(id, name) { } diff --git a/storage/src/vespa/storageframework/generic/status/htmlstatusreporter.h b/storage/src/vespa/storageframework/generic/status/htmlstatusreporter.h index 158c4d08011..5541feb8abe 100644 --- a/storage/src/vespa/storageframework/generic/status/htmlstatusreporter.h +++ b/storage/src/vespa/storageframework/generic/status/htmlstatusreporter.h @@ -21,7 +21,7 @@ namespace storage::framework { struct HtmlStatusReporter : public StatusReporter { - HtmlStatusReporter(vespalib::stringref id, vespalib::stringref name); + HtmlStatusReporter(std::string_view id, std::string_view name); virtual ~HtmlStatusReporter(); /** diff --git a/storage/src/vespa/storageframework/generic/status/httpurlpath.cpp b/storage/src/vespa/storageframework/generic/status/httpurlpath.cpp index bd3ba314028..4bade6d0047 100644 --- a/storage/src/vespa/storageframework/generic/status/httpurlpath.cpp +++ b/storage/src/vespa/storageframework/generic/status/httpurlpath.cpp @@ -44,7 +44,7 @@ HttpUrlPath::init(const vespalib::string &urlpath) vespalib::string sub(urlpath.substr(pos+1)); vespalib::StringTokenizer tokenizer(sub, "&", ""); for (uint32_t i=0, n=tokenizer.size(); i<n; ++i) { - const vespalib::string& s(tokenizer[i]); + vespalib::string s(tokenizer[i]); pos = s.find('='); if (pos == vespalib::string::npos) { _attributes[s] = ""; @@ -65,8 +65,7 @@ vespalib::string HttpUrlPath::getAttribute(const vespalib::string& id, const vespalib::string& defaultValue) const { - std::map<vespalib::string, vespalib::string>::const_iterator it - = _attributes.find(id); + auto it = _attributes.find(id); return (it == _attributes.end() ? defaultValue : it->second); } diff --git a/storage/src/vespa/storageframework/generic/status/statusreporter.cpp b/storage/src/vespa/storageframework/generic/status/statusreporter.cpp index 2626c4f2346..9c58018d038 100644 --- a/storage/src/vespa/storageframework/generic/status/statusreporter.cpp +++ b/storage/src/vespa/storageframework/generic/status/statusreporter.cpp @@ -5,7 +5,7 @@ namespace storage { namespace framework { -StatusReporter::StatusReporter(vespalib::stringref id, vespalib::stringref name) +StatusReporter::StatusReporter(std::string_view id, std::string_view name) : _id(id), _name(name) { diff --git a/storage/src/vespa/storageframework/generic/status/statusreporter.h b/storage/src/vespa/storageframework/generic/status/statusreporter.h index a7b5c5b4aaf..7ffbc0a4b3b 100644 --- a/storage/src/vespa/storageframework/generic/status/statusreporter.h +++ b/storage/src/vespa/storageframework/generic/status/statusreporter.h @@ -25,7 +25,7 @@ struct StatusReporter { using Capability = vespalib::net::tls::Capability; using CapabilitySet = vespalib::net::tls::CapabilitySet; - StatusReporter(vespalib::stringref id, vespalib::stringref name); + StatusReporter(std::string_view id, std::string_view name); virtual ~StatusReporter(); /** diff --git a/storage/src/vespa/storageframework/generic/status/statusreportermap.h b/storage/src/vespa/storageframework/generic/status/statusreportermap.h index 111070a28d6..00e42da9ee5 100644 --- a/storage/src/vespa/storageframework/generic/status/statusreportermap.h +++ b/storage/src/vespa/storageframework/generic/status/statusreportermap.h @@ -16,7 +16,7 @@ struct StatusReporter; struct StatusReporterMap { virtual ~StatusReporterMap() = default; - virtual const StatusReporter* getStatusReporter(vespalib::stringref id) = 0; + virtual const StatusReporter* getStatusReporter(std::string_view id) = 0; virtual std::vector<const StatusReporter*> getStatusReporters() = 0; }; diff --git a/storage/src/vespa/storageframework/generic/status/xmlstatusreporter.cpp b/storage/src/vespa/storageframework/generic/status/xmlstatusreporter.cpp index a1e205b4663..fbc16181fe1 100644 --- a/storage/src/vespa/storageframework/generic/status/xmlstatusreporter.cpp +++ b/storage/src/vespa/storageframework/generic/status/xmlstatusreporter.cpp @@ -6,8 +6,8 @@ namespace storage { namespace framework { -XmlStatusReporter::XmlStatusReporter(vespalib::stringref id, - vespalib::stringref name) +XmlStatusReporter::XmlStatusReporter(std::string_view id, + std::string_view name) : StatusReporter(id, name) { } @@ -48,7 +48,7 @@ XmlStatusReporter::reportStatus(std::ostream& out, out << "<?xml version=\"1.0\"?>\n"; vespalib::XmlOutputStream xos(out); initXmlReport(xos, path); - vespalib::stringref failure = reportXmlStatus(xos, path); + std::string_view failure = reportXmlStatus(xos, path); if (!failure.empty()) { using namespace vespalib::xml; xos << XmlContent("Failed to report XML status: " + failure); diff --git a/storage/src/vespa/storageframework/generic/status/xmlstatusreporter.h b/storage/src/vespa/storageframework/generic/status/xmlstatusreporter.h index 7a8486acda3..4ceb6c39050 100644 --- a/storage/src/vespa/storageframework/generic/status/xmlstatusreporter.h +++ b/storage/src/vespa/storageframework/generic/status/xmlstatusreporter.h @@ -23,7 +23,7 @@ namespace storage::framework { struct XmlStatusReporter : public StatusReporter { - XmlStatusReporter(vespalib::stringref id, vespalib::stringref name); + XmlStatusReporter(std::string_view id, std::string_view name); virtual ~XmlStatusReporter(); virtual void initXmlReport(vespalib::xml::XmlOutputStream&, diff --git a/storage/src/vespa/storageframework/generic/thread/thread.h b/storage/src/vespa/storageframework/generic/thread/thread.h index 9fab2be06d1..b0efb42aa44 100644 --- a/storage/src/vespa/storageframework/generic/thread/thread.h +++ b/storage/src/vespa/storageframework/generic/thread/thread.h @@ -32,7 +32,7 @@ class Thread : public ThreadHandle { public: using UP = std::unique_ptr<Thread>; - explicit Thread(vespalib::stringref id) : _id(id) {} + explicit Thread(std::string_view id) : _id(id) {} ~Thread() override = default; [[nodiscard]] virtual const vespalib::string& getId() const { return _id; } diff --git a/storage/src/vespa/storageframework/generic/thread/threadpool.h b/storage/src/vespa/storageframework/generic/thread/threadpool.h index 9a03424f580..d3f533f0271 100644 --- a/storage/src/vespa/storageframework/generic/thread/threadpool.h +++ b/storage/src/vespa/storageframework/generic/thread/threadpool.h @@ -32,7 +32,7 @@ struct ThreadPool { virtual ~ThreadPool() = default; virtual std::unique_ptr<Thread> - startThread(Runnable&, vespalib::stringref id, vespalib::duration waitTime, + startThread(Runnable&, std::string_view id, vespalib::duration waitTime, vespalib::duration maxProcessTime, int ticksBeforeWait, std::optional<vespalib::CpuUsage::Category> cpu_category) = 0; diff --git a/storage/src/vespa/storageframework/generic/thread/tickingthread.cpp b/storage/src/vespa/storageframework/generic/thread/tickingthread.cpp index 35d0f44010b..ea41a5b7fce 100644 --- a/storage/src/vespa/storageframework/generic/thread/tickingthread.cpp +++ b/storage/src/vespa/storageframework/generic/thread/tickingthread.cpp @@ -135,7 +135,7 @@ class TickingThreadPoolImpl final : public TickingThreadPool { }; public: - TickingThreadPoolImpl(vespalib::stringref name, vespalib::duration waitTime, + TickingThreadPoolImpl(std::string_view name, vespalib::duration waitTime, int ticksBeforeWait, vespalib::duration maxProcessTime) : _name(name), _waitTime(waitTime), @@ -160,7 +160,7 @@ public: ost << _name.c_str() << " thread " << i; _threads.push_back(std::shared_ptr<Thread>(pool.startThread( *_tickers[i], - ost.str(), + ost.view(), _waitTime, _maxProcessTime, _ticksBeforeWait, std::nullopt))); @@ -211,7 +211,7 @@ private: TickingThreadPool::UP TickingThreadPool::createDefault( - vespalib::stringref name, + std::string_view name, vespalib::duration waitTime, int ticksBeforeWait, vespalib::duration maxProcessTime) @@ -220,7 +220,7 @@ TickingThreadPool::createDefault( } TickingThreadPool::UP -TickingThreadPool::createDefault(vespalib::stringref name, vespalib::duration waitTime) +TickingThreadPool::createDefault(std::string_view name, vespalib::duration waitTime) { return createDefault(name, waitTime, 1, 5s); } diff --git a/storage/src/vespa/storageframework/generic/thread/tickingthread.h b/storage/src/vespa/storageframework/generic/thread/tickingthread.h index 03aea51ad7d..b08bc126aba 100644 --- a/storage/src/vespa/storageframework/generic/thread/tickingthread.h +++ b/storage/src/vespa/storageframework/generic/thread/tickingthread.h @@ -80,11 +80,11 @@ struct TickingThreadPool : public ThreadLock { // TODO STRIPE: Change waitTime default to 100ms when legacy mode is removed. static TickingThreadPool::UP createDefault( - vespalib::stringref name, + std::string_view name, vespalib::duration waitTime, int ticksBeforeWait, vespalib::duration maxProcessTime); - static TickingThreadPool::UP createDefault(vespalib::stringref name, vespalib::duration waitTime); + static TickingThreadPool::UP createDefault(std::string_view name, vespalib::duration waitTime); ~TickingThreadPool() override = default; |