This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 4a8fa8c4c36 branch-3.0: [Optimize](TabletMeta) Reuse TabletSchema in
TabletMeta #46572 (#46686)
4a8fa8c4c36 is described below
commit 4a8fa8c4c360f8b40d04aa5eaac24a4d43f1af15
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Jan 13 21:28:09 2025 +0800
branch-3.0: [Optimize](TabletMeta) Reuse TabletSchema in TabletMeta #46572
(#46686)
Cherry-picked from #46572
Co-authored-by: lihangyu <[email protected]>
---
be/src/olap/tablet_meta.cpp | 18 +++++++++++++++++-
be/src/olap/tablet_meta.h | 2 ++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp
index 655da615f95..51e1eb38421 100644
--- a/be/src/olap/tablet_meta.cpp
+++ b/be/src/olap/tablet_meta.cpp
@@ -27,6 +27,7 @@
#include <time.h>
#include <cstdint>
+#include <memory>
#include <set>
#include <utility>
@@ -43,7 +44,9 @@
#include "olap/olap_define.h"
#include "olap/rowset/rowset.h"
#include "olap/rowset/rowset_meta_manager.h"
+#include "olap/tablet_fwd.h"
#include "olap/tablet_meta_manager.h"
+#include "olap/tablet_schema_cache.h"
#include "olap/utils.h"
#include "util/debug_points.h"
#include "util/mem_info.h"
@@ -101,6 +104,12 @@ TabletMetaSharedPtr TabletMeta::create(
request.time_series_compaction_level_threshold,
inverted_index_file_storage_format);
}
+TabletMeta::~TabletMeta() {
+ if (_handle) {
+ TabletSchemaCache::instance()->release(_handle);
+ }
+}
+
TabletMeta::TabletMeta()
: _tablet_uid(0, 0),
_schema(new TabletSchema),
@@ -622,7 +631,14 @@ void TabletMeta::init_from_pb(const TabletMetaPB&
tablet_meta_pb) {
}
// init _schema
- _schema->init_from_pb(tablet_meta_pb.schema());
+ TabletSchemaSPtr schema = std::make_shared<TabletSchema>();
+ schema->init_from_pb(tablet_meta_pb.schema());
+ if (_handle) {
+ TabletSchemaCache::instance()->release(_handle);
+ }
+ auto pair = TabletSchemaCache::instance()->insert(schema->to_key());
+ _handle = pair.first;
+ _schema = pair.second;
if (tablet_meta_pb.has_enable_unique_key_merge_on_write()) {
_enable_unique_key_merge_on_write =
tablet_meta_pb.enable_unique_key_merge_on_write();
diff --git a/be/src/olap/tablet_meta.h b/be/src/olap/tablet_meta.h
index 550c478694f..ef4dbfba44c 100644
--- a/be/src/olap/tablet_meta.h
+++ b/be/src/olap/tablet_meta.h
@@ -100,6 +100,7 @@ public:
const std::unordered_map<uint32_t, uint32_t>&
col_ordinal_to_unique_id);
TabletMeta();
+ ~TabletMeta() override;
TabletMeta(int64_t table_id, int64_t partition_id, int64_t tablet_id,
int64_t replica_id,
int32_t schema_hash, int32_t shard_id, const TTabletSchema&
tablet_schema,
uint32_t next_unique_id,
@@ -324,6 +325,7 @@ private:
// the reference of _schema may use in tablet, so here need keep
// the lifetime of tablemeta and _schema is same with tablet
TabletSchemaSPtr _schema;
+ Cache::Handle* _handle = nullptr;
std::vector<RowsetMetaSharedPtr> _rs_metas;
// This variable _stale_rs_metas is used to record these rowsets‘ meta
which are be compacted.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]