Skip to content

Commit 79e3b5a

Browse files
authored
Merge pull request #11 from amazon-mq/md/out-of-order-upload
manifest: Apply uploaded fragments to empty manifest in-order
2 parents dab6724 + 84720fb commit 79e3b5a

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/rabbitmq_stream_s3_log_manifest.erl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@
5353
uploaded_fragments = [] :: [#fragment_info{}],
5454
%% The next offset that should be uploaded.
5555
%% All offsets under this have been tiered without any "holes" in the
56-
%% remote log.
57-
next_tiered_offset :: osiris:offset() | undefined
56+
%% remote log. TODO: is zero the correct default here? What if the entire
57+
%% local log is truncated away?
58+
next_tiered_offset = 0 :: osiris:offset()
5859
}).
5960

6061
-record(manifest_writer, {
@@ -570,6 +571,9 @@ handle_cast(
570571
%% linear time.
571572
Uploaded1 = sort_infos([Info | Uploaded0]),
572573
{NTO, Pending, Finished} = split_uploaded_infos(NTO0, Uploaded1, []),
574+
?LOG_DEBUG("~b finished uploads, ~b pending, nto ~p -> ~p", [
575+
length(Finished), length(Pending), NTO0, NTO
576+
]),
573577
#{Dir := {Manifest0, UploadStatus0}} = Manifests0,
574578
{Manifest, UploadStatus, Tasks} = apply_infos(
575579
Finished, Manifest0, UploadStatus0, Tasks2, Dir
@@ -700,9 +704,7 @@ split_uploaded_infos(
700704
NextTieredOffset,
701705
[#fragment_info{offset = FirstOffset, next_offset = NextOffset} = Info | Rest],
702706
Acc
703-
) when
704-
NextTieredOffset =:= undefined orelse FirstOffset =:= NextTieredOffset
705-
->
707+
) when NextTieredOffset =:= FirstOffset ->
706708
split_uploaded_infos(NextOffset, Rest, [Info | Acc]);
707709
split_uploaded_infos(NextTieredOffset, PendingUploaded, Acc) ->
708710
{NextTieredOffset, PendingUploaded, lists:reverse(Acc)}.

0 commit comments

Comments
 (0)