@@ -701,7 +701,11 @@ CacheManager::StartWriteCache(RequestContext *request_context,
701701 RequestContext temp_request_context (trace_id + " _timeout_callback" );
702702 BlockMaskOffset succeed_block = 0 ;
703703 auto ec = this ->FinishWriteCache (
704- &temp_request_context, instance_id, write_session_id, succeed_block, std::move (write_location_info));
704+ &temp_request_context,
705+ instance_id,
706+ write_session_id,
707+ succeed_block,
708+ CacheManager::FinishWriteCacheOptions::WithWriteLocationInfo (std::move (write_location_info)));
705709 static_cast <void >(ec);
706710 });
707711 KVCM_METRICS_COLLECTOR_CHRONO_MARK_END (service_metrics_collector, PutWriteLocationManager);
@@ -723,14 +727,13 @@ CacheManager::FinishWriteCache(RequestContext *request_context,
723727 const std::string &instance_id,
724728 const std::string &write_session_id,
725729 const BlockMask &success_block_mask,
726- std::unique_ptr<WriteLocationManager::WriteLocationInfo> write_location_info_internal,
727- const std::vector<int64_t > &checksums) {
730+ CacheManager::FinishWriteCacheOptions options) {
728731 SPAN_TRACER (request_context);
729732 const std::string &trace_id = request_context->trace_id ();
730733 auto *service_metrics_collector = dynamic_cast <ServiceMetricsCollector *>(request_context->metrics_collector ());
731734 WriteLocationManager::WriteLocationInfo location_info;
732- if (write_location_info_internal != nullptr ) {
733- location_info = std::move (*write_location_info_internal);
735+ if (options. write_location_info_internal != nullptr ) {
736+ location_info = std::move (*options. write_location_info_internal );
734737 } else if (!write_location_manager_->GetAndDelete (write_session_id, location_info)) {
735738 request_context->error_tracer ()->AddErrorMsg (" write_session_id has been deleted" );
736739 RETURN_IF_EC_NOT_OK_WITH_LOG (
@@ -746,12 +749,12 @@ CacheManager::FinishWriteCache(RequestContext *request_context,
746749 // checksums must be the same length as keys (full batch, not the success subset).
747750 // An empty vector means the client did not report any; existing CacheLocation
748751 // checksums are then preserved. Any length mismatch is treated as a client bug.
749- const bool has_checksums = !checksums.empty ();
750- if (has_checksums && checksums.size () != location_info.keys .size ()) {
752+ const bool has_checksums = !options. checksums .empty ();
753+ if (has_checksums && options. checksums .size () != location_info.keys .size ()) {
751754 RETURN_IF_EC_NOT_OK_WITH_LOG (WARN ,
752755 EC_BADARGS ,
753756 " checksums size (%zu) does not match keys size (%zu)" ,
754- checksums.size (),
757+ options. checksums .size (),
755758 location_info.keys .size ());
756759 }
757760
@@ -771,7 +774,7 @@ CacheManager::FinishWriteCache(RequestContext *request_context,
771774 MetaSearcher::LocationUpdateTask task{
772775 .location_id = location_info.location_ids [block_key_idx],
773776 .new_status = CacheLocationStatus::CLS_SERVING ,
774- .checksum = has_checksums ? checksums[block_key_idx] : int64_t {0 },
777+ .checksum = has_checksums ? options. checksums [block_key_idx] : int64_t {0 },
775778 };
776779 success_batch_update_tasks.push_back ({std::move (task)});
777780 } else {
0 commit comments