@@ -387,6 +387,16 @@ ntp_archiver::ntp_archiver(
387
387
}
388
388
}
389
389
390
+ archival_stm_fence ntp_archiver::emit_rw_fence () {
391
+ return {
392
+ .read_write_fence
393
+ = _parent.archival_meta_stm ()->manifest ().get_applied_offset (),
394
+ // Only use the rw-fence if the feature is enabled which requires
395
+ // major version upgrade.
396
+ .emit_rw_fence_cmd = emit_read_write_fence (_feature_table),
397
+ };
398
+ }
399
+
390
400
void ntp_archiver::log_collected_traces () noexcept {
391
401
try {
392
402
_rtclog.bypass_tracing ([this ] {
@@ -1053,13 +1063,7 @@ ss::future<> ntp_archiver::upload_until_term_change_legacy() {
1053
1063
std::optional<batch_result> result;
1054
1064
auto track_paused = _probe->register_archiver_on_hold (uploads_paused);
1055
1065
if (!uploads_paused) {
1056
- result = co_await upload_next_candidates (
1057
- archival_stm_fence{
1058
- .read_write_fence = fence,
1059
- // Only use the rw-fence if the feature is enabled which
1060
- // requires major version upgrade.
1061
- .emit_rw_fence_cmd = emit_read_write_fence (_feature_table),
1062
- });
1066
+ result = co_await upload_next_candidates (emit_rw_fence ());
1063
1067
}
1064
1068
if (result.has_value ()) {
1065
1069
auto [compacted_upload_result, non_compacted_upload_result]
@@ -2687,13 +2691,7 @@ ss::future<> ntp_archiver::apply_archive_retention() {
2687
2691
co_return ;
2688
2692
}
2689
2693
2690
- archival_stm_fence fence = {
2691
- .read_write_fence
2692
- = _parent.archival_meta_stm ()->manifest ().get_applied_offset (),
2693
- // Only use the rw-fence if the feature is enabled which requires
2694
- // major version upgrade.
2695
- .emit_rw_fence_cmd = emit_read_write_fence (_feature_table),
2696
- };
2694
+ auto fence = emit_rw_fence ();
2697
2695
2698
2696
std::optional<size_t > retention_bytes = ntp_conf.retention_bytes ();
2699
2697
std::optional<std::chrono::milliseconds> retention_ms
@@ -2761,13 +2759,7 @@ ss::future<> ntp_archiver::garbage_collect_archive() {
2761
2759
if (!may_begin_uploads ()) {
2762
2760
co_return ;
2763
2761
}
2764
- archival_stm_fence fence = {
2765
- .read_write_fence
2766
- = _parent.archival_meta_stm ()->manifest ().get_applied_offset (),
2767
- // Only use the rw-fence if the feature is enabled which requires
2768
- // major version upgrade.
2769
- .emit_rw_fence_cmd = emit_read_write_fence (_feature_table),
2770
- };
2762
+ auto fence = emit_rw_fence ();
2771
2763
auto backlog = co_await _manifest_view->get_retention_backlog ();
2772
2764
if (backlog.has_failure ()) {
2773
2765
if (backlog.error () == cloud_storage::error_outcome::shutting_down) {
@@ -2996,7 +2988,7 @@ ss::future<> ntp_archiver::apply_spillover() {
2996
2988
if (!may_begin_uploads ()) {
2997
2989
co_return ;
2998
2990
}
2999
-
2991
+ archival_stm_fence fence = emit_rw_fence ();
3000
2992
const auto manifest_upload_timeout = _conf->manifest_upload_timeout ();
3001
2993
const auto manifest_upload_backoff = _conf->cloud_storage_initial_backoff ();
3002
2994
@@ -3034,6 +3026,12 @@ ss::future<> ntp_archiver::apply_spillover() {
3034
3026
auto tail = [&]() {
3035
3027
cloud_storage::spillover_manifest tail (_ntp, _rev);
3036
3028
for (const auto & meta : manifest ()) {
3029
+ vlog (
3030
+ _rtclog.trace ,
3031
+ " Adding segment {} to the spillover manifest that starts at "
3032
+ " {}" ,
3033
+ meta,
3034
+ tail.get_start_offset ().value_or (model::offset{}));
3037
3035
tail.add (meta);
3038
3036
// No performance impact since all writes here are
3039
3037
// sequential.
@@ -3090,6 +3088,13 @@ ss::future<> ntp_archiver::apply_spillover() {
3090
3088
auto deadline = ss::lowres_clock::now () + sync_timeout;
3091
3089
3092
3090
auto batch = _parent.archival_meta_stm ()->batch_start (deadline, _as);
3091
+ if (fence.emit_rw_fence_cmd ) {
3092
+ vlog (
3093
+ _rtclog.debug ,
3094
+ " spillover, read-write fence: {}" ,
3095
+ fence.read_write_fence );
3096
+ batch.read_write_fence (fence.read_write_fence );
3097
+ }
3093
3098
batch.spillover (spillover_meta);
3094
3099
if (manifest ().get_archive_start_offset () == model::offset{}) {
3095
3100
vlog (
@@ -3111,12 +3116,15 @@ ss::future<> ntp_archiver::apply_spillover() {
3111
3116
_rtclog.warn ,
3112
3117
" Failed to replicate spillover command: {}" ,
3113
3118
error.message ());
3119
+ break ;
3114
3120
} else {
3115
3121
vlog (
3116
3122
_rtclog.info ,
3117
3123
" Uploaded spillover manifest: {}" ,
3118
3124
tail.get_manifest_path (remote_path_provider ()));
3119
3125
}
3126
+ // Reset fence for the next iteration
3127
+ fence = emit_rw_fence ();
3120
3128
}
3121
3129
}
3122
3130
@@ -3212,13 +3220,7 @@ ss::future<> ntp_archiver::apply_retention() {
3212
3220
if (!may_begin_uploads ()) {
3213
3221
co_return ;
3214
3222
}
3215
- archival_stm_fence fence = {
3216
- .read_write_fence
3217
- = _parent.archival_meta_stm ()->manifest ().get_applied_offset (),
3218
- // Only use the rw-fence if the feature is enabled which requires
3219
- // major version upgrade.
3220
- .emit_rw_fence_cmd = emit_read_write_fence (_feature_table),
3221
- };
3223
+ auto fence = emit_rw_fence ();
3222
3224
auto arch_so = manifest ().get_archive_start_offset ();
3223
3225
auto stm_so = manifest ().get_start_offset ();
3224
3226
if (arch_so != model::offset{} && arch_so != stm_so) {
@@ -3311,13 +3313,7 @@ ss::future<> ntp_archiver::garbage_collect() {
3311
3313
co_return ;
3312
3314
}
3313
3315
3314
- archival_stm_fence fence = {
3315
- .read_write_fence
3316
- = _parent.archival_meta_stm ()->manifest ().get_applied_offset (),
3317
- // Only use the rw-fence if the feature is enabled which requires
3318
- // major version upgrade.
3319
- .emit_rw_fence_cmd = emit_read_write_fence (_feature_table),
3320
- };
3316
+ archival_stm_fence fence = emit_rw_fence ();
3321
3317
3322
3318
// If we are about to delete segments, we must ensure that the remote
3323
3319
// manifest is fully up to date, so that it is definitely not referring
@@ -3442,13 +3438,8 @@ ntp_archiver::find_reupload_candidate(
3442
3438
3443
3439
ssx::composite_abort_source cas{caller_as, _as};
3444
3440
3445
- archival_stm_fence rw_fence{
3446
- .read_write_fence
3447
- = _parent.archival_meta_stm ()->manifest ().get_applied_offset (),
3448
- // Only use the rw-fence if the feature is enabled which requires
3449
- // major version upgrade.
3450
- .emit_rw_fence_cmd = emit_read_write_fence (_feature_table),
3451
- };
3441
+ archival_stm_fence rw_fence = emit_rw_fence ();
3442
+
3452
3443
if (!may_begin_uploads ()) {
3453
3444
co_return find_reupload_candidate_result{};
3454
3445
}
0 commit comments