gavinchou commented on code in PR #25921:
URL: https://github.com/apache/doris/pull/25921#discussion_r1386724187
##########
be/src/olap/tablet.cpp:
##########
@@ -1971,66 +1945,54 @@ void Tablet::reset_compaction(CompactionType
compaction_type) {
}
Status Tablet::create_initial_rowset(const int64_t req_version) {
- Status res = Status::OK();
if (req_version < 1) {
return Status::Error<CE_CMD_PARAMS_ERROR>(
"init version of tablet should at least 1. req.ver={}",
req_version);
}
Version version(0, req_version);
RowsetSharedPtr new_rowset;
- do {
- // there is no data in init rowset, so overlapping info is unknown.
- std::unique_ptr<RowsetWriter> rs_writer;
- RowsetWriterContext context;
- context.version = version;
- context.rowset_state = VISIBLE;
- context.segments_overlap = OVERLAP_UNKNOWN;
- context.tablet_schema = tablet_schema();
- context.newest_write_timestamp = UnixSeconds();
-
- if (!(res = create_rowset_writer(context, &rs_writer)).ok()) {
- LOG(WARNING) << "failed to init rowset writer for tablet " <<
tablet_id();
- break;
- }
-
- if (!(res = rs_writer->flush()).ok()) {
- LOG(WARNING) << "failed to flush rowset writer for tablet " <<
tablet_id();
- break;
- }
-
- if (!(res = rs_writer->build(new_rowset)).ok()) {
- LOG(WARNING) << "failed to build rowset for tablet " <<
tablet_id();
- break;
- }
-
- if (!(res = add_rowset(new_rowset)).ok()) {
- LOG(WARNING) << "failed to add rowset for tablet " << tablet_id();
- break;
- }
- } while (false);
-
- // Unregister index and delete files(index and data) if failed
- if (!res.ok()) {
- LOG(WARNING) << "fail to create initial rowset. res=" << res << "
version=" << req_version;
- StorageEngine::instance()->add_unused_rowset(new_rowset);
- return res;
- }
+ // there is no data in init rowset, so overlapping info is unknown.
+ RowsetWriterContext context;
+ context.version = version;
+ context.rowset_state = VISIBLE;
+ context.segments_overlap = OVERLAP_UNKNOWN;
+ context.tablet_schema = tablet_schema();
+ context.newest_write_timestamp = UnixSeconds();
+ auto rs_writer = DORIS_TRY(create_rowset_writer(context, false));
+ RETURN_IF_ERROR(rs_writer->flush());
+ RETURN_IF_ERROR(rs_writer->build(new_rowset));
+ RETURN_IF_ERROR(add_rowset(std::move(new_rowset)));
set_cumulative_layer_point(req_version + 1);
- return res;
+ return Status::OK();
}
-Status Tablet::create_vertical_rowset_writer(RowsetWriterContext& context,
- std::unique_ptr<RowsetWriter>*
rowset_writer) {
+Result<std::unique_ptr<RowsetWriter>>
Tablet::create_rowset_writer(RowsetWriterContext& context,
+ bool
vertical) {
context.rowset_id = StorageEngine::instance()->next_rowset_id();
_init_context_common_fields(context);
- return RowsetFactory::create_rowset_writer(context, true, rowset_writer);
+ std::unique_ptr<RowsetWriter> rowset_writer;
+ if (auto st = RowsetFactory::create_rowset_writer(context, vertical,
&rowset_writer); !st.ok())
+ [[unlikely]] {
+ return unexpected(std::move(st));
+ }
+ return rowset_writer;
}
-Status Tablet::create_rowset_writer(RowsetWriterContext& context,
- std::unique_ptr<RowsetWriter>*
rowset_writer) {
+Result<std::unique_ptr<RowsetWriter>> Tablet::create_pending_rowset_writer(
+ RowsetWriterContext& context, bool vertical) {
context.rowset_id = StorageEngine::instance()->next_rowset_id();
_init_context_common_fields(context);
- return RowsetFactory::create_rowset_writer(context, false, rowset_writer);
+ std::unique_ptr<RowsetWriter> rowset_writer;
+ if (vertical) {
Review Comment:
consider
```
struct RsMix : rowstwriter {
rs_guard; // expand rs_guard life span
};
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]