diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-09-04 21:28:42 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-09-04 21:28:42 +0000 |
commit | f100b75a98be3f7a60b6f2d944b2281a2423bf1c (patch) | |
tree | a091508dd6e885ea388f13f0a26586cf7baf5753 | |
parent | 0f336eff19a696488acf8009525a4968d9c95fe6 (diff) |
Use faster lookup interface.
3 files changed, 19 insertions, 4 deletions
diff --git a/storage/src/vespa/storage/distributor/operations/external/putoperation.cpp b/storage/src/vespa/storage/distributor/operations/external/putoperation.cpp index e7832fd19e5..c7f858de608 100644 --- a/storage/src/vespa/storage/distributor/operations/external/putoperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/external/putoperation.cpp @@ -70,7 +70,7 @@ PutOperation::insertDatabaseEntryAndScheduleCreateBucket(const OperationTargetLi _op_ctx.distributor_config().max_activation_inhibited_out_of_sync_groups()); LOG(debug, "Active copies for bucket %s: %s", entry.getBucketId().toString().c_str(), active.toString().c_str()); for (uint32_t i=0; i<active.size(); ++i) { - BucketCopy copy(*entry->getNode(active[i].nodeIndex())); + BucketCopy copy(entry->getNodeRef(active[i].entryIndex())); copy.setActive(true); entry->updateNode(copy); } diff --git a/storage/src/vespa/storage/distributor/operations/idealstate/removebucketoperation.cpp b/storage/src/vespa/storage/distributor/operations/idealstate/removebucketoperation.cpp index 7bec6bbe53a..6f9a29f126f 100644 --- a/storage/src/vespa/storage/distributor/operations/idealstate/removebucketoperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/idealstate/removebucketoperation.cpp @@ -20,8 +20,7 @@ RemoveBucketOperation::onStartInternal(DistributorStripeMessageSender& sender) BucketDatabase::Entry entry = _bucketSpace->getBucketDatabase().get(getBucketId()); - for (uint32_t i = 0; i < getNodes().size(); ++i) { - uint16_t node = getNodes()[i]; + for (unsigned short node : getNodes()) { const BucketCopy* copy(entry->getNode(node)); if (!copy) { LOG(debug, "Node %u was removed between scheduling remove operation and starting it; not sending DeleteBucket to it", node); diff --git a/storage/src/vespa/storage/distributor/statecheckers.cpp b/storage/src/vespa/storage/distributor/statecheckers.cpp index 17b1549ccc0..c26a5bc1287 100644 --- a/storage/src/vespa/storage/distributor/statecheckers.cpp +++ b/storage/src/vespa/storage/distributor/statecheckers.cpp @@ -134,6 +134,22 @@ JoinBucketsStateChecker::isFirstSibling(const document::BucketId& bucketId) namespace { using ConstNodesRef = IdealServiceLayerNodesBundle::ConstNodesRef; +using Node2Index = IdealServiceLayerNodesBundle::Node2Index; + +bool +equalNodeSet(const Node2Index & node2Index, ConstNodesRef idealState, const BucketDatabase::Entry& dbEntry) +{ + if (idealState.size() != dbEntry->getNodeCount()) { + return false; + } + for (uint16_t i = 0; i < dbEntry->getNodeCount(); i++) { + const BucketCopy & info = dbEntry->getNodeRef(i); + if ( ! node2Index.lookup(info.getNode()).valid() ) { + return false; + } + } + return true; +} bool equalNodeSet(ConstNodesRef idealState, const BucketDatabase::Entry& dbEntry) @@ -154,7 +170,7 @@ equalNodeSet(ConstNodesRef idealState, const BucketDatabase::Entry& dbEntry) bool bucketAndSiblingReplicaLocationsEqualIdealState(const StateChecker::Context& context) { - if (!equalNodeSet(context.idealState(), context.entry)) { + if (!equalNodeSet(context.idealStateBundle.nonretired_or_maintenance_to_index(), context.idealState(), context.entry)) { return false; } std::vector<uint16_t> siblingIdealState = context.distribution.getIdealStorageNodes(context.systemState, context.siblingBucket); |