This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 4737aff  [Memory Engine] Make Tablet extensible (#3431)
4737aff is described below

commit 4737aff8fced7e5fa5c9f03d83f72188acf49834
Author: Binglin Chang <decst...@gmail.com>
AuthorDate: Fri May 1 21:21:09 2020 +0800

    [Memory Engine] Make Tablet extensible (#3431)
    
    Adding a new storage engine, we need to make an extensible tablet 
interface, so olap/StorageEngine can support and manage new tablet types.
    
    To start, this commit creates a class BaseTablet and make Tablet and new 
MemTablet inherit
    this base class, some common fields & methods are moved to BaseTablet 
class, which fields
    and methods belong to base/old class is not finalized yet, it will change 
as the project evolves.
    
    Fix #3384
---
 be/CMakeLists.txt                 |   1 +
 be/src/olap/CMakeLists.txt        |   2 +
 be/src/olap/base_tablet.cpp       |  43 ++++++++++++
 be/src/olap/base_tablet.h         | 137 ++++++++++++++++++++++++++++++++++++++
 be/src/olap/memory/CMakeLists.txt |  26 ++++++++
 be/src/olap/memory/mem_tablet.cpp |  22 ++++++
 be/src/olap/memory/mem_tablet.h   |  39 +++++++++++
 be/src/olap/tablet.cpp            |  15 +----
 be/src/olap/tablet.h              |  87 +-----------------------
 9 files changed, 273 insertions(+), 99 deletions(-)

diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt
index 8a56448..fa0b966 100644
--- a/be/CMakeLists.txt
+++ b/be/CMakeLists.txt
@@ -363,6 +363,7 @@ set(DORIS_LINK_LIBS
     Exec
     Exprs
     Gutil
+    Memory
     Olap
     Rowset
     OlapFs
diff --git a/be/src/olap/CMakeLists.txt b/be/src/olap/CMakeLists.txt
index cb1e7ec..3ade4c0 100644
--- a/be/src/olap/CMakeLists.txt
+++ b/be/src/olap/CMakeLists.txt
@@ -23,10 +23,12 @@ set(EXECUTABLE_OUTPUT_PATH "${BUILD_DIR}/src/olap")
 
 add_subdirectory(rowset)
 add_subdirectory(fs)
+add_subdirectory(memory)
 
 add_library(Olap STATIC
     aggregate_func.cpp
     base_compaction.cpp
+    base_tablet.cpp
     bloom_filter.hpp
     bloom_filter_reader.cpp
     bloom_filter_writer.cpp
diff --git a/be/src/olap/base_tablet.cpp b/be/src/olap/base_tablet.cpp
new file mode 100644
index 0000000..41aa93a
--- /dev/null
+++ b/be/src/olap/base_tablet.cpp
@@ -0,0 +1,43 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include "base_tablet.h"
+
+namespace doris {
+
+BaseTablet::BaseTablet(TabletMetaSharedPtr tablet_meta, DataDir* data_dir) :
+        _state(tablet_meta->tablet_state()),
+        _tablet_meta(tablet_meta),
+        _schema(tablet_meta->tablet_schema()),
+        _data_dir(data_dir) {
+}
+
+BaseTablet::~BaseTablet() {
+}
+
+
+OLAPStatus BaseTablet::set_tablet_state(TabletState state) {
+    if (_tablet_meta->tablet_state() == TABLET_SHUTDOWN && state != 
TABLET_SHUTDOWN) {
+        LOG(WARNING) << "could not change tablet state from shutdown to " << 
state;
+        return OLAP_ERR_META_INVALID_ARGUMENT;
+    }
+    _tablet_meta->set_tablet_state(state);
+    _state = state;
+    return OLAP_SUCCESS;
+}
+
+} /* namespace doris */
diff --git a/be/src/olap/base_tablet.h b/be/src/olap/base_tablet.h
new file mode 100644
index 0000000..e680e07
--- /dev/null
+++ b/be/src/olap/base_tablet.h
@@ -0,0 +1,137 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#ifndef DORIS_BE_SRC_OLAP_BASE_TABLET_H
+#define DORIS_BE_SRC_OLAP_BASE_TABLET_H
+
+#include <memory>
+#include "olap/olap_define.h"
+#include "olap/tablet_meta.h"
+#include "olap/utils.h"
+
+namespace doris {
+
+// Base class for all tablet classes, currently only olap/Tablet and
+// olap/memory/MemTablet.
+// The fields and methods in this class is not final, it will change as memory
+// storage engine evolves.
+class BaseTablet : public std::enable_shared_from_this<BaseTablet> {
+public:
+    BaseTablet(TabletMetaSharedPtr tablet_meta, DataDir* data_dir);
+    virtual ~BaseTablet();
+
+    inline DataDir* data_dir() const;
+    std::string tablet_path() const;
+
+    TabletState tablet_state() const { return _state; }
+    OLAPStatus set_tablet_state(TabletState state);
+
+    // Property encapsulated in TabletMeta
+    inline const TabletMetaSharedPtr tablet_meta();
+
+    inline TabletUid tablet_uid() const;
+    inline int64_t table_id() const;
+    // Returns a string can be used to uniquely identify a tablet.
+    // The result string will often be printed to the log.
+    inline const std::string full_name() const;
+    inline int64_t partition_id() const;
+    inline int64_t tablet_id() const;
+    inline int32_t schema_hash() const;
+    inline int16_t shard_id();
+    inline const int64_t creation_time() const;
+    inline void set_creation_time(int64_t creation_time);
+    inline bool equal(int64_t tablet_id, int32_t schema_hash);
+
+    // propreties encapsulated in TabletSchema
+    inline const TabletSchema& tablet_schema() const;
+
+protected:
+    TabletState _state;
+    TabletMetaSharedPtr _tablet_meta;
+    TabletSchema _schema;
+
+    DataDir* _data_dir;
+    std::string _tablet_path;
+
+private:
+    DISALLOW_COPY_AND_ASSIGN(BaseTablet);
+};
+
+
+inline DataDir* BaseTablet::data_dir() const {
+    return _data_dir;
+}
+
+inline string BaseTablet::tablet_path() const {
+    return _tablet_path;
+}
+
+inline const TabletMetaSharedPtr BaseTablet::tablet_meta() {
+    return _tablet_meta;
+}
+
+inline TabletUid BaseTablet::tablet_uid() const {
+    return _tablet_meta->tablet_uid();
+}
+
+inline int64_t BaseTablet::table_id() const {
+    return _tablet_meta->table_id();
+}
+
+inline const std::string BaseTablet::full_name() const {
+    std::stringstream ss;
+    ss << _tablet_meta->tablet_id()
+       << "." << _tablet_meta->schema_hash()
+       << "." << _tablet_meta->tablet_uid().to_string();
+    return ss.str();
+}
+
+inline int64_t BaseTablet::partition_id() const {
+    return _tablet_meta->partition_id();
+}
+
+inline int64_t BaseTablet::tablet_id() const {
+    return _tablet_meta->tablet_id();
+}
+
+inline int32_t BaseTablet::schema_hash() const {
+    return _tablet_meta->schema_hash();
+}
+
+inline int16_t BaseTablet::shard_id() {
+    return _tablet_meta->shard_id();
+}
+
+inline const int64_t BaseTablet::creation_time() const {
+    return _tablet_meta->creation_time();
+}
+
+inline void BaseTablet::set_creation_time(int64_t creation_time) {
+    _tablet_meta->set_creation_time(creation_time);
+}
+
+inline bool BaseTablet::equal(int64_t id, int32_t hash) {
+    return (tablet_id() == id) && (schema_hash() == hash);
+}
+
+inline const TabletSchema& BaseTablet::tablet_schema() const {
+    return _schema;
+}
+
+} /* namespace doris */
+
+#endif /* DORIS_BE_SRC_OLAP_BASE_TABLET_H */
diff --git a/be/src/olap/memory/CMakeLists.txt 
b/be/src/olap/memory/CMakeLists.txt
new file mode 100644
index 0000000..7b98444
--- /dev/null
+++ b/be/src/olap/memory/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# where to put generated libraries
+set(LIBRARY_OUTPUT_PATH "${BUILD_DIR}/src/olap/memory")
+
+# where to put generated binaries
+set(EXECUTABLE_OUTPUT_PATH "${BUILD_DIR}/src/olap/memory")
+  
+add_library(Memory STATIC
+    mem_tablet.cpp
+)
diff --git a/be/src/olap/memory/mem_tablet.cpp 
b/be/src/olap/memory/mem_tablet.cpp
new file mode 100644
index 0000000..9137c15
--- /dev/null
+++ b/be/src/olap/memory/mem_tablet.cpp
@@ -0,0 +1,22 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include "olap/memory/mem_tablet.h"
+
+namespace doris {
+
+} /* namespace doris */
diff --git a/be/src/olap/memory/mem_tablet.h b/be/src/olap/memory/mem_tablet.h
new file mode 100644
index 0000000..9fd1312
--- /dev/null
+++ b/be/src/olap/memory/mem_tablet.h
@@ -0,0 +1,39 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#ifndef DORIS_BE_SRC_MEMORY_MEM_TABLET_H_
+#define DORIS_BE_SRC_MEMORY_MEM_TABLET_H_
+
+#include "olap/base_tablet.h"
+
+namespace doris {
+
+// Tablet class for memory-optimized storage engine.
+//
+// It stores all its data in-memory, and is designed for tables with
+// frequent updates.
+//
+// TODO: This is just a skeleton, will add implementation in the future.
+class MemTablet : public BaseTablet {
+
+private:
+    DISALLOW_COPY_AND_ASSIGN(MemTablet);
+};
+
+} /* namespace doris */
+
+#endif /* DORIS_BE_SRC_MEMORY_MEM_TABLET_H_ */
diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp
index 5119be0..04ce8db 100644
--- a/be/src/olap/tablet.cpp
+++ b/be/src/olap/tablet.cpp
@@ -62,10 +62,7 @@ void Tablet::_gen_tablet_path() {
 }
 
 Tablet::Tablet(TabletMetaSharedPtr tablet_meta, DataDir* data_dir) :
-        _state(tablet_meta->tablet_state()),
-        _tablet_meta(tablet_meta),
-        _schema(tablet_meta->tablet_schema()),
-        _data_dir(data_dir),
+        BaseTablet(tablet_meta, data_dir),
         _is_bad(false),
         _last_cumu_compaction_failure_millis(0),
         _last_base_compaction_failure_millis(0),
@@ -118,16 +115,6 @@ OLAPStatus Tablet::init() {
     return _init_once.call([this] { return _init_once_action(); });
 }
 
-OLAPStatus Tablet::set_tablet_state(TabletState state) {
-    if (_tablet_meta->tablet_state() == TABLET_SHUTDOWN && state != 
TABLET_SHUTDOWN) {
-        LOG(WARNING) << "could not change tablet state from shutdown to " << 
state;
-        return OLAP_ERR_META_INVALID_ARGUMENT;
-    }
-    _tablet_meta->set_tablet_state(state);
-    _state = state;
-    return OLAP_SUCCESS;
-}
-
 // should save tablet meta to remote meta store
 // if it's a primary replica
 void Tablet::save_meta() {
diff --git a/be/src/olap/tablet.h b/be/src/olap/tablet.h
index 8cb6565..f8746f8 100644
--- a/be/src/olap/tablet.h
+++ b/be/src/olap/tablet.h
@@ -35,6 +35,7 @@
 #include "olap/rowset/rowset_reader.h"
 #include "olap/tablet_meta.h"
 #include "olap/utils.h"
+#include "olap/base_tablet.h"
 #include "util/once.h"
 
 namespace doris {
@@ -45,7 +46,7 @@ class TabletMeta;
 
 using TabletSharedPtr = std::shared_ptr<Tablet>;
 
-class Tablet : public std::enable_shared_from_this<Tablet> {
+class Tablet : public BaseTablet {
 public:
     static TabletSharedPtr create_tablet_from_meta(TabletMetaSharedPtr 
tablet_meta,
                                                    DataDir* data_dir = 
nullptr);
@@ -57,44 +58,23 @@ public:
 
     bool is_used();
 
-    inline DataDir* data_dir() const;
     void register_tablet_into_dir();
     void deregister_tablet_from_dir();
 
-    std::string tablet_path() const;
-
-    TabletState tablet_state() const { return _state; }
-    OLAPStatus set_tablet_state(TabletState state);
-
-    // Property encapsulated in TabletMeta
-    inline const TabletMetaSharedPtr tablet_meta();
     void save_meta();
     // Used in clone task, to update local meta when finishing a clone job
     OLAPStatus revise_tablet_meta(const std::vector<RowsetMetaSharedPtr>& 
rowsets_to_clone,
                                   const std::vector<Version>& 
versions_to_delete);
 
-    inline TabletUid tablet_uid() const;
-    inline int64_t table_id() const;
-    // Returns a string can be used to uniquely identify a tablet.
-    // The result string will often be printed to the log.
-    inline const std::string full_name() const;
-    inline int64_t partition_id() const;
-    inline int64_t tablet_id() const;
-    inline int32_t schema_hash() const;
-    inline int16_t shard_id();
-    inline const int64_t creation_time() const;
-    inline void set_creation_time(int64_t creation_time);
     inline const int64_t cumulative_layer_point() const;
     inline void set_cumulative_layer_point(int64_t new_point);
 
-    inline bool equal(int64_t tablet_id, int32_t schema_hash);
     inline size_t tablet_footprint(); // disk space occupied by tablet
     inline size_t num_rows();
     inline int version_count() const;
     inline Version max_version() const;
 
     // propreties encapsulated in TabletSchema
-    inline const TabletSchema& tablet_schema() const;
     inline KeysType keys_type() const;
     inline size_t num_columns() const;
     inline size_t num_null_columns() const;
@@ -261,12 +241,7 @@ private:
 
 private:
     static const int64_t kInvalidCumulativePoint = -1;
-    TabletState _state;
-    TabletMetaSharedPtr _tablet_meta;
-    TabletSchema _schema;
 
-    DataDir* _data_dir;
-    std::string _tablet_path;
     RowsetGraph _rs_graph;
 
     DorisCallOnce<OLAPStatus> _init_once;
@@ -319,10 +294,6 @@ inline bool Tablet::is_used() {
     return !_is_bad && _data_dir->is_used();
 }
 
-inline DataDir* Tablet::data_dir() const {
-    return _data_dir;
-}
-
 inline void Tablet::register_tablet_into_dir() {
     _data_dir->register_tablet(this);
 }
@@ -331,53 +302,6 @@ inline void Tablet::deregister_tablet_from_dir() {
     _data_dir->deregister_tablet(this);
 }
 
-inline string Tablet::tablet_path() const {
-    return _tablet_path;
-}
-
-inline const TabletMetaSharedPtr Tablet::tablet_meta() {
-    return _tablet_meta;
-}
-
-inline TabletUid Tablet::tablet_uid() const {
-    return _tablet_meta->tablet_uid();
-}
-
-inline int64_t Tablet::table_id() const {
-    return _tablet_meta->table_id();
-}
-
-inline const std::string Tablet::full_name() const {
-    std::stringstream ss;
-    ss << _tablet_meta->tablet_id()
-       << "." << _tablet_meta->schema_hash()
-       << "." << _tablet_meta->tablet_uid().to_string();
-    return ss.str();
-}
-
-inline int64_t Tablet::partition_id() const {
-    return _tablet_meta->partition_id();
-}
-
-inline int64_t Tablet::tablet_id() const {
-    return _tablet_meta->tablet_id();
-}
-
-inline int32_t Tablet::schema_hash() const {
-    return _tablet_meta->schema_hash();
-}
-
-inline int16_t Tablet::shard_id() {
-    return _tablet_meta->shard_id();
-}
-
-inline const int64_t Tablet::creation_time() const {
-    return _tablet_meta->creation_time();
-}
-
-inline void Tablet::set_creation_time(int64_t creation_time) {
-    _tablet_meta->set_creation_time(creation_time);
-}
 
 inline const int64_t Tablet::cumulative_layer_point() const {
     return _cumulative_point;
@@ -387,9 +311,6 @@ inline void Tablet::set_cumulative_layer_point(int64_t 
new_point) {
     _cumulative_point = new_point;
 }
 
-inline bool Tablet::equal(int64_t id, int32_t hash) {
-    return (tablet_id() == id) && (schema_hash() == hash);
-}
 
 // TODO(lingbin): Why other methods that need to get information from 
_tablet_meta
 // are not locked, here needs a comment to explain.
@@ -413,10 +334,6 @@ inline Version Tablet::max_version() const {
     return _tablet_meta->max_version();
 }
 
-inline const TabletSchema& Tablet::tablet_schema() const {
-    return _schema;
-}
-
 inline KeysType Tablet::keys_type() const {
     return _schema.keys_type();
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to