Skip to content

Commit 99de6cb

Browse files
dataroaringclaude
andcommitted
[refactor](read-uncommitted) Move uncommitted rowset registration out of set_txn_related_delete_bitmap
Registration is not related to delete bitmaps and should run for all table types, not just MoW. Extract to a separate register_uncommitted_rowset method and call it as step 7 in cloud_tablets_channel close flow. Also fixes a bug where MoW tablets with skip_writing_rowset_metadata would return early and skip registration. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8573fc1 commit 99de6cb

File tree

5 files changed

+32
-15
lines changed

5 files changed

+32
-15
lines changed

be/src/cloud/cloud_delta_writer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,8 @@ Status CloudDeltaWriter::set_txn_related_delete_bitmap() {
146146
return rowset_builder()->set_txn_related_delete_bitmap();
147147
}
148148

149+
void CloudDeltaWriter::register_uncommitted_rowset() {
150+
rowset_builder()->register_uncommitted_rowset();
151+
}
152+
149153
} // namespace doris

be/src/cloud/cloud_delta_writer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class CloudDeltaWriter final : public BaseDeltaWriter {
5252
Status commit_rowset();
5353

5454
Status set_txn_related_delete_bitmap();
55+
56+
void register_uncommitted_rowset();
57+
5558
std::shared_ptr<ResourceContext> resource_context() { return _resource_ctx; }
5659

5760
private:

be/src/cloud/cloud_rowset_builder.cpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -159,22 +159,24 @@ Status CloudRowsetBuilder::set_txn_related_delete_bitmap() {
159159
_req.txn_expiration, _partial_update_info);
160160
}
161161

162-
// Register uncommitted rowset for READ UNCOMMITTED visibility.
163-
// For MoW tablets, capture the already-computed delete bitmap.
164-
if (auto* registry = _engine.uncommitted_rowset_registry()) {
165-
auto entry = std::make_shared<UncommittedRowsetEntry>();
166-
entry->rowset = _rowset;
167-
entry->transaction_id = _req.txn_id;
168-
entry->partition_id = _req.partition_id;
169-
entry->tablet_id = _tablet->tablet_id();
170-
entry->unique_key_merge_on_write = _tablet->enable_unique_key_merge_on_write();
171-
if (entry->unique_key_merge_on_write && _delete_bitmap) {
172-
entry->committed_delete_bitmap = std::make_shared<DeleteBitmap>(*_delete_bitmap);
173-
}
174-
registry->register_rowset(std::move(entry));
175-
}
176-
177162
return Status::OK();
178163
}
164+
165+
void CloudRowsetBuilder::register_uncommitted_rowset() {
166+
auto* registry = _engine.uncommitted_rowset_registry();
167+
if (!registry || !_rowset) {
168+
return;
169+
}
170+
auto entry = std::make_shared<UncommittedRowsetEntry>();
171+
entry->rowset = _rowset;
172+
entry->transaction_id = _req.txn_id;
173+
entry->partition_id = _req.partition_id;
174+
entry->tablet_id = _tablet->tablet_id();
175+
entry->unique_key_merge_on_write = _tablet->enable_unique_key_merge_on_write();
176+
if (entry->unique_key_merge_on_write && _delete_bitmap) {
177+
entry->committed_delete_bitmap = std::make_shared<DeleteBitmap>(*_delete_bitmap);
178+
}
179+
registry->register_rowset(std::move(entry));
180+
}
179181
#include "common/compile_check_end.h"
180182
} // namespace doris

be/src/cloud/cloud_rowset_builder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ class CloudRowsetBuilder final : public BaseRowsetBuilder {
3939

4040
Status set_txn_related_delete_bitmap();
4141

42+
// Register uncommitted rowset for READ UNCOMMITTED visibility.
43+
void register_uncommitted_rowset();
44+
4245
void set_skip_writing_rowset_metadata(bool skip) { _skip_writing_rowset_metadata = skip; }
4346

4447
private:

be/src/cloud/cloud_tablets_channel.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,11 @@ Status CloudTabletsChannel::close(LoadChannel* parent, const PTabletWriterAddBlo
261261
it++;
262262
}
263263

264+
// 7. Register uncommitted rowsets for READ UNCOMMITTED visibility
265+
for (auto* writer : writers_to_commit) {
266+
writer->register_uncommitted_rowset();
267+
}
268+
264269
tablet_vec->Reserve(static_cast<int>(writers_to_commit.size()));
265270
for (auto* writer : writers_to_commit) {
266271
PTabletInfo* tablet_info = tablet_vec->Add();

0 commit comments

Comments
 (0)