diff --git a/deps/init/oceanbase.el7.aarch64.deps b/deps/init/oceanbase.el7.aarch64.deps index 29613b511..bca2d3c2b 100644 --- a/deps/init/oceanbase.el7.aarch64.deps +++ b/deps/init/oceanbase.el7.aarch64.deps @@ -17,7 +17,6 @@ repo=http://yum.tbsite.net/taobao/7/aarch64/test/ob-deploy/ devdeps-gtest-1.8.0-132022101316.el7.aarch64.rpm devdeps-isa-l-static-2.22.0-22022092915.el7.aarch64.rpm devdeps-libcurl-static-7.29.0-32022093010.el7.aarch64.rpm -devdeps-libunwind-static-1.6.2-222022100410.el7.aarch64.rpm devdeps-mariadb-connector-c-3.1.12-12022100422.el7.aarch64.rpm devdeps-libaio-0.3.112-12022092915.el7.aarch64.rpm devdeps-rapidjson-1.1.0-12022100410.el7.aarch64.rpm diff --git a/deps/init/oceanbase.el8.aarch64.deps b/deps/init/oceanbase.el8.aarch64.deps index 76baa2d73..f3f3ccc2e 100644 --- a/deps/init/oceanbase.el8.aarch64.deps +++ b/deps/init/oceanbase.el8.aarch64.deps @@ -12,7 +12,6 @@ repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/8/aarch64/ devdeps-gtest-1.8.0-132022101316.el8.aarch64.rpm devdeps-isa-l-static-2.22.0-22022092915.el8.aarch64.rpm devdeps-libcurl-static-7.29.0-32022093010.el8.aarch64.rpm -devdeps-libunwind-static-1.6.2-222022100410.el8.aarch64.rpm devdeps-mariadb-connector-c-3.1.12-12022100422.el8.aarch64.rpm devdeps-libaio-0.3.112-12022092915.el8.aarch64.rpm devdeps-rapidjson-1.1.0-12022100410.el8.aarch64.rpm diff --git a/deps/oblib/src/CMakeLists.txt b/deps/oblib/src/CMakeLists.txt index 9d58bb772..695bfd27f 100644 --- a/deps/oblib/src/CMakeLists.txt +++ b/deps/oblib/src/CMakeLists.txt @@ -121,7 +121,7 @@ target_link_libraries(oblib_base_base_base ${DEP_DIR}/lib/libssl.a ${DEP_DIR}/lib/libcrypto.a ${LGPL_DEPS} - ${DEP_DIR}/lib/libunwind.a + $<$:${DEP_DIR}/lib/libunwind.a> ${DEP_DIR}/lib/libz.a -L${DEP_DIR}/var/usr/lib64 -L${DEP_DIR}/var/usr/lib diff --git a/deps/oblib/src/lib/hash/ob_array_hash_map.h b/deps/oblib/src/lib/hash/ob_array_hash_map.h index 283d2e1df..b1dd1fc47 100644 --- a/deps/oblib/src/lib/hash/ob_array_hash_map.h +++ b/deps/oblib/src/lib/hash/ob_array_hash_map.h @@ -119,21 +119,6 @@ public: size_ = 0; } - int shrink_size(int64_t size) - { - LockGuard guard(lock_); - int ret = OB_SUCCESS; - if (size <= 0 || size > capacity_) { - ret = OB_INVALID_ARGUMENT; - COMMON_LOG(WARN, "invalid argument", K(size), K_(capacity)); - } else if (size * 2 <= capacity_) { - capacity_ = size * 2; - } else { - capacity_ = size; - } - return ret; - } - void print() const { COMMON_LOG(INFO, "array_hash dump begin:", K(this)); diff --git a/deps/oblib/src/lib/hash/ob_ext_iter_hashset.h b/deps/oblib/src/lib/hash/ob_ext_iter_hashset.h deleted file mode 100644 index 24a34b7a1..000000000 --- a/deps/oblib/src/lib/hash/ob_ext_iter_hashset.h +++ /dev/null @@ -1,307 +0,0 @@ -/** - * Copyright (c) 2021 OceanBase - * OceanBase CE is licensed under Mulan PubL v2. - * You can use this software according to the terms and conditions of the Mulan PubL v2. - * You may obtain a copy of Mulan PubL v2 at: - * http://license.coscl.org.cn/MulanPubL-2.0 - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PubL v2 for more details. - */ - -#ifndef OCEANBASE_LIB_HASH_OB_EXT_ITER_HASHSET_H__ -#define OCEANBASE_LIB_HASH_OB_EXT_ITER_HASHSET_H__ - -#include "lib/hash/ob_iteratable_hashset.h" // ObIteratableHashSet -#include "lib/utility/ob_print_utils.h" - -namespace oceanbase -{ -namespace common -{ -namespace hash -{ -template class ObExtIterHashSet; - -///////////////////////////////////// ObExtIterHashSet Iterator ///////////////////////////////////// -template -class ObExtIterHashSetConstIterator -{ -public: - typedef typename HashSet::const_key_ref_t const_key_ref_t; - typedef ObExtIterHashSetConstIterator SelfType; - typedef typename HashSet::HashSetBucket BucketType; - typedef typename HashSet::InnerHashSetIter InnerIter; - -public: - ObExtIterHashSetConstIterator(const HashSet *set, const BucketType *bucket, const InnerIter &iter) - : hash_set_(set), bucket_(bucket), iter_(iter) - {} - - ObExtIterHashSetConstIterator(const SelfType &other) - : hash_set_(other.hash_set_), bucket_(other.bucket_), iter_(other.iter_) - {} - - ~ObExtIterHashSetConstIterator() - {} - -public: - ObExtIterHashSetConstIterator &operator=(const SelfType &other) - { - if (this != &other) { - hash_set_ = other.hash_set_; - bucket_ = other.bucket_; - iter_ = other.iter_; - } - - return *this; - } - ObExtIterHashSetConstIterator &operator=(SelfType &&other) = default; - - bool operator==(const SelfType &other) const - { - return other.hash_set_ == hash_set_ && other.bucket_ == bucket_ && other.iter_ == iter_; - } - - bool operator!=(const SelfType &other) const - { - return other.hash_set_ != hash_set_ || other.bucket_ != bucket_ || other.iter_ != iter_; - } - - SelfType &operator++() - { - if (NULL == hash_set_ || NULL == bucket_) { - LIB_LOG(ERROR, "err hash set, iter or bucket", K(hash_set_), K(bucket_)); - } else { - // if current bucket is not null, fetch next one. - if (iter_ != bucket_->hash_set_.end()) { - ++iter_; - } - - // if reach end of current bucket, step to the next bucket. - if (iter_ == bucket_->hash_set_.end() && NULL != bucket_->next_) { - bucket_ = bucket_->next_; - iter_ = bucket_->hash_set_.begin(); - } - } - - return *this; - } - - const_key_ref_t operator*() const - { - if (NULL == hash_set_ || NULL == bucket_) { - LIB_LOG(ERROR, "err hash set, iter or bucket", K(hash_set_), K(bucket_)); - } - return *iter_; - } - -private: - const HashSet *hash_set_; - const BucketType *bucket_; - InnerIter iter_; -}; - -///////////////////////////////////// ObExtIterHashSet ///////////////////////////////////// - -template -class ObExtIterHashSet -{ -public: - typedef const K &const_key_ref_t; - typedef ObIteratableHashSet BaseHashSet; - typedef ObExtIterHashSet SelfType; - typedef ObExtIterHashSetConstIterator const_iterator_t; - typedef typename BaseHashSet::const_iterator_t InnerHashSetIter; - - struct HashSetBucket - { - BaseHashSet hash_set_; - HashSetBucket *next_; - - HashSetBucket() : hash_set_(), next_(NULL) {} - ~HashSetBucket() {} - void reset() - { - hash_set_.reset(); - next_ = NULL; - } - }; - -public: - explicit ObExtIterHashSet(Allocator &allocator); - virtual ~ObExtIterHashSet(); - -public: - /** - * @retval OB_SUCCESS insert successfully - * @retval OB_HASH_EXIST key exists - * @retval other ret failed - */ - int set_refactored(const K &key); - /** - * @retval OB_HASH_EXIST key exists - * @retval OB_HASH_NOT_EXIST key not exists - */ - int exist_refactored(const K &key) const { return is_exist_(key) ? OB_HASH_EXIST : OB_HASH_NOT_EXIST; } - - void reset(); - void clear() { reset(); } - - const_iterator_t begin() const - { - return const_iterator_t(this, &buckets_, buckets_.hash_set_.begin()); - } - - const_iterator_t end() const - { - return const_iterator_t(this, buckets_tail_, buckets_tail_->hash_set_.end()); - } - - int64_t count() const { return count_; } - -public: - DECLARE_TO_STRING; - -private: - bool is_exist_(const K &key) const; - bool is_full_() const { return count_ >= bucket_num_ * static_cast(N); } - int add_bucket_(); - -private: - int64_t count_; // count of object - int64_t bucket_num_; // count of bucket - Allocator &allocator_; // allocator - HashSetBucket buckets_; // bucket lists - HashSetBucket *buckets_tail_; // bucket lists tail - -private: - template - friend class ObExtIterHashSetConstIterator; - -private: - DISALLOW_COPY_AND_ASSIGN(ObExtIterHashSet); -}; - -template -ObExtIterHashSet::ObExtIterHashSet(Allocator &allocator) : - count_(0), - bucket_num_(1), - allocator_(allocator), - buckets_(), - buckets_tail_(&buckets_) -{} - -template -ObExtIterHashSet::~ObExtIterHashSet() -{ - reset(); -} - -template -int ObExtIterHashSet::set_refactored(const K &key) -{ - int ret = OB_SUCCESS; - bool exist = is_exist_(key); - - if (exist) { - ret = OB_HASH_EXIST; - } else if (is_full_() && OB_FAIL(add_bucket_())) { - LIB_LOG(WARN, "add_bucket_ fail", K(ret)); - } else { - // keep inserting successful - if (NULL == buckets_tail_) { - ret = OB_ERR_UNEXPECTED; - LIB_LOG(WARN, "err bucket tail", K(ret)); - } else if (OB_FAIL(buckets_tail_->hash_set_.set_refactored(key))) { - LIB_LOG(WARN, "set key into hash set fail", K(ret)); - } else { - count_++; - } - } - - return ret; -} - -template -bool ObExtIterHashSet::is_exist_(const K &key) const -{ - bool exist = false; - const HashSetBucket *item = &buckets_; - - while (! exist && NULL != item) { - if (OB_HASH_EXIST == item->hash_set_.exist_refactored(key)) { - exist = true; - break; - } else { - item = item->next_; - } - } - - return exist; -} - -template -int ObExtIterHashSet::add_bucket_() -{ - int ret = OB_SUCCESS; - HashSetBucket *bucket = (HashSetBucket *)allocator_.alloc(sizeof(HashSetBucket)); - if (NULL == bucket) { - LIB_LOG(WARN, "allocate memory for bucket fail", "bucket_size", sizeof(HashSetBucket)); - ret = OB_ALLOCATE_MEMORY_FAILED; - } else { - new(bucket) HashSetBucket(); - - bucket->next_ = NULL; - buckets_tail_->next_ = bucket; - buckets_tail_ = bucket; - - bucket_num_++; - - LIB_LOG(DEBUG, "add bucket", K(bucket_num_), K(count_), K(bucket)); - } - return ret; -} - -template -void ObExtIterHashSet::reset() -{ - HashSetBucket *bucket = buckets_.next_; - - while (NULL != bucket) { - HashSetBucket *next = bucket->next_; - bucket->~HashSetBucket(); - allocator_.free((void*)bucket); - - bucket = next; - } - bucket = NULL; - - buckets_.reset(); - buckets_tail_ = &buckets_; - bucket_num_ = 1; - count_ = 0; -} - -template -int64_t ObExtIterHashSet::to_string(char *buf, const int64_t buf_len) const -{ - int64_t pos = 0; - J_ARRAY_START(); - const_iterator_t beg = begin(); - for (const_iterator_t it = beg; - it != end(); - ++it) { - if (it != beg) { - J_COMMA(); - } - BUF_PRINTO(*it); - } - J_ARRAY_END(); - return pos; -} -} // namespace hash -} // namespace common -} // namespace oceanbase -#endif diff --git a/deps/oblib/src/lib/hash/ob_fixed_hash.h b/deps/oblib/src/lib/hash/ob_fixed_hash.h deleted file mode 100644 index 5db384d09..000000000 --- a/deps/oblib/src/lib/hash/ob_fixed_hash.h +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Copyright (c) 2021 OceanBase - * OceanBase CE is licensed under Mulan PubL v2. - * You can use this software according to the terms and conditions of the Mulan PubL v2. - * You may obtain a copy of Mulan PubL v2 at: - * http://license.coscl.org.cn/MulanPubL-2.0 - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PubL v2 for more details. - */ - -#ifndef OCEANBASE_HASH_OB_FIXED_HASH_H_ -#define OCEANBASE_HASH_OB_FIXED_HASH_H_ - -#include "lib/ob_define.h" -#include "lib/queue/ob_link.h" -#include "lib/hash/ob_hash.h" - -namespace oceanbase -{ -namespace common -{ -template -class FixedHash -{ -public: - typedef ObLink Link; - struct node_t: public Link - { - node_t(): hash_(0), key_() {} - explicit node_t(key_t key): key_(key) { - hash_ = hash_map_calc_hash(key_); - } - ~node_t() {} - static uint64_t hash_map_calc_hash(key_t key) - { - return calc_hash(key) | 1; - } - - node_t* set(key_t key) - { - hash_ = hash_map_calc_hash(key); - key_ = key; - return this; - } - - bool is_dummy_node() { - return 0 == (hash_ & 1); - } - - int compare(node_t* that) - { - int ret = 0; - if (this->hash_ > that->hash_) { - ret = 1; - } else if (this->hash_ < that->hash_) { - ret = -1; - } else if (this->is_dummy_node()) { - ret = 0; - } else { - ret = common::compare(this->key_, that->key_); - } - return ret; - } - - node_t* set_as_bucket(uint64_t idx) - { - hash_ = bitrev(idx); - return this; - } - - uint64_t get_spk() { return bitrev(hash_); } - uint64_t hash_; - key_t key_; - }; - - FixedHash(void* buf, int64_t size): - nodes_((node_t*)buf), limit_(last2n(size/sizeof(node_t))) { - init_buckets(nodes_, limit_); - } - ~FixedHash() {} - - int insert(key_t key, node_t* node) { - node_t key_node(key); - return ol_insert(get_pre(&key_node), node->set(key)); - } - - int del(key_t key, node_t*& node) { - node_t key_node(key); - return ol_del(get_pre(&key_node), &key_node, node); - } - - int get(key_t key, node_t*& node) { - node_t key_node(key); - return ol_get(get_pre(&key_node), &key_node, node); - } - - node_t* next(node_t* node) { - while(NULL != (node = next_node(node)) - && node->is_dummy_node()) - ; - return node; - } -private: - node_t* next_node(node_t* node) { - node_t* next = NULL; - if (NULL == node) { - next = nodes_; - } else if (is_last_bit_set((uint64_t)(next = (node_t*)ATOMIC_LOAD(&node->next_)))) { - next = get_pre(node); - } - return next; - } - - static uint64_t last2n(const uint64_t x) - { - return x == 0? 0 : (1UL << 63) >> (__builtin_clzll(x)); - } - - static uint64_t bitrev(uint64_t x) - { - x = (((x & 0xaaaaaaaaaaaaaaaaUL) >> 1) | ((x & 0x5555555555555555UL) << 1)); - x = (((x & 0xccccccccccccccccUL) >> 2) | ((x & 0x3333333333333333UL) << 2)); - x = (((x & 0xf0f0f0f0f0f0f0f0UL) >> 4) | ((x & 0x0f0f0f0f0f0f0f0fUL) << 4)); - x = (((x & 0xff00ff00ff00ff00UL) >> 8) | ((x & 0x00ff00ff00ff00ffUL) << 8)); - x = (((x & 0xffff0000ffff0000UL) >> 16) | ((x & 0x0000ffff0000ffff) << 16)); - return((x >> 32) | (x << 32)); - } - - static uint64_t get_idx(uint64_t spk, uint64_t bcnt) - { - return bcnt == 0? 0 : (spk & (bcnt - 1)); - } - - node_t* get_pre(node_t* key_node) - { - return nodes_ + get_idx(key_node->get_spk(), limit_); - } - - static uint64_t get_bucket_pre_idx(uint64_t idx) { - return idx & ~last2n(idx); - } - - static int init_buckets(node_t* nodes, int64_t limit) { - int err = 0; - new(nodes)node_t[limit]; - nodes[0].set_as_bucket(0); - for(int64_t i = 1; 0 == err && i < limit; i++) { - node_t* node = nodes + i; - node->set_as_bucket(i); - err = ol_insert(nodes + get_bucket_pre_idx(i), node); - } - return err; - } - -private: - node_t* nodes_; - int64_t limit_; -}; - -}; // end namespace common -}; // end namespace oceanbase -#endif /* OCEANBASE_HASH_OB_FIXED_HASH_H_ */ diff --git a/deps/oblib/src/lib/hash/ob_pre_alloc_link_hashmap.h b/deps/oblib/src/lib/hash/ob_pre_alloc_link_hashmap.h deleted file mode 100644 index e5253a8d3..000000000 --- a/deps/oblib/src/lib/hash/ob_pre_alloc_link_hashmap.h +++ /dev/null @@ -1,379 +0,0 @@ -/** - * Copyright (c) 2021 OceanBase - * OceanBase CE is licensed under Mulan PubL v2. - * You can use this software according to the terms and conditions of the Mulan PubL v2. - * You may obtain a copy of Mulan PubL v2 at: - * http://license.coscl.org.cn/MulanPubL-2.0 - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PubL v2 for more details. - */ - -#ifndef SRC_LIBRARY_SRC_LIB_HASH_OB_MEMLESS_LINK_HASHMAP_H_ -#define SRC_LIBRARY_SRC_LIB_HASH_OB_MEMLESS_LINK_HASHMAP_H_ - -#include "lib/ob_define.h" -#include "lib/hash/ob_hashutils.h" -#include "lib/atomic/ob_atomic.h" -#include "lib/utility/ob_print_utils.h" -#include "lib/container/ob_array.h" -#include "lib/lock/ob_bucket_lock.h" - -namespace oceanbase -{ -namespace common -{ -namespace hash -{ - -// ObMemLessLinkHashMap is convenient for reuse of node. -// there is a simple allocator in the map. -// memory of node should be pre-allocated. -// use of storage of table and meta block. -template -struct ObPreAllocLinkHashNode -{ - explicit ObPreAllocLinkHashNode(ITEM &item): item_(item) {} - virtual ~ObPreAllocLinkHashNode() { } - virtual OB_INLINE bool equals(const ObPreAllocLinkHashNode &node) { return equals(node.get_key()); } - virtual OB_INLINE bool equals(const KEY &key) { return get_key() == key; } - //derived class should override static uint64_t hash(const uint64_t &key); - - virtual const KEY &get_key() const = 0; - VIRTUAL_TO_STRING_KV(KP(this), K_(item)); - - ITEM &item_; -}; - -template -class ObPreAllocLinkHashMap -{ -public: - class ForeachFunctor - { - public: - virtual int operator()(ITEM &item, bool &is_full) = 0; - }; - - class EraseChecker - { - public: - virtual int operator()(ITEM &item) = 0; - }; - - class GetFunctor - { - public: - virtual int operator()(ITEM &item) = 0; - }; - - class Iterator - { - public: - explicit Iterator(ObPreAllocLinkHashMap &map) - : items_(), - item_idx_(0), - bucket_pos_(0), - map_(map) - { - } - virtual ~Iterator() { release_items(); } - int get_next(ITEM *&item) - { - int ret = OB_SUCCESS; - item = NULL; - - while (OB_SUCC(ret)) { - if (item_idx_ < items_.count()) { - item = items_.at(item_idx_); - ++item_idx_; - break; - } else if (bucket_pos_ >= map_.buckets_count_) { - ret = OB_ITER_END; - } else { - item_idx_ = 0; - release_items(); - ObBucketRLockGuard guard(map_.buckets_lock_, bucket_pos_); - if (NULL != map_.buckets_[bucket_pos_]) { - NODE *node = map_.buckets_[bucket_pos_]; - while (OB_SUCC(ret) && NULL != node) { - ITEM_PROTECTOR::hold(node->item_); - if (OB_FAIL(items_.push_back(&node->item_))) { - COMMON_LOG(WARN, "Failed to add item", K(ret)); - ITEM_PROTECTOR::release(node->item_); - } else { - node = node->next_; - } - } - } - ++bucket_pos_; - } - } - return ret; - } - private: - void release_items() - { - for (int64_t i = 0; i < items_.count(); ++i) { - ITEM_PROTECTOR::release(*items_.at(i)); - } - items_.reuse(); - } - common::ObArray items_; - int64_t item_idx_; - int64_t bucket_pos_; - ObPreAllocLinkHashMap &map_; - DISALLOW_COPY_AND_ASSIGN(Iterator); - }; - - ObPreAllocLinkHashMap() - : is_inited_(false), - buckets_lock_(), - count_(), - buckets_(NULL), - buckets_count_(1), - allocator_() - { - } - virtual ~ObPreAllocLinkHashMap() - { - destroy(); - } - - void destroy() - { - for (uint64_t bucket_pos = 0; NULL != buckets_ && bucket_pos < buckets_count_; ++bucket_pos) { - ObBucketRLockGuard bucket_guard(buckets_lock_, bucket_pos); - NODE *cur = buckets_[bucket_pos]; - NODE *next = NULL; - while (NULL != cur) { - next = cur->next_; - free_node(cur); - cur = next; - } - } - is_inited_ = false; - buckets_lock_.destroy(); - count_ = 0; - ob_free(buckets_); - buckets_ = NULL; - buckets_count_ = 1; - } - - int init(const int64_t buckets_count, const uint32_t latch_id, const lib::ObLabel &label) - { - int ret = OB_SUCCESS; - ObMemAttr mem_attr(OB_SERVER_TENANT_ID, label); - const int64_t real_buckets_count = hash::cal_next_prime(buckets_count); - - if (is_inited_) { - ret = OB_INIT_TWICE; - COMMON_LOG(WARN, "cannot init twice", K(ret)); - } else if (real_buckets_count <= 0 || buckets_count <= 0) { - ret = OB_INVALID_ARGUMENT; - COMMON_LOG(WARN, "invalid bucket count", K(ret), K(real_buckets_count), K(buckets_count)); - } else if (OB_FAIL(buckets_lock_.init(real_buckets_count, latch_id, label))) { - COMMON_LOG(WARN, "failed to init buckets lock", K(ret)); - } else if (OB_ISNULL(buckets_ = reinterpret_cast( - ob_malloc(sizeof(NODE*) * real_buckets_count, mem_attr)))) { - ret = OB_ALLOCATE_MEMORY_FAILED; - COMMON_LOG(WARN, "failed to alloc buckets", K(ret), K(real_buckets_count)); - } else { - allocator_.set_label(label); - MEMSET(buckets_, 0, sizeof(NODE*) * real_buckets_count); - COMMON_LOG(INFO, "init hashmap", K(buckets_count), K(real_buckets_count), - "buf_size", sizeof(NODE*) * real_buckets_count, K(latch_id), K(label)); - count_ = 0; - buckets_count_ = real_buckets_count; - is_inited_ = true; - } - return ret; - } - - uint64_t get_count() const { return ATOMIC_LOAD(&count_); } - uint64_t get_buckets_count() const { return buckets_count_; } - - NODE *alloc_node(ITEM &item) - { - return allocator_.alloc(item); - } - - void free_node(NODE *&node) - { - allocator_.free(node); - node = NULL; - } - - int put(NODE &node) - { - int ret = OB_SUCCESS; - - if (!is_inited_) { - ret = OB_NOT_INIT; - COMMON_LOG(WARN, "not inited", K(ret)); - } else { - const uint64_t bucket_pos = NODE::hash(node.get_key()) % buckets_count_; - ObBucketWLockGuard bucket_guard(buckets_lock_, bucket_pos); - NODE *cur = buckets_[bucket_pos]; - while (NULL != cur) { - if (cur->equals(node)) { - break; - } else { - cur = cur->next_; - } - } - - if (NULL != cur) { - ret = OB_HASH_EXIST; - } else { - node.next_ = buckets_[bucket_pos]; - buckets_[bucket_pos] = &node; - ATOMIC_INC(&count_); - } - } - - return ret; - } - - // delete node which has common key - int erase(const KEY &key, ITEM *&del_item, EraseChecker *checker = NULL) - { - int ret = OB_SUCCESS; - del_item = NULL; - - if (!is_inited_) { - ret = OB_NOT_INIT; - COMMON_LOG(WARN, "not inited", K(ret)); - } else { - const uint64_t bucket_pos = NODE::hash(key) % buckets_count_; - ObBucketWLockGuard bucket_guard(buckets_lock_, bucket_pos); - NODE *cur = buckets_[bucket_pos]; - NODE *prev = NULL; - while (NULL != cur) { - if (cur->equals(key)) { - break; - } else { - prev = cur; - cur = cur->next_; - } - } - - if (NULL == cur) { - ret = OB_HASH_NOT_EXIST; - } else if (NULL != checker && OB_FAIL((*checker)(cur->item_))) { - // cannot erase now - } else { - if (NULL != prev) { - prev->next_ = cur->next_; - } else { - buckets_[bucket_pos] = cur->next_; - } - cur->next_ = NULL; - del_item = &cur->item_; - free_node(cur); - ATOMIC_DEC(&count_); - } - } - - return ret; - } - - // delete node which has common key - int erase(const KEY &key) - { - int ret = OB_SUCCESS; - ITEM *del_item = NULL; - if (OB_FAIL(erase(key, del_item))) { - COMMON_LOG(WARN, "failed to erase ndoe", K(ret), K(key)); - } - return ret; - } - - int exist(const KEY &key) - { - ITEM *item = NULL; - int ret = get(key, item); - if (OB_SUCCESS == ret) { - ret = OB_HASH_EXIST; - } - return ret; - } - - int get(const KEY &key, GetFunctor &functor) - { - ITEM *item = NULL; - return get(key, item, &functor); - } - - int get(const KEY &key, ITEM *&item, GetFunctor *functor = NULL) - { - int ret = OB_SUCCESS; - item = NULL; - - if (!is_inited_) { - ret = OB_NOT_INIT; - COMMON_LOG(WARN, "not inited", K(ret)); - } else { - const uint64_t bucket_pos = NODE::hash(key) % buckets_count_; - ObBucketRLockGuard bucket_guard(buckets_lock_, bucket_pos); - NODE *cur = buckets_[bucket_pos]; - while (NULL != cur) { - if (cur->equals(key)) { - break; - } else { - cur = cur->next_; - } - } - - if (NULL == cur) { - ret = OB_HASH_NOT_EXIST; - } else if (NULL != functor && OB_FAIL((*functor)(cur->item_))) { - COMMON_LOG(WARN, "failed to do get functor", K(ret), K(*cur)); - } else { - item = &cur->item_; - } - } - - return ret; - } - - int foreach(ForeachFunctor &functor) - { - int ret = OB_SUCCESS; - bool is_full = false; - - if (!is_inited_) { - ret = OB_NOT_INIT; - COMMON_LOG(WARN, "not inited", K(ret)); - } else { - for (uint64_t bucket_pos = 0; OB_SUCC(ret) && !is_full && bucket_pos < buckets_count_; ++bucket_pos) { - ObBucketRLockGuard bucket_guard(buckets_lock_, bucket_pos); - NODE *cur = buckets_[bucket_pos]; - while (OB_SUCC(ret) && NULL != cur && !is_full) { - if (OB_FAIL(functor(cur->item_, is_full))) { - COMMON_LOG(WARN, "failed to do foreach functor", K(ret)); - } else { - cur = cur->next_; - } - } - } - } - return ret; - } - -private: - bool is_inited_; - mutable common::ObBucketLock buckets_lock_; - uint64_t count_; - NODE **buckets_; - uint64_t buckets_count_; - SimpleAllocer allocator_; - DISALLOW_COPY_AND_ASSIGN(ObPreAllocLinkHashMap); -}; - - -} // hash -} // common -} // oceanbase -#endif /* SRC_LIBRARY_SRC_LIB_HASH_OB_MEMLESS_LINK_HASHMAP_H_ */ diff --git a/deps/oblib/src/lib/signal/ob_libunwind.c b/deps/oblib/src/lib/signal/ob_libunwind.c index cc4a1d3d2..568ec6689 100644 --- a/deps/oblib/src/lib/signal/ob_libunwind.c +++ b/deps/oblib/src/lib/signal/ob_libunwind.c @@ -10,6 +10,7 @@ * See the Mulan PubL v2 for more details. */ +#ifdef __x86_64__ #include "lib/signal/ob_libunwind.h" #include "lib/signal/safe_snprintf.h" #define UNW_LOCAL_ONLY @@ -106,3 +107,4 @@ int8_t get_frame_info(unw_cursor_t *cursor, uintptr_t *ip) *ip = uip - (r == 0); return 1; } +#endif diff --git a/deps/oblib/src/lib/signal/ob_signal_handlers.cpp b/deps/oblib/src/lib/signal/ob_signal_handlers.cpp index 6f58c3228..f212bfca0 100644 --- a/deps/oblib/src/lib/signal/ob_signal_handlers.cpp +++ b/deps/oblib/src/lib/signal/ob_signal_handlers.cpp @@ -157,7 +157,9 @@ void coredump_cb(int sig, siginfo_t *si, void *context) // backtrace char bt[256]; int64_t len = 0; +#ifdef __x86_64__ safe_backtrace(bt, sizeof(bt) - 1, &len); +#endif bt[len++] = '\0'; // extra const ObFatalErrExtraInfoGuard *extra_info = nullptr; // TODO: May deadlock, ObFatalErrExtraInfoGuard::get_thd_local_val_ptr(); diff --git a/deps/oblib/src/lib/signal/ob_signal_processor.cpp b/deps/oblib/src/lib/signal/ob_signal_processor.cpp index f7b1bbd7e..d612e2763 100644 --- a/deps/oblib/src/lib/signal/ob_signal_processor.cpp +++ b/deps/oblib/src/lib/signal/ob_signal_processor.cpp @@ -65,7 +65,9 @@ int ObSigBTOnlyProcessor::prepare() int64_t count = 0; count = safe_snprintf(buf_ + pos_, len - pos_, "tid: %ld, tname: %s, lbt: ", tid, tname); pos_ += count; +#ifdef __x86_64__ safe_backtrace(buf_ + pos_, len - pos_, &count); +#endif pos_ += count; buf_[pos_++] = '\n'; return ret; diff --git a/deps/oblib/src/lib/signal/ob_signal_utils.cpp b/deps/oblib/src/lib/signal/ob_signal_utils.cpp index 6c81ea213..27d2ee23d 100644 --- a/deps/oblib/src/lib/signal/ob_signal_utils.cpp +++ b/deps/oblib/src/lib/signal/ob_signal_utils.cpp @@ -44,7 +44,9 @@ void crash_restore_handler(int sig, siginfo_t *s, void *p) if (SIGSEGV == sig || SIGABRT == sig || SIGBUS == sig || SIGFPE == sig) { int64_t len = 0; +#ifdef __x86_64__ safe_backtrace(crash_restore_buffer, 255, &len); +#endif crash_restore_buffer[len++] = '\0'; siglongjmp(*g_jmp, 1); } else { diff --git a/deps/oblib/src/lib/signal/ob_signal_worker.cpp b/deps/oblib/src/lib/signal/ob_signal_worker.cpp index 9f7fd4d63..ce9066e2a 100644 --- a/deps/oblib/src/lib/signal/ob_signal_worker.cpp +++ b/deps/oblib/src/lib/signal/ob_signal_worker.cpp @@ -33,6 +33,7 @@ bool g_inited = false; int send_request_and_wait(ObSigRequestCode code, int exclude_tid) { int ret = OB_SUCCESS; +#ifdef __x86_64__ DTraceId trace_id = DTraceId::gen_trace_id(); DTraceIdGuard trace_guard(trace_id); ObSigRequest req; @@ -93,6 +94,7 @@ int send_request_and_wait(ObSigRequestCode code, int exclude_tid) } } } +#endif return ret; } diff --git a/deps/oblib/unittest/lib/CMakeLists.txt b/deps/oblib/unittest/lib/CMakeLists.txt index 040aeff8d..4be7e86cd 100644 --- a/deps/oblib/unittest/lib/CMakeLists.txt +++ b/deps/oblib/unittest/lib/CMakeLists.txt @@ -47,7 +47,6 @@ oblib_addtest(hash/test_array_index_hash_set.cpp) oblib_addtest(hash/test_build_in_hashmap.cpp) oblib_addtest(hash/test_concurrent_hash_map.cpp) oblib_addtest(hash/test_cuckoo_hashmap.cpp) -oblib_addtest(hash/test_ext_iter_hashset.cpp) oblib_addtest(hash/test_hashmap.cpp) oblib_addtest(hash/test_fnv_hash.cpp) oblib_addtest(hash/test_hashset.cpp) @@ -57,7 +56,6 @@ oblib_addtest(hash/test_link_hashmap.cpp) oblib_addtest(hash/test_linear_hash_map.cpp) oblib_addtest(hash/test_placement_hashset.cpp) oblib_addtest(hash/test_pointer_hashmap.cpp) -oblib_addtest(hash/test_pre_alloc_link_hashmap.cpp) oblib_addtest(hash/test_simpleallocer.cpp) oblib_addtest(json/test_json_print_utils.cpp) oblib_addtest(json/test_yson.cpp) diff --git a/deps/oblib/unittest/lib/hash/test_ext_iter_hashset.cpp b/deps/oblib/unittest/lib/hash/test_ext_iter_hashset.cpp deleted file mode 100644 index 5bb42e49d..000000000 --- a/deps/oblib/unittest/lib/hash/test_ext_iter_hashset.cpp +++ /dev/null @@ -1,360 +0,0 @@ -/** - * Copyright (c) 2021 OceanBase - * OceanBase CE is licensed under Mulan PubL v2. - * You can use this software according to the terms and conditions of the Mulan PubL v2. - * You may obtain a copy of Mulan PubL v2 at: - * http://license.coscl.org.cn/MulanPubL-2.0 - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PubL v2 for more details. - */ - -#include "lib/hash/ob_ext_iter_hashset.h" -#include "lib/allocator/ob_malloc.h" -#include - -using namespace oceanbase::common; -using namespace oceanbase::common::hash; -class ObExtIterHashSetTest: public ::testing::Test -{ - public: - ObExtIterHashSetTest(); - virtual ~ObExtIterHashSetTest(); - virtual void SetUp(); - virtual void TearDown(); - - public: - ObArenaAllocator allocator_; - - private: - // disallow copy - ObExtIterHashSetTest(const ObExtIterHashSetTest &other); - ObExtIterHashSetTest& operator=(const ObExtIterHashSetTest &other); - protected: - // data members -}; - -ObExtIterHashSetTest::ObExtIterHashSetTest() : allocator_(ObModIds::TEST) -{ -} - -ObExtIterHashSetTest::~ObExtIterHashSetTest() -{ -} - -void ObExtIterHashSetTest::SetUp() -{ -} - -void ObExtIterHashSetTest::TearDown() -{ - allocator_.reset(); -} - -TEST_F(ObExtIterHashSetTest, basic_test) -{ - static const int64_t N = 256; - static const int64_t BUCKET_NUM = 8; - ObExtIterHashSet set(allocator_); - for (int round = 0; round < 5; ++round) { - ASSERT_EQ(0, set.count()); - ASSERT_EQ(set.begin(), set.end()); - ASSERT_EQ(++(set.begin()), set.end()); - - // insert data - for (int64_t index = 0; index < N * BUCKET_NUM; index++) { - int64_t value = index + 1; - ASSERT_EQ(OB_HASH_NOT_EXIST, set.exist_refactored(value)); - ASSERT_EQ(OB_SUCCESS, set.set_refactored(value)); - ASSERT_EQ(OB_HASH_EXIST, set.exist_refactored(value)); - ASSERT_EQ(index + 1, set.count()); - } - - // verify data - ObExtIterHashSet::const_iterator_t it = set.begin(); - for(int64_t value = 1; it != set.end(); ++it, value++) { - ASSERT_EQ(value, *it); - } - set.clear(); - ASSERT_EQ(0, set.count()); - } -} - -TEST_F(ObExtIterHashSetTest, single_N) -{ - ObExtIterHashSet hashset(allocator_); - ObExtIterHashSet::const_iterator_t iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - ASSERT_EQ(0, hashset.count()); - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(1)); - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(1)); - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(1)); - ASSERT_EQ(1, hashset.count()); - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(2)); - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(2)); - ASSERT_EQ(2, hashset.count()); - - iter = hashset.begin(); - ASSERT_NE(iter, hashset.end()); - ASSERT_EQ(1, *iter); - ASSERT_NE(++iter, hashset.end()); - ASSERT_EQ(2, *iter); - ASSERT_EQ(++iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); -} - -TEST_F(ObExtIterHashSetTest, many_N_single_bucket) -{ - const uint64_t N = 10345; - int64_t value = 0; - ObExtIterHashSet hashset(allocator_); - ObExtIterHashSet::const_iterator_t iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_HASH_NOT_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(i)); - } - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(N)); - - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(i)); - } - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(N)); - - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - - ASSERT_EQ(N + 1, hashset.count()); - for (value = 0, iter = hashset.begin(); iter != hashset.end(); ++iter, value++) { - ASSERT_EQ(value, *iter); - } - - hashset.clear(); - - iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_HASH_NOT_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(i)); - } - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(N)); - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(i)); - } - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(N)); - for (uint64_t i = 0; i < N; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - - ASSERT_EQ(N + 1, hashset.count()); - for (value = 0, iter = hashset.begin(); iter != hashset.end(); ++iter, value++) { - ASSERT_EQ(value, *iter); - } -} - -TEST_F(ObExtIterHashSetTest, many_N_single_buckets2) -{ - const uint64_t N = 10345; - int64_t value = 0; - ObExtIterHashSet hashset(allocator_); - ObExtIterHashSet::const_iterator_t iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_HASH_NOT_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(i)); - } - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(0)); - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(i)); - } - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(0)); - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - - ASSERT_EQ(N + 1, hashset.count()); - for (value = N, iter = hashset.begin(); iter != hashset.end(); ++iter, value--) { - ASSERT_EQ(value, *iter); - } - - hashset.clear(); - - iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_HASH_NOT_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(i)); - } - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(0)); - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(i)); - } - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(0)); - for (uint64_t i = N; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - - ASSERT_EQ(N + 1, hashset.count()); - for (value = N, iter = hashset.begin(); iter != hashset.end(); ++iter, value--) { - ASSERT_EQ(value, *iter); - } -} - -TEST_F(ObExtIterHashSetTest, many_N_many_buckets) -{ - static const uint64_t N = 16; - static const uint64_t BUCKET_NUM = 100; - static const uint64_t ELEMENT_NUM = N * BUCKET_NUM; - int64_t value = 0; - ObExtIterHashSet hashset(allocator_); - ObExtIterHashSet::const_iterator_t iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_HASH_NOT_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(i)); - } - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(i)); - } - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - - ASSERT_EQ(ELEMENT_NUM, hashset.count()); - for (value = 0, iter = hashset.begin(); iter != hashset.end(); ++iter, value++) { - ASSERT_EQ(value, *iter); - } - - hashset.clear(); - - iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_HASH_NOT_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(i)); - } - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(i)); - } - for (uint64_t i = 0; i < ELEMENT_NUM; i++) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - - ASSERT_EQ(ELEMENT_NUM, hashset.count()); - for (value = 0, iter = hashset.begin(); iter != hashset.end(); ++iter, value++) { - ASSERT_EQ(value, *iter); - } -} - -TEST_F(ObExtIterHashSetTest, many_N_many_buckets2) -{ - static const uint64_t N = 128; - static const uint64_t BUCKET_NUM = 10; - static const uint64_t ELEMENT_NUM = N * BUCKET_NUM; - int64_t value = 0; - ObExtIterHashSet hashset(allocator_); - ObExtIterHashSet::const_iterator_t iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_HASH_NOT_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(i)); - } - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(i)); - } - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - - ASSERT_EQ(ELEMENT_NUM, hashset.count()); - for (value = ELEMENT_NUM, iter = hashset.begin(); iter != hashset.end(); ++iter, value--) { - ASSERT_EQ(value, *iter); - } - - hashset.clear(); - - iter = hashset.begin(); - ASSERT_EQ(iter, hashset.end()); - ASSERT_EQ(++iter, hashset.end()); - - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_HASH_NOT_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_SUCCESS, hashset.set_refactored(i)); - } - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.set_refactored(i)); - } - for (uint64_t i = ELEMENT_NUM; i > 0; i--) { - ASSERT_EQ(OB_HASH_EXIST, hashset.exist_refactored(i)); - } - - ASSERT_EQ(ELEMENT_NUM, hashset.count()); - for (value = ELEMENT_NUM, iter = hashset.begin(); iter != hashset.end(); ++iter, value--) { - ASSERT_EQ(value, *iter); - } -} - -int main(int argc, char **argv) -{ - OB_LOGGER.set_log_level("INFO"); - ::testing::InitGoogleTest(&argc,argv); - return RUN_ALL_TESTS(); -} diff --git a/deps/oblib/unittest/lib/hash/test_pre_alloc_link_hashmap.cpp b/deps/oblib/unittest/lib/hash/test_pre_alloc_link_hashmap.cpp deleted file mode 100644 index 272762919..000000000 --- a/deps/oblib/unittest/lib/hash/test_pre_alloc_link_hashmap.cpp +++ /dev/null @@ -1,373 +0,0 @@ -/** - * Copyright (c) 2021 OceanBase - * OceanBase CE is licensed under Mulan PubL v2. - * You can use this software according to the terms and conditions of the Mulan PubL v2. - * You may obtain a copy of Mulan PubL v2 at: - * http://license.coscl.org.cn/MulanPubL-2.0 - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PubL v2 for more details. - */ - -#include -#include -#include -#include -#include -#include -#include "lib/hash/ob_pre_alloc_link_hashmap.h" -#include "lib/allocator/ob_malloc.h" - -#include "gtest/gtest.h" - -using namespace oceanbase; -using namespace oceanbase::common; -using namespace oceanbase::common::hash; - -struct Item -{ - int64_t key_; - int64_t value_; - int64_t ref_; - - Item(): key_(0), value_(0), ref_(0) {} - Item(const int64_t key, const int64_t value, const int64_t ref): - key_(key), value_(value), ref_(ref) {} - TO_STRING_KV(K_(key), K_(value)); -}; - -struct Node: public ObPreAllocLinkHashNode -{ - explicit Node(Item &item): ObPreAllocLinkHashNode(item), next_(NULL) {} - virtual ~Node() { } - static uint64_t hash(int64_t key) { return key; } - virtual uint64_t hash() const { return hash(item_.key_); } - virtual const int64_t &get_key() const { return item_.key_; } - Node *next_; -}; - -class ItemProtector -{ -public: - static void hold(Item &item) - { - ++item.ref_; - } - static void release(Item &item) - { - --item.ref_; - } -}; - -typedef common::hash::ObPreAllocLinkHashMap TestMap; -struct TestForeachFinder: public TestMap::ForeachFunctor -{ - TestForeachFinder(): count_(0) {} - virtual ~TestForeachFinder() {} - virtual int operator()(Item &item, bool &is_full) - { - int ret = OB_SUCCESS; - if (count_ >= MAX_COUNT) { - is_full = true; - } else if (item.value_ == 0) { - items_[count_++] = &item; - } else if (item.value_ == 2) { - ret = OB_ERR_SYS; - } - return ret; - } - - static const int64_t MAX_COUNT = 3; - Item *items_[MAX_COUNT]; - int64_t count_; -}; - -struct TestForeachCheckRef: public TestMap::ForeachFunctor -{ - TestForeachCheckRef(): count_(0) {} - virtual ~TestForeachCheckRef() {} - virtual int operator()(Item &item, bool &is_full) - { - int ret = OB_SUCCESS; - is_full = false; - ++count_; - if (item.ref_ != 0) { - COMMON_LOG(ERROR, "ref not zero", K(item.ref_), K(item.key_)); - ret = OB_ERR_SYS; - } - return ret; - } - - int64_t count_; -}; - -class TestEraseChecker: public TestMap::EraseChecker - -{ -public: - virtual ~TestEraseChecker() {} - virtual int operator()(Item &item) - { - int ret = OB_SUCCESS; - if (item.value_ != 0) { - ret = OB_EAGAIN; - } - return ret; - } -}; - -class TestGetFunctor: public TestMap::GetFunctor -{ -public: - TestGetFunctor(): item_(NULL) {} - virtual ~TestGetFunctor() {} - virtual int operator()(Item &item) override - { - int ret = OB_SUCCESS; - item_ = NULL; - if (item.value_ == 3) { - ret = OB_ERR_SYS; - } else { - item_ = &item; - } - return ret; - } - Item *item_; -private: - DISALLOW_COPY_AND_ASSIGN(TestGetFunctor); -}; - -TEST(TestObMemLessLinkHashMap, basic) -{ - TestMap map; - int64_t buckets_count = 0; - uint32_t latch_id = 1; - const lib::ObLabel &label = "1"; - Item item1 = {1,0,0}; - Node *node1 = map.alloc_node(item1); - COMMON_LOG(INFO, "dump", K(item1), K(node1->item_), KP(&item1), KP(&node1->item_)); - TestForeachFinder finder; - - ASSERT_EQ(OB_NOT_INIT, map.put(*node1)); - ASSERT_EQ(OB_INVALID_ARGUMENT, map.init(buckets_count, latch_id, label)); - ASSERT_EQ(OB_INVALID_ARGUMENT, map.init(buckets_count, latch_id, label)); - buckets_count = 100; - ASSERT_EQ(OB_SUCCESS, map.init(buckets_count, latch_id, label)); - ASSERT_EQ(OB_INIT_TWICE, map.init(buckets_count, latch_id, label)); - ASSERT_EQ(0, map.get_count()); - - ASSERT_EQ(OB_SUCCESS, map.put(*node1)); - ASSERT_EQ(OB_HASH_EXIST, map.put(*node1)); - ASSERT_EQ(1, map.get_count()); - - Item item2 = {1,0,0}; - Node node2(item2); - ASSERT_EQ(OB_HASH_EXIST, map.put(node2)); - ASSERT_EQ(1, map.get_count()); - - Item *get_item = NULL; - ASSERT_EQ(OB_SUCCESS, map.get(1, get_item)); - ASSERT_EQ(&item1, get_item); - ASSERT_EQ(OB_SUCCESS, map.foreach(finder)); - ASSERT_EQ(1, finder.count_); - COMMON_LOG(INFO, "dump", K(node1), K(finder.items_[0])); - ASSERT_EQ(&item1, finder.items_[0]); - - Item *del_item = NULL; - ASSERT_EQ(OB_SUCCESS, map.erase(1, del_item)); - ASSERT_EQ(&item1, del_item); - ASSERT_EQ(OB_HASH_NOT_EXIST, map.erase(1, del_item)); - ASSERT_EQ(OB_HASH_NOT_EXIST, map.get(1, del_item)); -} - -TEST(TestObMemLessLinkHashMap, same_hash) -{ - TestMap map; - int64_t buckets_count = 1; - uint32_t latch_id = 1; - const lib::ObLabel &label = "1"; - Item item1 = {1,0,0}; - - ASSERT_EQ(OB_SUCCESS, map.init(buckets_count, latch_id, label)); - buckets_count = map.get_buckets_count(); - Node *node1 = map.alloc_node(item1); - Item item2 = {1 + buckets_count,0,0}; - Node *node2 = map.alloc_node(item2); - - ASSERT_EQ(OB_SUCCESS, map.put(*node1)); - ASSERT_EQ(OB_SUCCESS, map.put(*node2)); - ASSERT_EQ(2, map.get_count()); - - Item *got_item = NULL; - ASSERT_EQ(OB_SUCCESS, map.get(1, got_item)); - ASSERT_EQ(&item1, got_item); - ASSERT_EQ(OB_SUCCESS, map.get(item2.key_, got_item)); - ASSERT_EQ(&item2, got_item); - - Item *del_item = NULL; - ASSERT_EQ(OB_SUCCESS, map.erase(item2.key_, del_item)); - ASSERT_EQ(&item2, del_item); - ASSERT_EQ(OB_SUCCESS, map.erase(item1.key_, del_item)); - ASSERT_EQ(&item1, del_item); -} - -TEST(TestObMemLessLinkHashMap, erase) -{ - TestMap map; - int64_t buckets_count = 100; - uint32_t latch_id = 1; - const lib::ObLabel &label = "1"; - TestEraseChecker checker; - Item *del_item = NULL; - - ASSERT_EQ(OB_SUCCESS, map.init(buckets_count, latch_id, label)); - Item item1 = {1,0,0}; - Node *node1 = map.alloc_node(item1); - Item item2 = {2,1, 0}; - Node *node2 = map.alloc_node(item2); - ASSERT_EQ(OB_SUCCESS, map.put(*node1)); - ASSERT_EQ(OB_SUCCESS, map.put(*node2)); - ASSERT_EQ(OB_SUCCESS, map.erase(1, del_item, &checker)); - ASSERT_EQ(del_item, &item1); - ASSERT_EQ(OB_EAGAIN, map.erase(2, del_item, &checker)); -} - -TEST(TestObMemLessLinkHashMap, get_functor) -{ - TestMap map; - int64_t buckets_count = 100; - uint32_t latch_id = 1; - const lib::ObLabel &label = "1"; - - ASSERT_EQ(OB_SUCCESS, map.init(buckets_count, latch_id, label)); - - Item item1 = {1,0,0}; - Node *node1 = map.alloc_node(item1); - Item item2 = {2,3, 0}; - Node *node2 = map.alloc_node(item2); - TestGetFunctor get_functor; - Item *got_item = NULL; - - ASSERT_EQ(OB_SUCCESS, map.put(*node1)); - ASSERT_EQ(OB_SUCCESS, map.put(*node2)); - ASSERT_EQ(OB_SUCCESS, map.get(1, got_item, &get_functor)); - ASSERT_EQ(got_item, &item1); - ASSERT_EQ(OB_SUCCESS, map.get(1, get_functor)); - ASSERT_EQ(get_functor.item_, &item1); - ASSERT_EQ(OB_ERR_SYS, map.get(2, got_item, &get_functor)); - ASSERT_TRUE(got_item == NULL); - ASSERT_TRUE(get_functor.item_ == NULL); - ASSERT_EQ(OB_HASH_EXIST, map.exist(1)); - ASSERT_EQ(OB_HASH_EXIST, map.exist(2)); - ASSERT_EQ(OB_HASH_NOT_EXIST, map.exist(3)); -} - - -TEST(TestObMemLessLinkHashMap, foreach) -{ - TestMap map; - int64_t buckets_count = 100; - uint32_t latch_id = 1; - const lib::ObLabel &label = "1"; - const int64_t count = 10000; - Item *items[count]; - TestForeachFinder finder; - - ASSERT_EQ(OB_SUCCESS, map.init(buckets_count, latch_id, label)); - - for (int64_t i = 0; i < count; ++i) { - Item *item = new Item(); - item->key_ = i; - item->value_ = i % 2; - Node *node = map.alloc_node(*item); - items[i] = item; - ASSERT_EQ(OB_SUCCESS, map.put(*node)); - } - - for (int64_t i = 0; i < count; ++i) { - Item *got_item = NULL; - ASSERT_EQ(OB_SUCCESS, map.get(i, got_item)); - ASSERT_EQ(items[i], got_item); - } - - ASSERT_EQ(OB_SUCCESS, map.foreach(finder)); - ASSERT_EQ(3, finder.count_); - for (int64_t i = 0; i < 3; ++i) { - COMMON_LOG(INFO, "dump", K(items[2 * i]), K(*finder.items_[i])); - } - - - for (int64_t i = 0; i < count; ++i) { - delete items[i]; - } -} - -TEST(TestObMemLessLinkHashMap, iterator) -{ - TestMap map; - TestMap::Iterator iter(map); - int64_t buckets_count = 100000; - uint32_t latch_id = 1; - const lib::ObLabel &label = "1"; - ASSERT_EQ(OB_SUCCESS, map.init(buckets_count, latch_id, label)); - Item item1 = {1,0,0}; - Node *node1 = map.alloc_node(item1); - Item item2 = {2,3, 0}; - Node *node2 = map.alloc_node(item2); - TestGetFunctor get_functor; - Item *got_item = NULL; - - ASSERT_EQ(OB_SUCCESS, map.put(*node1)); - ASSERT_EQ(OB_SUCCESS, map.put(*node2)); - ASSERT_EQ(OB_SUCCESS, iter.get_next(got_item)); - ASSERT_EQ(&item1, got_item); - ASSERT_EQ(OB_SUCCESS, iter.get_next(got_item)); - ASSERT_EQ(&item2, got_item); - ASSERT_EQ(OB_ITER_END, iter.get_next(got_item)); -} - -TEST(TestObMemLessLinkHashMap, iterator2) -{ - int ret = OB_SUCCESS; - TestMap map; - int64_t buckets_count = 100; - uint32_t latch_id = 1; - const lib::ObLabel &label = "1"; - ASSERT_EQ(OB_SUCCESS, map.init(buckets_count, latch_id, label)); - - const int64_t count = 8061; - for (int64_t i = 0; i < count; ++i) { - Item *item = new Item(); - item->key_ = i; - item->value_ = i; - item->ref_ = 0; - Node *node = map.alloc_node(*item); - ASSERT_EQ(OB_SUCCESS, map.put(*node)); - } - - { - TestMap::Iterator iter(map); - Item *got_item = NULL; - int64_t num = 0; - while (OB_SUCC(ret)) { - if (OB_FAIL(iter.get_next(got_item))) { - COMMON_LOG(WARN, "rend", K(ret), K(num)); - } else { - ++num; - } - } - ASSERT_EQ(OB_ITER_END, ret); - } - - TestForeachCheckRef checker; - ASSERT_EQ(OB_SUCCESS, map.foreach(checker)); - ASSERT_EQ(count, checker.count_); - -} -int main(int argc, char **argv) -{ - OB_LOGGER.set_log_level("INFO"); - testing::InitGoogleTest(&argc,argv); - return RUN_ALL_TESTS(); -} diff --git a/src/logservice/libobcdc/src/ob_log_trans_ctx.h b/src/logservice/libobcdc/src/ob_log_trans_ctx.h index 42667666c..f1d3708e3 100644 --- a/src/logservice/libobcdc/src/ob_log_trans_ctx.h +++ b/src/logservice/libobcdc/src/ob_log_trans_ctx.h @@ -17,7 +17,6 @@ #include "share/ob_define.h" // OB_* #include "lib/allocator/ob_allocator.h" // ObIAllocator -#include "lib/hash/ob_ext_iter_hashset.h" // ObExtIterHashSet #include "lib/container/ob_se_array.h" // ObSEArray #include "lib/allocator/page_arena.h" // ObArenaAllocator #include "lib/lock/ob_spin_lock.h" // ObSpinLock diff --git a/src/logservice/restoreservice/ob_remote_fetch_log.cpp b/src/logservice/restoreservice/ob_remote_fetch_log.cpp index e18f3a872..35b525f3e 100644 --- a/src/logservice/restoreservice/ob_remote_fetch_log.cpp +++ b/src/logservice/restoreservice/ob_remote_fetch_log.cpp @@ -234,9 +234,7 @@ int ObRemoteFetchLogImpl::get_palf_base_lsn_scn_(ObLS &ls, LSN &lsn, SCN &scn) } else if (OB_FAIL(palf_handle_guard.get_end_lsn(lsn))) { LOG_WARN("get end lsn failed", K(ret), K(id)); } else { - int64_t checkpoint_ts = ls.get_clog_checkpoint_ts(); - SCN checkpoint_scn; - checkpoint_scn.convert_tmp(checkpoint_ts); + const SCN &checkpoint_scn = ls.get_clog_checkpoint_scn(); scn = SCN::max(scn, checkpoint_scn); } return ret; diff --git a/src/rootserver/ob_root_service.cpp b/src/rootserver/ob_root_service.cpp index 2f598cc6a..dc98a9aa0 100644 --- a/src/rootserver/ob_root_service.cpp +++ b/src/rootserver/ob_root_service.cpp @@ -2182,7 +2182,6 @@ int ObRootService::renew_lease(const ObLeaseRequest &lease_request, // before __all_zone load, it may fail, ignore it int temp_ret = OB_SUCCESS; int64_t lease_info_version = 0; - int64_t frozen_timestamp = 0; bool is_stopped = false; int64_t leader_cnt = -1; bool has_leader = true; diff --git a/src/rootserver/ob_table_creator.h b/src/rootserver/ob_table_creator.h index 7ebcaaf06..84ef8810b 100644 --- a/src/rootserver/ob_table_creator.h +++ b/src/rootserver/ob_table_creator.h @@ -40,7 +40,7 @@ public: share::ObLSTableOperator &lst_operator, ObMySQLTransaction &trans) : tenant_id_(tenant_id), - tablet_creator_(tenant_id, frozen_scn.get_val_for_lsn_allocator(), lst_operator, trans), + tablet_creator_(tenant_id, frozen_scn, lst_operator, trans), trans_(trans), ls_id_array_(), inited_(false) {} diff --git a/src/rootserver/ob_tablet_creator.cpp b/src/rootserver/ob_tablet_creator.cpp index 835bec8c2..31c97163f 100644 --- a/src/rootserver/ob_tablet_creator.cpp +++ b/src/rootserver/ob_tablet_creator.cpp @@ -108,7 +108,7 @@ DEF_TO_STRING(ObTabletCreatorArg) ///////////////////////////////////////////////////////// int ObBatchCreateTabletHelper::init(const share::ObLSID &ls_key, const int64_t tenant_id, - const int64_t frozen_timestamp) + const palf::SCN &major_frozen_scn) { int ret = OB_SUCCESS; const int64_t bucket_count = hash::cal_next_prime(100); @@ -117,8 +117,8 @@ int ObBatchCreateTabletHelper::init(const share::ObLSID &ls_key, const int64_t t ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid argument", KR(ret), K(tenant_id), K(ls_key)); } else if (OB_FAIL(arg_.init_create_tablet(ls_key, - frozen_timestamp))) { - LOG_WARN("failed to init create tablet", KR(ret), K(tenant_id), K(ls_key), K(frozen_timestamp)); + major_frozen_scn))) { + LOG_WARN("failed to init create tablet", KR(ret), K(tenant_id), K(ls_key), K(major_frozen_scn)); } else if (OB_FAIL(table_schemas_map_.create(bucket_count, "CreateTablet", "CreateTablet"))) { LOG_WARN("failed to create hashmap", KR(ret)); } @@ -252,7 +252,7 @@ int ObTabletCreator::add_create_tablet_arg(const ObTabletCreatorArg &arg) ret = OB_ALLOCATE_MEMORY_FAILED; LOG_WARN("failed to allocate new arg", KR(ret), KP(batch_arg)); } else if (FALSE_IT(batch_arg = new (arg_buf)ObBatchCreateTabletHelper())) { - } else if (OB_FAIL(batch_arg->init(arg.ls_key_, tenant_id_, frozen_timestamp_))) { + } else if (OB_FAIL(batch_arg->init(arg.ls_key_, tenant_id_, major_frozen_scn_))) { LOG_WARN("failed to init batch arg helper", KR(ret), K(arg)); } else if (OB_FAIL(args_map_.set_refactored(arg.ls_key_, batch_arg, 0/*not overwrite*/))) { LOG_WARN("fail to set refactored", KR(ret), K(arg)); @@ -271,7 +271,7 @@ int ObTabletCreator::add_create_tablet_arg(const ObTabletCreatorArg &arg) ret = OB_ALLOCATE_MEMORY_FAILED; LOG_WARN("failed to allocate new arg", KR(ret)); } else if (FALSE_IT(new_arg = new (arg_buf)ObBatchCreateTabletHelper())) { - } else if (OB_FAIL(new_arg->init(arg.ls_key_, tenant_id_, frozen_timestamp_))) { + } else if (OB_FAIL(new_arg->init(arg.ls_key_, tenant_id_, major_frozen_scn_))) { LOG_WARN("failed to init batch arg helper", KR(ret), K(arg)); } else if (FALSE_IT(new_arg->next_ = batch_arg)) { } else if (OB_FAIL(args_map_.set_refactored(arg.ls_key_, new_arg, 1/*not overwrite*/))) { diff --git a/src/rootserver/ob_tablet_creator.h b/src/rootserver/ob_tablet_creator.h index 856d1e04e..065ca26cb 100644 --- a/src/rootserver/ob_tablet_creator.h +++ b/src/rootserver/ob_tablet_creator.h @@ -72,7 +72,7 @@ public: ObBatchCreateTabletHelper() :arg_(), table_schemas_map_(), result_(common::OB_NOT_MASTER), next_(NULL) {} int init(const share::ObLSID &ls_key, const int64_t tenant_id, - const int64_t frozen_timestamp); + const palf::SCN &major_frozen_scn); int try_add_table_schema(const share::schema::ObTableSchema *table_schema, int64_t &index); int add_arg_to_batch_arg(const ObTabletCreatorArg &arg); void reset() @@ -97,11 +97,11 @@ class ObTabletCreator public: ObTabletCreator( const uint64_t tenant_id, - int64_t frozen_timestamp, + const palf::SCN &major_frozen_scn, share::ObLSTableOperator &lst_operator, ObMySQLTransaction &trans) : tenant_id_(tenant_id), - frozen_timestamp_(frozen_timestamp), + major_frozen_scn_(major_frozen_scn), lst_operator_(&lst_operator), allocator_("TbtCret"), args_map_(), @@ -119,7 +119,7 @@ private: const int64_t MAP_BUCKET_NUM = 1024; private: const uint64_t tenant_id_; - const int64_t frozen_timestamp_; + const palf::SCN major_frozen_scn_; share::ObLSTableOperator *lst_operator_; ObArenaAllocator allocator_; common::hash::ObHashMap args_map_; diff --git a/src/share/inner_table/ob_inner_table_schema.21101_21150.cpp b/src/share/inner_table/ob_inner_table_schema.21101_21150.cpp index 42992ffd6..a995880a1 100644 --- a/src/share/inner_table/ob_inner_table_schema.21101_21150.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21101_21150.cpp @@ -609,7 +609,7 @@ int ObInnerTableSchema::cdb_ob_archivelog_piece_files_schema(ObTableSchema &tabl table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, DEST_ID, ROUND_ID, PIECE_ID, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, MAX_SCN, END_SCN, COMPATIBLE, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, FILE_STATUS, PATH FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, DEST_ID, ROUND_ID, PIECE_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, MAX_SCN, END_SCN, COMPATIBLE, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, FILE_STATUS, PATH FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -659,7 +659,7 @@ int ObInnerTableSchema::cdb_ob_backup_set_files_schema(ObTableSchema &table_sche table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, BACKUP_SET_ID, DEST_ID, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, CASE WHEN START_REPLAY_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_REPLAY_SCN) END AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_SET_FILES )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, CASE WHEN START_REPLAY_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_REPLAY_SCN) END AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_SET_FILES )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp b/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp index 4e98fea3b..323f830cb 100644 --- a/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp @@ -159,7 +159,7 @@ int ObInnerTableSchema::cdb_ob_backup_jobs_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, JOB_ID, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, RESULT, COMMENT, DESCRIPTION, PATH FROM OCEANBASE.__all_virtual_backup_job )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, JOB_ID, INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, RESULT, COMMENT, DESCRIPTION, PATH FROM OCEANBASE.__all_virtual_backup_job )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -209,7 +209,7 @@ int ObInnerTableSchema::cdb_ob_backup_job_history_schema(ObTableSchema &table_sc table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, JOB_ID, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, RESULT, COMMENT, DESCRIPTION, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_JOB_HISTORY )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, JOB_ID, INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, RESULT, COMMENT, DESCRIPTION, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_JOB_HISTORY )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -259,7 +259,7 @@ int ObInnerTableSchema::cdb_ob_backup_tasks_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, TASK_ID, JOB_ID, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, PATH FROM OCEANBASE.__all_virtual_backup_task )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, TASK_ID, JOB_ID, INCARNATION, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, PATH FROM OCEANBASE.__all_virtual_backup_task )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -309,7 +309,7 @@ int ObInnerTableSchema::cdb_ob_backup_task_history_schema(ObTableSchema &table_s table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, TASK_ID, JOB_ID, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_TASK_HISTORY )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, TASK_ID, JOB_ID, INCARNATION, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_TASK_HISTORY )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp b/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp index 824b5f9d2..92f1172b5 100644 --- a/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp @@ -2159,7 +2159,7 @@ int ObInnerTableSchema::cdb_ob_backup_delete_jobs_schema(ObTableSchema &table_sc table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, JOB_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, USEC_TO_TIME(PARAMETER) AS PARAMETER, JOB_LEVEL, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, COMMENT FROM oceanbase.__all_virtual_backup_delete_job )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, JOB_ID, INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, USEC_TO_TIME(PARAMETER) AS PARAMETER, JOB_LEVEL, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, COMMENT FROM oceanbase.__all_virtual_backup_delete_job )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2209,7 +2209,7 @@ int ObInnerTableSchema::cdb_ob_backup_delete_job_history_schema(ObTableSchema &t table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, JOB_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, USEC_TO_TIME(PARAMETER) AS PARAMETER, JOB_LEVEL, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, COMMENT FROM oceanbase.__all_virtual_backup_delete_job_history )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, JOB_ID, INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, USEC_TO_TIME(PARAMETER) AS PARAMETER, JOB_LEVEL, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, COMMENT FROM oceanbase.__all_virtual_backup_delete_job_history )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2259,7 +2259,7 @@ int ObInnerTableSchema::cdb_ob_backup_delete_tasks_schema(ObTableSchema &table_s table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, TASK_ID, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, COMMENT, PATH FROM oceanbase.__all_virtual_backup_delete_task )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, TASK_ID, INCARNATION, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, COMMENT, PATH FROM oceanbase.__all_virtual_backup_delete_task )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2309,7 +2309,7 @@ int ObInnerTableSchema::cdb_ob_backup_delete_task_history_schema(ObTableSchema & table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, TASK_ID, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, COMMENT, PATH FROM oceanbase.__all_virtual_backup_delete_task_history )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, TASK_ID, INCARNATION, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, COMMENT, PATH FROM oceanbase.__all_virtual_backup_delete_task_history )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp b/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp index b6e3679f2..f0c3e428c 100644 --- a/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp @@ -559,7 +559,7 @@ int ObInnerTableSchema::dba_ob_backup_jobs_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, RESULT, COMMENT, DESCRIPTION, PATH FROM OCEANBASE.__all_virtual_backup_job WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, RESULT, COMMENT, DESCRIPTION, PATH FROM OCEANBASE.__all_virtual_backup_job WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -609,7 +609,7 @@ int ObInnerTableSchema::dba_ob_backup_job_history_schema(ObTableSchema &table_sc table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, RESULT, COMMENT, DESCRIPTION, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_JOB_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, RESULT, COMMENT, DESCRIPTION, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_JOB_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -659,7 +659,7 @@ int ObInnerTableSchema::dba_ob_backup_tasks_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, PATH FROM OCEANBASE.__all_virtual_backup_task WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, INCARNATION, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, PATH FROM OCEANBASE.__all_virtual_backup_task WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -709,7 +709,7 @@ int ObInnerTableSchema::dba_ob_backup_task_history_schema(ObTableSchema &table_s table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_TASK_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, INCARNATION, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_TASK_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -759,7 +759,7 @@ int ObInnerTableSchema::dba_ob_backup_set_files_schema(ObTableSchema &table_sche table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT BACKUP_SET_ID, DEST_ID, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, CASE WHEN START_REPLAY_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_REPLAY_SCN) END AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_SET_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, CASE WHEN START_REPLAY_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_REPLAY_SCN) END AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_SET_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1459,7 +1459,7 @@ int ObInnerTableSchema::dba_ob_backup_delete_jobs_schema(ObTableSchema &table_sc table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, USEC_TO_TIME(PARAMETER) AS PARAMETER, JOB_LEVEL, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_DELETE_JOB WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, USEC_TO_TIME(PARAMETER) AS PARAMETER, JOB_LEVEL, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_DELETE_JOB WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1509,7 +1509,7 @@ int ObInnerTableSchema::dba_ob_backup_delete_job_history_schema(ObTableSchema &t table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, USEC_TO_TIME(PARAMETER) AS PARAMETER, JOB_LEVEL, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_DELETE_JOB_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, USEC_TO_TIME(PARAMETER) AS PARAMETER, JOB_LEVEL, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_DELETE_JOB_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1559,7 +1559,7 @@ int ObInnerTableSchema::dba_ob_backup_delete_tasks_schema(ObTableSchema &table_s table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_DELETE_TASK WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, INCARNATION, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_DELETE_TASK WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1609,7 +1609,7 @@ int ObInnerTableSchema::dba_ob_backup_delete_task_history_schema(ObTableSchema & table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_DELETE_TASK_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, INCARNATION, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_DELETE_TASK_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1909,7 +1909,7 @@ int ObInnerTableSchema::dba_ob_archivelog_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, CASE WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) = 0 THEN 0 ELSE ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) / (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES), 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, CASE WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) = 0 THEN 0 ELSE ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) / (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES), 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1959,7 +1959,7 @@ int ObInnerTableSchema::dba_ob_archivelog_summary_schema(ObTableSchema &table_sc table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, PATH, COMMENT FROM ( SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND STATUS != 'STOP' UNION SELECT DEST_ID, ROUND_ID, DEST_NO, 'STOP' AS STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, PATH, COMMENT FROM ( SELECT DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND STATUS != 'STOP' UNION SELECT DEST_ID, ROUND_ID, INCARNATION, DEST_NO, 'STOP' AS STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2009,7 +2009,7 @@ int ObInnerTableSchema::dba_ob_archivelog_piece_files_schema(ObTableSchema &tabl table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, PIECE_ID, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, MAX_SCN, END_SCN, COMPATIBLE, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, FILE_STATUS, PATH FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, PIECE_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, MAX_SCN, END_SCN, COMPATIBLE, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, FILE_STATUS, PATH FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2159,7 +2159,7 @@ int ObInnerTableSchema::cdb_ob_archivelog_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, CASE WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) = 0 THEN 0 ELSE ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) / (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES), 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, CASE WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) = 0 THEN 0 ELSE ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) / (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES), 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, COMMENT, PATH FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2209,7 +2209,7 @@ int ObInnerTableSchema::cdb_ob_archivelog_summary_schema(ObTableSchema &table_sc table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, PATH, COMMENT FROM ( SELECT TENANT_ID, DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE STATUS != 'STOP' UNION SELECT TENANT_ID, DEST_ID, ROUND_ID, DEST_NO, 'STOP' AS STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_HISTORY) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CASE WHEN START_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(START_SCN) END AS START_SCN_DISPLAY, CHECKPOINT_SCN, CASE WHEN CHECKPOINT_SCN = 0 THEN '' ELSE SCN_TO_TIMESTAMP(CHECKPOINT_SCN) END AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, PATH, COMMENT FROM ( SELECT TENANT_ID, DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE STATUS != 'STOP' UNION SELECT TENANT_ID, DEST_ID, ROUND_ID, INCARNATION, DEST_NO, 'STOP' AS STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, COMMENT FROM OCEANBASE.__ALL_VIRTUAL_LOG_ARCHIVE_HISTORY) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.25151_25200.cpp b/src/share/inner_table/ob_inner_table_schema.25151_25200.cpp index 87f2d7ecf..4dec78714 100644 --- a/src/share/inner_table/ob_inner_table_schema.25151_25200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.25151_25200.cpp @@ -1359,7 +1359,7 @@ int ObInnerTableSchema::dba_ob_backup_jobs_ora_schema(ObTableSchema &table_schem table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, RESULT, "COMMENT", DESCRIPTION, PATH FROM SYS.ALL_VIRTUAL_BACKUP_JOB WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, RESULT, "COMMENT", DESCRIPTION, PATH FROM SYS.ALL_VIRTUAL_BACKUP_JOB WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1409,7 +1409,7 @@ int ObInnerTableSchema::dba_ob_backup_job_history_ora_schema(ObTableSchema &tabl table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, RESULT, "COMMENT", DESCRIPTION, PATH FROM SYS.ALL_VIRTUAL_BACKUP_JOB_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, PLUS_ARCHIVELOG, BACKUP_TYPE, JOB_LEVEL, ENCRYPTION_MODE, PASSWD, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, RESULT, "COMMENT", DESCRIPTION, PATH FROM SYS.ALL_VIRTUAL_BACKUP_JOB_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1459,7 +1459,7 @@ int ObInnerTableSchema::dba_ob_backup_tasks_ora_schema(ObTableSchema &table_sche table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_BACKUP_TASK WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, INCARNATION, BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_BACKUP_TASK WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1509,7 +1509,7 @@ int ObInnerTableSchema::dba_ob_backup_task_history_ora_schema(ObTableSchema &tab table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_BACKUP_TASK_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, INCARNATION, BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, START_SCN, END_SCN, USER_LS_START_SCN, ENCRYPTION_MODE, PASSWD, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_BACKUP_TASK_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1559,7 +1559,7 @@ int ObInnerTableSchema::dba_ob_backup_set_files_ora_schema(ObTableSchema &table_ table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT BACKUP_SET_ID, DEST_ID, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, SCN_TO_TIMESTAMP(START_REPLAY_SCN) AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, "COMMENT", ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH FROM SYS.ALL_VIRTUAL_BACKUP_SET_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, SCN_TO_TIMESTAMP(START_REPLAY_SCN) AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, "COMMENT", ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH FROM SYS.ALL_VIRTUAL_BACKUP_SET_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1909,7 +1909,7 @@ int ObInnerTableSchema::dba_ob_backup_delete_jobs_ora_schema(ObTableSchema &tabl table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, TO_CHAR(PARAMETER / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS PARAMETER, JOB_LEVEL, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, "COMMENT" FROM SYS.ALL_VIRTUAL_BACKUP_DELETE_JOB WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, TO_CHAR(PARAMETER / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS PARAMETER, JOB_LEVEL, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, "COMMENT" FROM SYS.ALL_VIRTUAL_BACKUP_DELETE_JOB WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1959,7 +1959,7 @@ int ObInnerTableSchema::dba_ob_backup_delete_job_history_ora_schema(ObTableSchem table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, TO_CHAR(PARAMETER / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS PARAMETER, JOB_LEVEL, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, "COMMENT" FROM SYS.ALL_VIRTUAL_BACKUP_DELETE_JOB_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT JOB_ID, INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, TYPE, TO_CHAR(PARAMETER / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS PARAMETER, JOB_LEVEL, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, TASK_COUNT, SUCCESS_TASK_COUNT, RESULT, "COMMENT" FROM SYS.ALL_VIRTUAL_BACKUP_DELETE_JOB_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2009,7 +2009,7 @@ int ObInnerTableSchema::dba_ob_backup_delete_tasks_ora_schema(ObTableSchema &tab table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_BACKUP_DELETE_TASK WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, INCARNATION, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_BACKUP_DELETE_TASK WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2059,7 +2059,7 @@ int ObInnerTableSchema::dba_ob_backup_delete_task_history_ora_schema(ObTableSche table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_BACKUP_DELETE_TASK_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TASK_ID, INCARNATION, JOB_ID, TASK_TYPE, ID, ROUND_ID, DEST_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN '' ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, TOTAL_LS_COUNT, FINISH_LS_COUNT, RESULT, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_BACKUP_DELETE_TASK_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2259,7 +2259,7 @@ int ObInnerTableSchema::dba_ob_archivelog_ora_schema(ObTableSchema &table_schema table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, SCN_TO_TIMESTAMP(START_SCN) AS START_SCN_DISPLAY, CHECKPOINT_SCN, SCN_TO_TIMESTAMP(CHECKPOINT_SCN) AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, CASE WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) = 0 THEN 0 ELSE ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) / (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES), 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, SCN_TO_TIMESTAMP(START_SCN) AS START_SCN_DISPLAY, CHECKPOINT_SCN, SCN_TO_TIMESTAMP(CHECKPOINT_SCN) AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES)/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, CASE WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024/1024,2), 'PB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024/1024,2), 'TB') WHEN (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) >= 1024*1024*1024 THEN CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES)/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) = 0 THEN 0 ELSE ROUND((FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) / (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES), 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, "COMMENT", PATH FROM SYS.ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2309,7 +2309,7 @@ int ObInnerTableSchema::dba_ob_archivelog_summary_ora_schema(ObTableSchema &tabl table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, SCN_TO_TIMESTAMP(START_SCN) AS START_SCN_DISPLAY, CHECKPOINT_SCN, SCN_TO_TIMESTAMP(CHECKPOINT_SCN) AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, PATH, "COMMENT" FROM ( SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, "COMMENT" FROM SYS.ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND STATUS != 'STOP' UNION SELECT DEST_ID, ROUND_ID, DEST_NO, 'STOP' AS STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, "COMMENT" FROM SYS.ALL_VIRTUAL_LOG_ARCHIVE_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, SCN_TO_TIMESTAMP(START_SCN) AS START_SCN_DISPLAY, CHECKPOINT_SCN, SCN_TO_TIMESTAMP(CHECKPOINT_SCN) AS CHECKPOINT_SCN_DISPLAY, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, DELETED_INPUT_BYTES, CASE WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_INPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_INPUT_BYTES_DISPLAY, DELETED_OUTPUT_BYTES, CASE WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN DELETED_OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(DELETED_OUTPUT_BYTES/1024/1024,2), 'MB') END AS DELETED_OUTPUT_BYTES_DISPLAY, PATH, "COMMENT" FROM ( SELECT DEST_ID, ROUND_ID, INCARNATION, DEST_NO, STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, (FROZEN_INPUT_BYTES + ACTIVE_INPUT_BYTES) AS INPUT_BYTES, (FROZEN_OUTPUT_BYTES + ACTIVE_OUTPUT_BYTES) AS OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, "COMMENT" FROM SYS.ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND STATUS != 'STOP' UNION SELECT DEST_ID, ROUND_ID, INCARNATION, DEST_NO, 'STOP' AS STATUS, START_SCN, CHECKPOINT_SCN, COMPATIBLE, BASE_PIECE_ID, USED_PIECE_ID, PIECE_SWITCH_INTERVAL, UNIT_SIZE, COMPRESSION, INPUT_BYTES, OUTPUT_BYTES, DELETED_INPUT_BYTES, DELETED_OUTPUT_BYTES, PATH, "COMMENT" FROM SYS.ALL_VIRTUAL_LOG_ARCHIVE_HISTORY WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2359,7 +2359,7 @@ int ObInnerTableSchema::dba_ob_archivelog_piece_files_ora_schema(ObTableSchema & table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, PIECE_ID, DEST_NO, STATUS, START_SCN, SCN_TO_TIMESTAMP(START_SCN) AS START_SCN_DISPLAY, CHECKPOINT_SCN, SCN_TO_TIMESTAMP(CHECKPOINT_SCN) AS CHECKPOINT_SCN_DISPLAY, MAX_SCN, END_SCN, COMPATIBLE, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, FILE_STATUS, PATH FROM SYS.ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT DEST_ID, ROUND_ID, PIECE_ID, INCARNATION, DEST_NO, STATUS, START_SCN, SCN_TO_TIMESTAMP(START_SCN) AS START_SCN_DISPLAY, CHECKPOINT_SCN, SCN_TO_TIMESTAMP(CHECKPOINT_SCN) AS CHECKPOINT_SCN_DISPLAY, MAX_SCN, END_SCN, COMPATIBLE, UNIT_SIZE, COMPRESSION, INPUT_BYTES, CASE WHEN INPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN INPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN INPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(INPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(INPUT_BYTES/1024/1024,2), 'MB') END AS INPUT_BYTES_DISPLAY, OUTPUT_BYTES, CASE WHEN OUTPUT_BYTES >= 1024*1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024/1024,2), 'PB') WHEN OUTPUT_BYTES >= 1024*1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024/1024,2), 'TB') WHEN OUTPUT_BYTES >= 1024*1024*1024 THEN CONCAT(ROUND(OUTPUT_BYTES/1024/1024/1024,2), 'GB') ELSE CONCAT(ROUND(OUTPUT_BYTES/1024/1024,2), 'MB') END AS OUTPUT_BYTES_DISPLAY, CASE WHEN INPUT_BYTES = 0 THEN 0 ELSE ROUND(OUTPUT_BYTES / INPUT_BYTES, 2) END AS COMPRESSION_RATIO, FILE_STATUS, PATH FROM SYS.ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index 0fa759ca2..f7388aec6 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -13928,6 +13928,7 @@ def_table_schema( DEST_ID, ROUND_ID, PIECE_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -13996,6 +13997,7 @@ def_table_schema( TENANT_ID, BACKUP_SET_ID, DEST_ID, + INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, @@ -14269,6 +14271,7 @@ def_table_schema( SELECT TENANT_ID, JOB_ID, + INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, @@ -14306,6 +14309,7 @@ def_table_schema( SELECT TENANT_ID, JOB_ID, + INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, @@ -14344,6 +14348,7 @@ def_table_schema( TENANT_ID, TASK_ID, JOB_ID, + INCARNATION, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE @@ -14394,6 +14399,7 @@ def_table_schema( TENANT_ID, TASK_ID, JOB_ID, + INCARNATION, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE @@ -19591,6 +19597,7 @@ def_table_schema( SELECT TENANT_ID, JOB_ID, + INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, @@ -19625,6 +19632,7 @@ def_table_schema( SELECT TENANT_ID, JOB_ID, + INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, @@ -19659,6 +19667,7 @@ def_table_schema( SELECT TENANT_ID, TASK_ID, + INCARNATION, JOB_ID, TASK_TYPE, ID, @@ -19693,6 +19702,7 @@ def_table_schema( SELECT TENANT_ID, TASK_ID, + INCARNATION, JOB_ID, TASK_TYPE, ID, @@ -20440,6 +20450,7 @@ def_table_schema( view_definition = """ SELECT JOB_ID, + INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, @@ -20479,6 +20490,7 @@ def_table_schema( view_definition = """ SELECT JOB_ID, + INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, @@ -20519,6 +20531,7 @@ def_table_schema( SELECT TASK_ID, JOB_ID, + INCARNATION, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE @@ -20571,6 +20584,7 @@ def_table_schema( SELECT TASK_ID, JOB_ID, + INCARNATION, BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE @@ -20623,6 +20637,7 @@ def_table_schema( SELECT BACKUP_SET_ID, DEST_ID, + INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, @@ -21131,6 +21146,7 @@ def_table_schema( view_definition = """ SELECT JOB_ID, + INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, @@ -21167,6 +21183,7 @@ def_table_schema( view_definition = """ SELECT JOB_ID, + INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, @@ -21203,6 +21220,7 @@ def_table_schema( view_definition = """ SELECT TASK_ID, + INCARNATION, JOB_ID, TASK_TYPE, ID, @@ -21239,6 +21257,7 @@ def_table_schema( view_definition = """ SELECT TASK_ID, + INCARNATION, JOB_ID, TASK_TYPE, ID, @@ -21525,6 +21544,7 @@ def_table_schema( SELECT DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -21618,6 +21638,7 @@ def_table_schema( SELECT DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -21696,6 +21717,7 @@ def_table_schema( ( SELECT DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -21717,6 +21739,7 @@ SELECT DEST_ID, UNION SELECT DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, 'STOP' AS STATUS, START_SCN, @@ -21753,6 +21776,7 @@ def_table_schema( DEST_ID, ROUND_ID, PIECE_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -21863,6 +21887,7 @@ def_table_schema( TENANT_ID, DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -21955,6 +21980,7 @@ def_table_schema( TENANT_ID, DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -22034,6 +22060,7 @@ def_table_schema( SELECT TENANT_ID, DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -22056,6 +22083,7 @@ UNION SELECT TENANT_ID, DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, 'STOP' AS STATUS, START_SCN, @@ -38359,6 +38387,7 @@ def_table_schema( """ SELECT JOB_ID, + INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, @@ -38400,6 +38429,7 @@ def_table_schema( view_definition = """ SELECT JOB_ID, + INCARNATION, BACKUP_SET_ID, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, @@ -38442,6 +38472,7 @@ def_table_schema( SELECT TASK_ID, JOB_ID, + INCARNATION, BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE @@ -38496,6 +38527,7 @@ def_table_schema( SELECT TASK_ID, JOB_ID, + INCARNATION, BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE @@ -38550,6 +38582,7 @@ def_table_schema( SELECT BACKUP_SET_ID, DEST_ID, + INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, @@ -38878,6 +38911,7 @@ def_table_schema( view_definition = """ SELECT JOB_ID, + INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, @@ -38916,6 +38950,7 @@ def_table_schema( view_definition = """ SELECT JOB_ID, + INCARNATION, INITIATOR_TENANT_ID, INITIATOR_JOB_ID, EXECUTOR_TENANT_ID, @@ -38954,6 +38989,7 @@ def_table_schema( view_definition = """ SELECT TASK_ID, + INCARNATION, JOB_ID, TASK_TYPE, ID, @@ -38992,6 +39028,7 @@ def_table_schema( view_definition = """ SELECT TASK_ID, + INCARNATION, JOB_ID, TASK_TYPE, ID, @@ -39219,6 +39256,7 @@ def_table_schema( SELECT DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -39304,6 +39342,7 @@ def_table_schema( SELECT DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -39372,6 +39411,7 @@ def_table_schema( ( SELECT DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, @@ -39393,6 +39433,7 @@ SELECT DEST_ID, UNION SELECT DEST_ID, ROUND_ID, + INCARNATION, DEST_NO, 'STOP' AS STATUS, START_SCN, @@ -39431,6 +39472,7 @@ def_table_schema( DEST_ID, ROUND_ID, PIECE_ID, + INCARNATION, DEST_NO, STATUS, START_SCN, diff --git a/src/share/ob_rpc_struct.cpp b/src/share/ob_rpc_struct.cpp index 3e51de755..0165e243f 100644 --- a/src/share/ob_rpc_struct.cpp +++ b/src/share/ob_rpc_struct.cpp @@ -6029,8 +6029,7 @@ OB_SERIALIZE_MEMBER(ObCreateTabletInfo, tablet_ids_, data_tablet_id_, table_sche bool ObBatchCreateTabletArg::is_inited() const { - return id_.is_valid() - && OB_INVALID_TIMESTAMP != frozen_timestamp_; + return id_.is_valid() && major_frozen_scn_.is_valid(); } bool ObBatchCreateTabletArg::is_valid() const @@ -6060,7 +6059,7 @@ bool ObBatchCreateTabletArg::is_valid() const void ObBatchCreateTabletArg::reset() { id_.reset(); - frozen_timestamp_ = OB_INVALID_TIMESTAMP; + major_frozen_scn_.reset(); tablets_.reset(); table_schemas_.reset(); } @@ -6077,7 +6076,7 @@ int ObBatchCreateTabletArg::assign(const ObBatchCreateTabletArg &arg) LOG_WARN("failed to assign table schema", KR(ret), K(arg)); } else { id_ = arg.id_; - frozen_timestamp_ = arg.frozen_timestamp_; + major_frozen_scn_ = arg.major_frozen_scn_; } return ret; } @@ -6101,16 +6100,15 @@ int ObContextDDLArg::assign(const ObContextDDLArg &other) return ret; } -int ObBatchCreateTabletArg::init_create_tablet(const share::ObLSID &id, const int64_t &frozen_timestamp) +int ObBatchCreateTabletArg::init_create_tablet(const share::ObLSID &id, const palf::SCN &major_frozen_scn) { int ret = OB_SUCCESS; - if (OB_UNLIKELY(!id.is_valid() - || OB_INVALID_TIMESTAMP == frozen_timestamp)) { + if (OB_UNLIKELY(!id.is_valid() || !major_frozen_scn.is_valid())) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid argument", KR(ret), K(id), K(frozen_timestamp)); + LOG_WARN("invalid argument", KR(ret), K(id), K(major_frozen_scn)); } else { id_ = id; - frozen_timestamp_ = frozen_timestamp; + major_frozen_scn_ = major_frozen_scn; } return ret; } @@ -6128,11 +6126,11 @@ int64_t ObBatchCreateTabletArg::get_tablet_count() const DEF_TO_STRING(ObBatchCreateTabletArg) { int64_t pos = 0; - J_KV(K_(id), K_(frozen_timestamp), K_(tablets)); + J_KV(K_(id), K_(major_frozen_scn), K_(tablets)); return pos; } -OB_SERIALIZE_MEMBER(ObBatchCreateTabletArg, id_, frozen_timestamp_, +OB_SERIALIZE_MEMBER(ObBatchCreateTabletArg, id_, major_frozen_scn_, tablets_, table_schemas_); OB_SERIALIZE_MEMBER(ObCreateLSResult, ret_); diff --git a/src/share/ob_rpc_struct.h b/src/share/ob_rpc_struct.h index 161301e13..1dca9438b 100644 --- a/src/share/ob_rpc_struct.h +++ b/src/share/ob_rpc_struct.h @@ -2709,13 +2709,13 @@ public: void reset(); int assign(const ObBatchCreateTabletArg &arg); int init_create_tablet(const share::ObLSID &id_, - const int64_t &frozen_timestamp); + const palf::SCN &major_frozen_scn); int64_t get_tablet_count() const; DECLARE_TO_STRING; public: share::ObLSID id_; - int64_t frozen_timestamp_; + palf::SCN major_frozen_scn_; common::ObSArray table_schemas_; common::ObSArray tablets_; }; diff --git a/src/share/schema/ob_table_schema.cpp b/src/share/schema/ob_table_schema.cpp index 2627cca2a..198a89fc8 100644 --- a/src/share/schema/ob_table_schema.cpp +++ b/src/share/schema/ob_table_schema.cpp @@ -3826,6 +3826,11 @@ int ObTableSchema::check_alter_column_type(const ObColumnSchemaV2 &src_column, || (src_meta.is_varbinary() && dst_meta.is_blob()) || (src_meta.is_text() && (dst_meta.is_text() || dst_meta.is_varchar())) || (src_meta.is_blob() && (dst_meta.is_blob() || dst_meta.is_varbinary())))) { + if (src_meta.is_integer_type() && dst_meta.is_integer_type()) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("Type increment of integer type is not supported", K(ret), K(src_meta), K(dst_meta)); + LOG_USER_ERROR(OB_NOT_SUPPORTED, "Type increment of integer type is"); + } // online, do nothing } else { is_offline = true; diff --git a/src/sql/optimizer/ob_table_location.cpp b/src/sql/optimizer/ob_table_location.cpp index 42f33fb42..51db3498e 100644 --- a/src/sql/optimizer/ob_table_location.cpp +++ b/src/sql/optimizer/ob_table_location.cpp @@ -5139,9 +5139,13 @@ int ObTableLocation::get_full_leader_table_loc(ObIAllocator &allocator, ObSchemaGetterGuard schema_guard; OZ(GCTX.schema_service_->get_tenant_schema_guard(tenant_id, schema_guard)); OZ(schema_guard.get_table_schema(tenant_id, ref_table_id, table_schema)); - CK(OB_NOT_NULL(table_schema)); - OZ(table_schema->get_all_tablet_and_object_ids(tablet_ids, partition_ids)); - CK(table_schema->has_tablet()); + if (OB_ISNULL(table_schema)) { + ret = OB_SCHEMA_ERROR; + LOG_WARN("table schema is null", K(ret), K(table_id), K(tenant_id), K(ref_table_id)); + } else { + OZ(table_schema->get_all_tablet_and_object_ids(tablet_ids, partition_ids)); + CK(table_schema->has_tablet()); + } if (OB_SUCC(ret)) { ObDASTableLocMeta *loc_meta = NULL; char *table_buf = static_cast(allocator.alloc(sizeof(ObDASTableLoc) diff --git a/src/storage/backup/ob_backup_task.cpp b/src/storage/backup/ob_backup_task.cpp index 02ad68ef1..8fbb35a67 100644 --- a/src/storage/backup/ob_backup_task.cpp +++ b/src/storage/backup/ob_backup_task.cpp @@ -3993,7 +3993,6 @@ int ObLSBackupPrepareTask::get_tablet_min_filled_tx_scn_( } else if (tablet->get_tablet_meta().tablet_id_.is_ls_inner_tablet()) { // skip inner tablet } else { - min_filled_tx_scn = tablet->get_tablet_meta().clog_checkpoint_scn_; ObTabletTableStore &table_store = tablet->get_table_store(); const ObSSTableArray &sstable_array = table_store.get_minor_sstables(); has_minor_sstable = !sstable_array.empty(); @@ -4008,8 +4007,8 @@ int ObLSBackupPrepareTask::get_tablet_min_filled_tx_scn_( LOG_WARN("table ptr type not expectedd", K(ret)); } else if (FALSE_IT(sstable = static_cast(table_ptr))) { } else { - palf::SCN filled_tx_scn = sstable->get_meta().get_basic_meta().filled_tx_scn_; - min_filled_tx_scn = std::min(filled_tx_scn, min_filled_tx_scn); + min_filled_tx_scn = std::min( + std::max(sstable->get_meta().get_basic_meta().filled_tx_scn_, sstable->get_end_scn()), min_filled_tx_scn); } } } diff --git a/src/storage/backup/ob_backup_utils.cpp b/src/storage/backup/ob_backup_utils.cpp index 3c110f849..3021e9d3c 100644 --- a/src/storage/backup/ob_backup_utils.cpp +++ b/src/storage/backup/ob_backup_utils.cpp @@ -255,7 +255,7 @@ int ObBackupUtils::check_tablet_minor_sstable_validity_(const storage::ObTabletH LOG_WARN("table ptr not correct", K(ret), KPC(last_table_ptr)); } else { const ObITable::TableKey &table_key = last_table_ptr->get_key(); - if (table_key.get_end_scn() != clog_checkpoint_scn) { + if (table_key.get_end_scn() < clog_checkpoint_scn) { ret = OB_ERR_UNEXPECTED; LOG_ERROR("tablet meta is not valid", K(ret), K(table_key), K(clog_checkpoint_scn)); } diff --git a/src/storage/blocksstable/encoding/ob_icolumn_encoder.h b/src/storage/blocksstable/encoding/ob_icolumn_encoder.h index b571f8a57..cb8bd6fd6 100644 --- a/src/storage/blocksstable/encoding/ob_icolumn_encoder.h +++ b/src/storage/blocksstable/encoding/ob_icolumn_encoder.h @@ -75,7 +75,7 @@ public: EncoderDesc &get_desc() { return desc_; } ObColumnHeader &get_column_header() { return column_header_; } - + ObObjType get_obj_type() { return column_type_.get_type(); } // var data store only virtual int set_data_pos(const int64_t offset, const int64_t length) { diff --git a/src/storage/blocksstable/encoding/ob_micro_block_encoder.cpp b/src/storage/blocksstable/encoding/ob_micro_block_encoder.cpp index eac3797a0..666089813 100644 --- a/src/storage/blocksstable/encoding/ob_micro_block_encoder.cpp +++ b/src/storage/blocksstable/encoding/ob_micro_block_encoder.cpp @@ -521,15 +521,15 @@ int ObMicroBlockEncoder::store_encoding_meta_and_fix_cols(int64_t &encoding_meta if (OB_FAIL(encoders_.at(i)->store_meta(data_buffer_))) { LOG_WARN("store encoding meta failed", K(ret)); } else { + ObColumnHeader &ch = encoders_.at(i)->get_column_header(); if (data_buffer_.pos() > pos_bak) { - ObColumnHeader &ch = encoders_.at(i)->get_column_header(); ch.offset_ = static_cast(pos_bak - encoding_meta_offset); ch.length_ = static_cast(data_buffer_.pos() - pos_bak); } else if (ObColumnHeader::RAW == encoders_.at(i)->get_type()) { // column header offset records the start pos of the fix data, if needed - ObColumnHeader &ch = encoders_.at(i)->get_column_header(); ch.offset_ = static_cast(pos_bak - encoding_meta_offset); } + ch.obj_type_ = static_cast(encoders_.at(i)->get_obj_type()); } if (OB_SUCC(ret) && !desc.is_var_data_ && desc.need_data_store_) { diff --git a/src/storage/blocksstable/ob_block_sstable_struct.h b/src/storage/blocksstable/ob_block_sstable_struct.h index ee76b5ca6..d91458119 100644 --- a/src/storage/blocksstable/ob_block_sstable_struct.h +++ b/src/storage/blocksstable/ob_block_sstable_struct.h @@ -293,7 +293,7 @@ struct ObColumnHeader int8_t version_; int8_t type_; int8_t attr_; - int8_t reserved_; + uint8_t obj_type_; union { uint32_t extend_value_offset_; // for var column null-bitmap stored continuously uint32_t extend_value_index_; @@ -301,9 +301,16 @@ struct ObColumnHeader uint32_t offset_; uint32_t length_; + static_assert(UINT8_MAX >= ObObjType::ObMaxType, "ObObjType is stored in ObColumnHeader with 1 byte"); ObColumnHeader() { reuse(); } void reuse() { memset(this, 0, sizeof(*this)); } - bool is_valid() const { return version_ == OB_COLUMN_HEADER_V1 && type_ >= 0 && type_ < MAX_TYPE; } + bool is_valid() const + { + return version_ == OB_COLUMN_HEADER_V1 + && type_ >= 0 + && type_ < MAX_TYPE + && obj_type_ < ObObjType::ObMaxType; + } inline bool is_fix_length() const { return attr_ & FIX_LENGTH; } inline bool has_extend_value() const { return attr_ & HAS_EXTEND_VALUE; } @@ -318,6 +325,7 @@ struct ObColumnHeader { return COLUMN_EQUAL == type || COLUMN_SUBSTR == type; } + inline ObObjType get_store_obj_type() const { return static_cast(obj_type_); } inline void set_fix_lenght_attr() { attr_ |= FIX_LENGTH; } inline void set_has_extend_value_attr() { attr_ |= HAS_EXTEND_VALUE; } @@ -325,7 +333,8 @@ struct ObColumnHeader inline void set_last_var_field_attr() { attr_ |= LAST_VAR_FIELD; } inline void set_out_row() { attr_ |= OUT_ROW; } - TO_STRING_KV(K_(version), K_(type), K_(attr), K_(extend_value_offset), K_(offset), K_(length)); + TO_STRING_KV(K_(version), K_(type), K_(attr), K_(obj_type), + K_(extend_value_offset), K_(offset), K_(length)); } __attribute__((packed)); diff --git a/src/storage/compaction/ob_tablet_merge_ctx.cpp b/src/storage/compaction/ob_tablet_merge_ctx.cpp index 9571c94a4..d9da18172 100644 --- a/src/storage/compaction/ob_tablet_merge_ctx.cpp +++ b/src/storage/compaction/ob_tablet_merge_ctx.cpp @@ -785,6 +785,7 @@ int ObTabletMergeCtx::update_tablet_directly(const ObGetMergeTablesResult &get_m int ret = OB_SUCCESS; const int64_t rebuild_seq = ls_handle_.get_ls()->get_rebuild_seq(); scn_range_ = get_merge_table_result.scn_range_; + palf::SCN clog_checkpoint_scn = get_merge_table_result.scn_range_.end_scn_; ObTableHandleV2 empty_table_handle; ObUpdateTableStoreParam param( @@ -794,7 +795,7 @@ int ObTabletMergeCtx::update_tablet_directly(const ObGetMergeTablesResult &get_m schema_ctx_.storage_schema_, rebuild_seq, param_.is_major_merge(), - palf::SCN::min_scn()/*clog_checkpoint_scn*/); + clog_checkpoint_scn); ObTabletHandle new_tablet_handle; if (OB_FAIL(ls_handle_.get_ls()->update_tablet_table_store( param_.tablet_id_, param, new_tablet_handle))) { diff --git a/src/storage/compaction/ob_tx_table_merge_task.cpp b/src/storage/compaction/ob_tx_table_merge_task.cpp index 673232b59..2498fc44c 100644 --- a/src/storage/compaction/ob_tx_table_merge_task.cpp +++ b/src/storage/compaction/ob_tx_table_merge_task.cpp @@ -67,20 +67,20 @@ int ObTxTableMergeDag::init_by_param(const ObIDagInitParam *param) } else if (merge_param->tablet_id_.is_ls_tx_data_tablet() && merge_param->is_minor_merge()) { // init compaction filter for minor merge in TxDataTable ObTxTableGuard guard; - int64_t recycle_ts = 0; + palf::SCN recycle_scn = palf::SCN::min_scn(); int tmp_ret = OB_SUCCESS; if (OB_TMP_FAIL(ctx_->ls_handle_.get_ls()->get_tx_table_guard(guard))) { LOG_WARN("failed to get tx table", K(tmp_ret), KPC(merge_param)); } else if (OB_UNLIKELY(!guard.is_valid())) { tmp_ret = OB_ERR_UNEXPECTED; LOG_WARN("tx table guard is invalid", K(tmp_ret), KPC(merge_param), K(guard)); - } else if (OB_TMP_FAIL(guard.get_tx_table()->get_recycle_ts(recycle_ts))) { + } else if (OB_TMP_FAIL(guard.get_tx_table()->get_recycle_scn(recycle_scn))) { LOG_WARN("failed to get recycle ts", K(tmp_ret), KPC(merge_param)); - } else if (OB_TMP_FAIL(compaction_filter_.init(recycle_ts, ObTxTable::get_filter_col_idx()))) { - LOG_WARN("failed to get init compaction filter", K(tmp_ret), KPC(merge_param), K(recycle_ts)); + } else if (OB_TMP_FAIL(compaction_filter_.init(recycle_scn.get_val_for_tx(), ObTxTable::get_filter_col_idx()))) { + LOG_WARN("failed to get init compaction filter", K(tmp_ret), KPC(merge_param), K(recycle_scn)); } else { ctx_->compaction_filter_ = &compaction_filter_; - FLOG_INFO("success to init compaction filter", K(tmp_ret), K(recycle_ts)); + FLOG_INFO("success to init compaction filter", K(tmp_ret), K(recycle_scn)); } } return ret; diff --git a/src/storage/high_availability/ob_ls_complete_migration.cpp b/src/storage/high_availability/ob_ls_complete_migration.cpp index ca930fbb3..a139a7978 100644 --- a/src/storage/high_availability/ob_ls_complete_migration.cpp +++ b/src/storage/high_availability/ob_ls_complete_migration.cpp @@ -798,7 +798,8 @@ ObStartCompleteMigrationTask::ObStartCompleteMigrationTask() is_inited_(false), ls_handle_(), ctx_(nullptr), - log_sync_scn_(palf::SCN::min_scn()) + log_sync_scn_(palf::SCN::min_scn()), + max_minor_end_scn_(palf::SCN::min_scn()) { } @@ -853,6 +854,8 @@ int ObStartCompleteMigrationTask::process() LOG_WARN("failed to check all tablet ready", K(ret), KPC(ctx_)); } else if (OB_FAIL(wait_trans_tablet_explain_data_())) { LOG_WARN("failed to wait log replay sync", K(ret), KPC(ctx_)); + } else if (OB_FAIL(wait_ls_checkpoint_scn_push_())) { + LOG_WARN("failed to wait ls checkpoint ts push", K(ret), KPC(ctx_)); } else if (OB_FAIL(update_ls_migration_status_hold_())) { LOG_WARN("failed to update ls migration status hold", K(ret), KPC(ctx_)); } else if (OB_FAIL(change_member_list_())) { @@ -1256,6 +1259,12 @@ int ObStartCompleteMigrationTask::check_tablet_ready_( LOG_WARN("tablet should not be NULL", K(ret), KP(tablet), K(tablet_handle), K(tablet_id)); } else if (tablet->get_tablet_meta().ha_status_.is_data_status_complete() || !tablet->get_tablet_meta().ha_status_.is_restore_status_full()) { + ObSSTableArray &minor_sstables = tablet->get_table_store().get_minor_sstables(); + if (minor_sstables.empty()) { + max_minor_end_scn_ = MAX(max_minor_end_scn_, tablet->get_tablet_meta().clog_checkpoint_scn_); + } else { + max_minor_end_scn_ = MAX(max_minor_end_scn_, minor_sstables.array_[minor_sstables.count() - 1]->get_end_scn()); + } break; } else { const int64_t current_ts = ObTimeUtility::current_time(); @@ -1286,6 +1295,103 @@ int ObStartCompleteMigrationTask::check_tablet_ready_( return ret; } +int ObStartCompleteMigrationTask::check_need_wait_checkpoint_scn_push_( + ObLS *ls, + bool &need_wait) +{ + int ret = OB_SUCCESS; + need_wait = true; + + if (!is_inited_) { + ret = OB_NOT_INIT; + LOG_WARN("start complete migration task do not init", K(ret)); + } else if (OB_ISNULL(ls)) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("check need wait log sync get invalid argument", K(ret), KP(ls)); + } else if (ObMigrationOpType::ADD_LS_OP == ctx_->arg_.type_ + || ObMigrationOpType::MIGRATE_LS_OP == ctx_->arg_.type_) { + need_wait = true; + ObLSRestoreStatus ls_restore_status; + if (OB_FAIL(ls->get_restore_status(ls_restore_status))) { + LOG_WARN("failed to get restore status", K(ret), KPC(ctx_)); + } else if (!ls_restore_status.is_in_restore()) { + need_wait = true; + } else if (!ls_restore_status.can_restore_log()) { + need_wait = false; + } + } + return ret; +} + +//TODO(muwei.ym) remove it later +int ObStartCompleteMigrationTask::wait_ls_checkpoint_scn_push_() +{ + int ret = OB_SUCCESS; + ObLSHandle ls_handle; + ObLS *ls = nullptr; + checkpoint::ObCheckpointExecutor *checkpoint_executor = NULL; + const int64_t MAX_WAIT_INTERVAL_BY_CHECKPOINT_BY_FLUSH = GCONF._advance_checkpoint_timeout; + const int64_t MAX_SLEEP_INTERVAL_MS = 1 * 1000 * 1000; //1s + bool is_cancel = false; + bool need_wait = true; + + if (!is_inited_) { + ret = OB_NOT_INIT; + LOG_WARN("start complete migration task do not init", K(ret)); + } else if (OB_FAIL(ObStorageHADagUtils::get_ls(ctx_->arg_.ls_id_, ls_handle))) { + LOG_WARN("failed to get ls", K(ret), KPC(ctx_)); + } else if (OB_ISNULL(ls = ls_handle.get_ls())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("ls should not be NULL", K(ret), KP(ls), KPC(ctx_)); + } else if (OB_FAIL(check_need_wait_checkpoint_scn_push_(ls, need_wait))) { + LOG_WARN("failed to check need wait log sync", K(ret), KPC(ls), KPC(ctx_)); + } else if (!need_wait) { + LOG_INFO("no need to wait ls checkpoint ts push", K(ret), KPC(ctx_)); + } else if (OB_ISNULL(checkpoint_executor = ls->get_checkpoint_executor())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("checkpoint executor should not be NULL", K(ret), KPC(ctx_), KP(checkpoint_executor)); + } else { + const int64_t wait_checkpoint_push_start_ts = ObTimeUtility::current_time(); + palf::SCN checkpoint_scn = palf::SCN::min_scn(); + while (OB_SUCC(ret)) { + if (ctx_->is_failed()) { + ret = OB_CANCELED; + STORAGE_LOG(WARN, "ls migration task is failed, cancel wait ls check point ts push", K(ret)); + } else if (OB_FAIL(SYS_TASK_STATUS_MGR.is_task_cancel(get_dag()->get_dag_id(), is_cancel))) { + STORAGE_LOG(ERROR, "failed to check is task canceled", K(ret), K(*this)); + } else if (is_cancel) { + ret = OB_CANCELED; + STORAGE_LOG(WARN, "task is cancelled", K(ret), K(*this)); + } else if (FALSE_IT(checkpoint_scn = ls->get_clog_checkpoint_scn())) { + } else if (checkpoint_scn >= max_minor_end_scn_) { + const int64_t cost_ts = ObTimeUtility::current_time() - wait_checkpoint_push_start_ts; + LOG_INFO("succeed wait clog checkpoint ts push", "cost", cost_ts, "ls_id", ctx_->arg_.ls_id_); + break; + } else if (OB_FAIL(checkpoint_executor->advance_checkpoint_by_flush(max_minor_end_scn_))) { + if (OB_NO_NEED_UPDATE == ret) { + ret = OB_SUCCESS; + } else { + LOG_WARN("failed to advance checkpoint by flush", K(ret), KPC(ctx_)); + } + } + + if (OB_SUCC(ret)) { + const int64_t current_ts = ObTimeUtility::current_time(); + if (current_ts - wait_checkpoint_push_start_ts >= MAX_WAIT_INTERVAL_BY_CHECKPOINT_BY_FLUSH) { + ret = OB_TIMEOUT; + LOG_WARN("wait ls checkpoint ts push time out", + "ls_checkpoint_scn", checkpoint_scn, "need_checkpoint_scn", max_minor_end_scn_, "ls_id", ctx_->arg_.ls_id_); + } else { + LOG_INFO("wait ls checkpoint ts push", "ls_checkpoint_scn", checkpoint_scn, + "need_checkpoint_scn", max_minor_end_scn_, "ls_id", ctx_->arg_.ls_id_); + ob_usleep(MAX_SLEEP_INTERVAL_MS); + } + } + } + } + return ret; +} + int ObStartCompleteMigrationTask::record_server_event_() { int ret = OB_SUCCESS; diff --git a/src/storage/high_availability/ob_ls_complete_migration.h b/src/storage/high_availability/ob_ls_complete_migration.h index e497e1fa0..6f4e40c8f 100644 --- a/src/storage/high_availability/ob_ls_complete_migration.h +++ b/src/storage/high_availability/ob_ls_complete_migration.h @@ -181,6 +181,10 @@ private: int check_tablet_ready_( const common::ObTabletID &tablet_id, ObLS *ls); + int check_need_wait_checkpoint_scn_push_( + ObLS *ls, + bool &need_wait); + int wait_ls_checkpoint_scn_push_(); int record_server_event_(); private: @@ -188,6 +192,7 @@ private: ObLSHandle ls_handle_; ObLSCompleteMigrationCtx *ctx_; palf::SCN log_sync_scn_; + palf::SCN max_minor_end_scn_; DISALLOW_COPY_AND_ASSIGN(ObStartCompleteMigrationTask); }; diff --git a/src/storage/high_availability/ob_ls_migration.cpp b/src/storage/high_availability/ob_ls_migration.cpp index b91255b91..30cf24ff0 100644 --- a/src/storage/high_availability/ob_ls_migration.cpp +++ b/src/storage/high_availability/ob_ls_migration.cpp @@ -36,8 +36,6 @@ ObMigrationCtx::ObMigrationCtx() : ObIHADagNetCtx(), tenant_id_(OB_INVALID_ID), arg_(), - local_clog_checkpoint_ts_(0), - local_rebuild_seq_(0), start_ts_(0), finish_ts_(0), task_id_(), @@ -49,6 +47,7 @@ ObMigrationCtx::ObMigrationCtx() ha_table_info_mgr_(), check_tablet_info_cost_time_(0) { + local_clog_checkpoint_scn_.set_min(); } ObMigrationCtx::~ObMigrationCtx() @@ -65,7 +64,7 @@ void ObMigrationCtx::reset() { tenant_id_ = OB_INVALID_ID; arg_.reset(); - local_clog_checkpoint_ts_ = 0; + local_clog_checkpoint_scn_.set_min(); local_rebuild_seq_ = 0; start_ts_ = 0; finish_ts_ = 0; @@ -109,7 +108,7 @@ int ObMigrationCtx::fill_comment(char *buf, const int64_t buf_len) const void ObMigrationCtx::reuse() { - local_clog_checkpoint_ts_ = 0; + local_clog_checkpoint_scn_.set_min(); local_rebuild_seq_ = 0; minor_src_.reset(); major_src_.reset(); @@ -1052,7 +1051,7 @@ int ObStartMigrationTask::deal_with_local_ls_() if (OB_FAIL(ls->get_ls_meta(local_ls_meta))) { LOG_WARN("failed to get ls meta", K(ret), "arg", ctx_->arg_); } else { - ctx_->local_clog_checkpoint_ts_ = local_ls_meta.get_clog_checkpoint_ts(); + ctx_->local_clog_checkpoint_scn_ = local_ls_meta.get_clog_checkpoint_scn(); ctx_->local_rebuild_seq_ = local_ls_meta.get_rebuild_seq(); common::ObReplicaType replica_type = ctx_->arg_.dst_.get_replica_type(); common::ObReplicaType local_replica_type = ls->get_replica_type(); @@ -1082,13 +1081,13 @@ int ObStartMigrationTask::choose_src_() const share::ObLSID &ls_id = ctx_->arg_.ls_id_; ObStorageHASrcInfo src_info; obrpc::ObCopyLSInfo ls_info; - int64_t local_clog_checkpoint_ts = 0; - if (OB_FAIL(get_local_ls_checkpoint_ts_(local_clog_checkpoint_ts))) { + palf::SCN local_clog_checkpoint_scn = palf::SCN::min_scn(); + if (OB_FAIL(get_local_ls_checkpoint_scn_(local_clog_checkpoint_scn))) { LOG_WARN("failed to get local ls checkpoint ts", K(ret)); } else if (OB_FAIL(src_provider.init(tenant_id, storage_rpc_))) { LOG_WARN("failed to init src provider", K(ret), K(tenant_id)); - } else if (OB_FAIL(src_provider.choose_ob_src(ls_id, local_clog_checkpoint_ts, src_info))) { - LOG_WARN("failed to choose ob src", K(ret), K(tenant_id), K(ls_id), K(local_clog_checkpoint_ts)); + } else if (OB_FAIL(src_provider.choose_ob_src(ls_id, local_clog_checkpoint_scn, src_info))) { + LOG_WARN("failed to choose ob src", K(ret), K(tenant_id), K(ls_id), K(local_clog_checkpoint_scn)); } else if (OB_FAIL(fetch_ls_info_(tenant_id, ls_id, src_info.src_addr_, ls_info))) { LOG_WARN("failed to fetch ls info", K(ret), K(tenant_id), K(ls_id), K(src_info)); } else { @@ -1135,10 +1134,10 @@ int ObStartMigrationTask::fetch_ls_info_(const uint64_t tenant_id, const share:: return ret; } -int ObStartMigrationTask::get_local_ls_checkpoint_ts_(int64_t &local_checkpoint_ts) +int ObStartMigrationTask::get_local_ls_checkpoint_scn_(palf::SCN &local_checkpoint_scn) { int ret = OB_SUCCESS; - local_checkpoint_ts = 0; + local_checkpoint_scn.set_min(); ObLSHandle ls_handle; ObLS *ls = NULL; ObLSMeta local_ls_meta; @@ -1153,7 +1152,7 @@ int ObStartMigrationTask::get_local_ls_checkpoint_ts_(int64_t &local_checkpoint_ } else if (OB_FAIL(ls->get_ls_meta(local_ls_meta))) { LOG_WARN("failed to get ls meta", K(ret), "arg", ctx_->arg_); } else { - local_checkpoint_ts = local_ls_meta.get_clog_checkpoint_ts(); + local_checkpoint_scn = local_ls_meta.get_clog_checkpoint_scn(); } return ret; } @@ -1189,7 +1188,7 @@ int ObStartMigrationTask::update_ls_() } else if (OB_FAIL(ls->advance_base_info(ctx_->src_ls_meta_package_.palf_meta_, is_rebuild))) { LOG_WARN("failed to advance base lsn for migration", K(ret), KPC(ctx_)); } else { - ctx_->local_clog_checkpoint_ts_ = ctx_->src_ls_meta_package_.ls_meta_.get_clog_checkpoint_ts(); + ctx_->local_clog_checkpoint_scn_ = ctx_->src_ls_meta_package_.ls_meta_.get_clog_checkpoint_scn(); ctx_->local_rebuild_seq_ = ctx_->src_ls_meta_package_.ls_meta_.get_rebuild_seq(); } } @@ -2106,13 +2105,11 @@ int ObTabletMigrationDag::inner_reset_status_for_retry() "ls_id", ctx->arg_.ls_id_.id(), "tablet_id", copy_tablet_ctx_.tablet_id_, "result", result, "retry_count", retry_count); - if (OB_SSTABLE_NOT_EXIST == result) { - if (OB_FAIL(ctx->ha_table_info_mgr_.remove_tablet_table_info(copy_tablet_ctx_.tablet_id_))) { - if (OB_HASH_NOT_EXIST == ret) { - ret = OB_SUCCESS; - } else { - LOG_WARN("failed to remove tablet info", K(ret), KPC(ctx), K(copy_tablet_ctx_)); - } + if (OB_FAIL(ctx->ha_table_info_mgr_.remove_tablet_table_info(copy_tablet_ctx_.tablet_id_))) { + if (OB_HASH_NOT_EXIST == ret) { + ret = OB_SUCCESS; + } else { + LOG_WARN("failed to remove tablet info", K(ret), KPC(ctx), K(copy_tablet_ctx_)); } } diff --git a/src/storage/high_availability/ob_ls_migration.h b/src/storage/high_availability/ob_ls_migration.h index 6df33b886..9f95e8258 100644 --- a/src/storage/high_availability/ob_ls_migration.h +++ b/src/storage/high_availability/ob_ls_migration.h @@ -20,6 +20,7 @@ #include "share/scheduler/ob_sys_task_stat.h" #include "observer/ob_rpc_processor_simple.h" #include "share/scheduler/ob_dag_scheduler.h" +#include "logservice/palf/scn.h" #include "storage/ob_storage_rpc.h" #include "ob_storage_ha_struct.h" #include "ob_physical_copy_task.h" @@ -46,7 +47,7 @@ public: public: uint64_t tenant_id_; ObMigrationOpArg arg_; - int64_t local_clog_checkpoint_ts_; + palf::SCN local_clog_checkpoint_scn_; int64_t local_rebuild_seq_; int64_t start_ts_; @@ -64,7 +65,7 @@ public: INHERIT_TO_STRING_KV( "ObIHADagNetCtx", ObIHADagNetCtx, K_(arg), - K_(local_clog_checkpoint_ts), + K_(local_clog_checkpoint_scn), K_(local_rebuild_seq), K_(start_ts), K_(finish_ts), @@ -235,7 +236,7 @@ private: int choose_src_(); int fetch_ls_info_(const uint64_t tenant_id, const share::ObLSID &ls_id, const common::ObAddr &member_addr, obrpc::ObCopyLSInfo &ls_info); - int get_local_ls_checkpoint_ts_(int64_t &local_checkpoint_ts); + int get_local_ls_checkpoint_scn_(palf::SCN &local_checkpoint_scn); int try_remove_member_list_(); int get_tablet_id_array_(common::ObIArray &tablet_id_array); int check_ls_need_copy_data_(bool &need_copy); diff --git a/src/storage/high_availability/ob_storage_ha_dag.cpp b/src/storage/high_availability/ob_storage_ha_dag.cpp index fbfaac2ad..2af15c0a2 100644 --- a/src/storage/high_availability/ob_storage_ha_dag.cpp +++ b/src/storage/high_availability/ob_storage_ha_dag.cpp @@ -556,9 +556,11 @@ int ObStorageHATaskUtils::check_need_copy_sstable( LOG_WARN("failed to check major sstable need copy", K(ret), K(param), K(tablet_handle)); } } else if (param.table_key_.is_minor_sstable()) { - if (OB_FAIL(check_minor_sstable_need_copy_(param, tablet_handle, need_copy))) { - LOG_WARN("failed to check minor sstable need copy", K(ret), K(param), K(tablet_handle)); - } + need_copy = true; + //TODO(muwei.ym) reuse local minor sstable + //if (OB_FAIL(check_minor_sstable_need_copy_(param, tablet_handle, need_copy))) { + // LOG_WARN("failed to check minor sstable need copy", K(ret), K(param), K(tablet_handle)); + //} } else if (param.table_key_.is_ddl_sstable()) { if (OB_FAIL(check_ddl_sstable_need_copy_(param, tablet_handle, need_copy))) { LOG_WARN("failed to check ddl sstable need copy", K(ret), K(param), K(tablet_handle)); diff --git a/src/storage/high_availability/ob_storage_ha_src_provider.cpp b/src/storage/high_availability/ob_storage_ha_src_provider.cpp index ba4b5edd1..a22d01868 100644 --- a/src/storage/high_availability/ob_storage_ha_src_provider.cpp +++ b/src/storage/high_availability/ob_storage_ha_src_provider.cpp @@ -41,7 +41,7 @@ int ObStorageHASrcProvider::init(const uint64_t tenant_id, storage::ObStorageRpc return ret; } -int ObStorageHASrcProvider::choose_ob_src(const share::ObLSID &ls_id, const int64_t local_clog_checkpoint_ts, +int ObStorageHASrcProvider::choose_ob_src(const share::ObLSID &ls_id, const palf::SCN &local_clog_checkpoint_scn, ObStorageHASrcInfo &src_info) { int ret = OB_SUCCESS; @@ -57,8 +57,8 @@ int ObStorageHASrcProvider::choose_ob_src(const share::ObLSID &ls_id, const int6 LOG_WARN("failed to get ls leader", K(ret), K_(tenant_id), K(ls_id)); } else if (OB_FAIL(fetch_ls_member_list_(tenant_id_, ls_id, leader_addr, addr_list))) { LOG_WARN("failed to fetch ls leader member list", K(ret), K_(tenant_id), K(ls_id), K(leader_addr)); - } else if (OB_FAIL(inner_choose_ob_src_(tenant_id_, ls_id, local_clog_checkpoint_ts, addr_list, chosen_src_addr))) { - LOG_WARN("failed to inner choose ob src", K(ret), K_(tenant_id), K(ls_id), K(local_clog_checkpoint_ts), K(addr_list)); + } else if (OB_FAIL(inner_choose_ob_src_(tenant_id_, ls_id, local_clog_checkpoint_scn, addr_list, chosen_src_addr))) { + LOG_WARN("failed to inner choose ob src", K(ret), K_(tenant_id), K(ls_id), K(local_clog_checkpoint_scn), K(addr_list)); } else { src_info.src_addr_ = chosen_src_addr; src_info.cluster_id_ = GCONF.cluster_id; @@ -156,13 +156,13 @@ int ObStorageHASrcProvider::fetch_ls_meta_info_(const uint64_t tenant_id, const } int ObStorageHASrcProvider::inner_choose_ob_src_(const uint64_t tenant_id, const share::ObLSID &ls_id, - const int64_t local_clog_checkpoint_ts, const common::ObIArray &addr_list, + const palf::SCN &local_clog_checkpoint_scn, const common::ObIArray &addr_list, common::ObAddr &choosen_src_addr) { int ret = OB_SUCCESS; int tmp_ret = OB_SUCCESS; int64_t choose_member_idx = -1; - int64_t max_clog_checkpoint_ts = -1; + palf::SCN max_clog_checkpoint_scn; for (int64_t i = 0; OB_SUCC(ret) && i < addr_list.count(); ++i) { const common::ObAddr &addr = addr_list.at(i); obrpc::ObFetchLSMetaInfoResp ls_info; @@ -172,8 +172,8 @@ int ObStorageHASrcProvider::inner_choose_ob_src_(const uint64_t tenant_id, const LOG_WARN("failed to fetch ls meta info", K(ret), K(tenant_id), K(ls_id), K(addr)); } else if (!ObReplicaTypeCheck::is_full_replica(ls_info.ls_meta_package_.ls_meta_.replica_type_)) { LOG_INFO("do not choose this src", K(tenant_id), K(ls_id), K(addr), K(ls_info)); - } else if (local_clog_checkpoint_ts > ls_info.ls_meta_package_.ls_meta_.get_clog_checkpoint_ts()) { - LOG_INFO("do not choose this src", K(tenant_id), K(ls_id), K(addr), K(local_clog_checkpoint_ts), K(ls_info)); + } else if (local_clog_checkpoint_scn > ls_info.ls_meta_package_.ls_meta_.get_clog_checkpoint_scn()) { + LOG_INFO("do not choose this src", K(tenant_id), K(ls_id), K(addr), K(local_clog_checkpoint_scn), K(ls_info)); } else if (OB_FAIL(ls_info.ls_meta_package_.ls_meta_.get_migration_status(migration_status))) { LOG_WARN("failed to get migration status", K(ret), K(ls_info)); } else if (!ObMigrationStatusHelper::check_can_migrate_out(migration_status)) { @@ -185,8 +185,8 @@ int ObStorageHASrcProvider::inner_choose_ob_src_(const uint64_t tenant_id, const LOG_INFO("some ls replica restore failed, can not migrate", K(ls_info)); break; } else { - if (ls_info.ls_meta_package_.ls_meta_.get_clog_checkpoint_ts() > max_clog_checkpoint_ts) { - max_clog_checkpoint_ts = ls_info.ls_meta_package_.ls_meta_.get_clog_checkpoint_ts(); + if (ls_info.ls_meta_package_.ls_meta_.get_clog_checkpoint_scn() > max_clog_checkpoint_scn) { + max_clog_checkpoint_scn = ls_info.ls_meta_package_.ls_meta_.get_clog_checkpoint_scn(); choose_member_idx = i; } } diff --git a/src/storage/high_availability/ob_storage_ha_src_provider.h b/src/storage/high_availability/ob_storage_ha_src_provider.h index d51e3a8c9..2065595bd 100644 --- a/src/storage/high_availability/ob_storage_ha_src_provider.h +++ b/src/storage/high_availability/ob_storage_ha_src_provider.h @@ -25,7 +25,7 @@ public: ObStorageHASrcProvider(); virtual ~ObStorageHASrcProvider(); int init(const uint64_t tenant_id, storage::ObStorageRpc *storage_rpc); - int choose_ob_src(const share::ObLSID &ls_id, const int64_t local_clog_checkpoint_ts, + int choose_ob_src(const share::ObLSID &ls_id, const palf::SCN &local_clog_checkpoint_scn, ObStorageHASrcInfo &src_info); private: @@ -33,7 +33,7 @@ private: int fetch_ls_member_list_(const uint64_t tenant_id, const share::ObLSID &ls_id, const common::ObAddr &addr, common::ObIArray &addr_list); int inner_choose_ob_src_(const uint64_t tenant_id, const share::ObLSID &ls_id, - const int64_t local_clog_checkpoint_ts, const common::ObIArray &addr_list, + const palf::SCN &local_clog_checkpoint_scn, const common::ObIArray &addr_list, common::ObAddr &choosen_src_addr); int fetch_ls_meta_info_(const uint64_t tenant_id, const share::ObLSID &ls_id, const common::ObAddr &member_addr, obrpc::ObFetchLSMetaInfoResp &ls_meta_info); diff --git a/src/storage/high_availability/ob_storage_ha_tablet_builder.cpp b/src/storage/high_availability/ob_storage_ha_tablet_builder.cpp index 34bc0b807..be2d3a805 100644 --- a/src/storage/high_availability/ob_storage_ha_tablet_builder.cpp +++ b/src/storage/high_availability/ob_storage_ha_tablet_builder.cpp @@ -1468,8 +1468,8 @@ int ObStorageHATableInfoMgr::check_tablet_table_info_exist( } else { LOG_WARN("failed to get tablet table info mgr", K(ret), K(tablet_id)); } - } else { - is_exist = true; + } else if (OB_FAIL(tablet_table_info_mgr->check_copy_tablet_exist(is_exist))) { + LOG_WARN("failed to check copy tablet exist", K(ret), K(tablet_id)); } } return ret; diff --git a/src/storage/high_availability/ob_tablet_group_restore.cpp b/src/storage/high_availability/ob_tablet_group_restore.cpp index e0e3a4d82..834bb524c 100644 --- a/src/storage/high_availability/ob_tablet_group_restore.cpp +++ b/src/storage/high_availability/ob_tablet_group_restore.cpp @@ -116,8 +116,11 @@ ObTabletRestoreCtx::~ObTabletRestoreCtx() bool ObTabletRestoreCtx::is_valid() const { - return tenant_id_ != OB_INVALID_ID && ls_id_.is_valid() && tablet_id_.is_valid() && tablet_handle_.is_valid() - && ObCopyTabletStatus::is_valid(status_) && OB_NOT_NULL(restore_base_info_) + return tenant_id_ != OB_INVALID_ID && ls_id_.is_valid() && tablet_id_.is_valid() + && ObCopyTabletStatus::is_valid(status_) + && ((ObCopyTabletStatus::TABLET_EXIST == status_ && tablet_handle_.is_valid()) + || ObCopyTabletStatus::TABLET_NOT_EXIST == status_) + && OB_NOT_NULL(restore_base_info_) && ObTabletRestoreAction::is_valid(action_) && (!is_leader_ || OB_NOT_NULL(second_meta_index_store_)) && ObReplicaTypeCheck::is_replica_type_valid(replica_type_) @@ -1685,7 +1688,7 @@ ObTabletRestoreDag::~ObTabletRestoreDag() if (OB_NOT_NULL(tablet_restore_ctx_.ha_table_info_mgr_)) { if (OB_SUCCESS != (tmp_ret = tablet_restore_ctx_.ha_table_info_mgr_->remove_tablet_table_info( tablet_restore_ctx_.tablet_id_))) { - LOG_ERROR("failed to remove tablet table info", K(tmp_ret), K(tablet_restore_ctx_)); + LOG_WARN("failed to remove tablet table info", K(tmp_ret), K(tablet_restore_ctx_)); } } } @@ -1863,7 +1866,7 @@ int ObTabletRestoreDag::inner_reset_status_for_retry() } else { LOG_INFO("start retry", KPC(this)); result_mgr_.reuse(); - if (OB_SSTABLE_NOT_EXIST == result && !tablet_restore_ctx_.is_leader_) { + if (!tablet_restore_ctx_.is_leader_) { if (OB_FAIL(tablet_restore_ctx_.ha_table_info_mgr_->remove_tablet_table_info(tablet_restore_ctx_.tablet_id_))) { LOG_WARN("failed to remove tablet info", K(ret), K(tablet_restore_ctx_)); } diff --git a/src/storage/ls/ob_ls.h b/src/storage/ls/ob_ls.h index 3a62d7d9e..6824e1fec 100644 --- a/src/storage/ls/ob_ls.h +++ b/src/storage/ls/ob_ls.h @@ -109,7 +109,6 @@ namespace storage return ret; \ } -const static int64_t LS_INNER_TABLET_FROZEN_TIMESTAMP = 1; struct ObLSVTInfo { diff --git a/src/storage/ls/ob_ls_tablet_service.cpp b/src/storage/ls/ob_ls_tablet_service.cpp index fdbda36ab..76203dd1d 100644 --- a/src/storage/ls/ob_ls_tablet_service.cpp +++ b/src/storage/ls/ob_ls_tablet_service.cpp @@ -1592,7 +1592,6 @@ int ObLSTabletService::build_single_data_tablet( common::ObIArray &tablet_handle_array) { int ret = OB_SUCCESS; - palf::SCN snapshot_version; const common::ObTabletID &data_tablet_id = info.data_tablet_id_; const common::ObSArray &tablet_ids = info.tablet_ids_; const common::ObSArray &table_schemas = arg.table_schemas_; @@ -1607,13 +1606,11 @@ int ObLSTabletService::build_single_data_tablet( } else if (OB_UNLIKELY(index < 0)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected error, table schema index is invalid", K(ret), K(data_tablet_id), K(index)); - } else if (OB_FAIL(snapshot_version.convert_for_lsn_allocator(arg.frozen_timestamp_))) { - STORAGE_LOG(WARN, "fail to convert to scn", KR(ret), K(create_scn)); } else if (OB_FAIL(do_create_tablet(ls_id, data_tablet_id, data_tablet_id, empty_array, - create_scn, snapshot_version, table_schemas[info.table_schema_index_[index]], + create_scn, arg.major_frozen_scn_, table_schemas[info.table_schema_index_[index]], compat_mode, empty_tablet_id, empty_tablet_id, tablet_handle))) { LOG_WARN("failed to do create tablet", K(ret), K(ls_id), K(data_tablet_id), - K(create_scn), K(snapshot_version), K(compat_mode)); + K(create_scn), K(arg), K(compat_mode)); } else if (OB_FAIL(tablet_handle_array.push_back(tablet_handle))) { LOG_WARN("failed to insert tablet handle into array", K(ret), K(tablet_handle)); } @@ -1669,7 +1666,7 @@ int ObLSTabletService::build_batch_create_tablet_arg( if (OB_FAIL(ret)) { // do nothing } else { new_arg.id_ = old_arg.id_; - new_arg.frozen_timestamp_ = old_arg.frozen_timestamp_; + new_arg.major_frozen_scn_ = old_arg.major_frozen_scn_; if (new_arg.get_tablet_count() > 0 && OB_FAIL(new_arg.table_schemas_.assign(old_arg.table_schemas_))) { LOG_WARN("failed to assign table schemas", K(ret), K(old_arg)); @@ -5123,7 +5120,7 @@ int ObLSTabletService::create_ls_inner_tablet( const share::ObLSID &ls_id, const common::ObTabletID &tablet_id, const int64_t memstore_version, - const palf::SCN &frozen_timestamp, + const palf::SCN &major_frozen_scn, const share::schema::ObTableSchema &table_schema, const lib::Worker::CompatMode &compat_mode, const palf::SCN &create_scn) @@ -5142,12 +5139,12 @@ int ObLSTabletService::create_ls_inner_tablet( } else if (OB_UNLIKELY(!ls_id.is_valid()) || OB_UNLIKELY(!tablet_id.is_valid()) || OB_UNLIKELY(OB_INVALID_VERSION == memstore_version) - || OB_UNLIKELY(!frozen_timestamp.is_valid()) + || OB_UNLIKELY(!major_frozen_scn.is_valid()) || OB_UNLIKELY(!table_schema.is_valid()) || OB_UNLIKELY(lib::Worker::CompatMode::INVALID == compat_mode) /*|| OB_UNLIKELY(create_scn <= OB_INVALID_TIMESTAMP)*/) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid args", K(ret), K(ls_id), K(tablet_id), K(frozen_timestamp), + LOG_WARN("invalid args", K(ret), K(ls_id), K(tablet_id), K(major_frozen_scn), K(table_schema), K(compat_mode), K(create_scn)); } else if (OB_UNLIKELY(ls_id != ls_->get_ls_id())) { ret = OB_ERR_UNEXPECTED; @@ -5161,9 +5158,9 @@ int ObLSTabletService::create_ls_inner_tablet( ret = OB_TABLET_EXIST; LOG_WARN("tablet already exists", K(ret), K(ls_id), K(tablet_id)); } else if (OB_FAIL(do_create_tablet(ls_id, tablet_id, tablet_id/*data_tablet_id*/, empty_index_tablet_array, - create_scn, frozen_timestamp, table_schema, compat_mode, empty_tablet_id, empty_tablet_id, tablet_handle))) { + create_scn, major_frozen_scn, table_schema, compat_mode, empty_tablet_id, empty_tablet_id, tablet_handle))) { LOG_WARN("failed to do create tablet", K(ret), K(ls_id), K(tablet_id), - K(create_scn), K(frozen_timestamp), K(table_schema), K(compat_mode)); + K(create_scn), K(major_frozen_scn), K(table_schema), K(compat_mode)); } else if (OB_FAIL(ObTabletSlogHelper::write_create_tablet_slog(tablet_handle, disk_addr))) { LOG_WARN("failed to write create tablet slog", K(ret), K(tablet_handle)); } else if (OB_FAIL(tablet_id_set_.set(tablet_id))) { diff --git a/src/storage/ob_storage_struct.cpp b/src/storage/ob_storage_struct.cpp index bde71365b..7b509ca87 100644 --- a/src/storage/ob_storage_struct.cpp +++ b/src/storage/ob_storage_struct.cpp @@ -340,10 +340,10 @@ int ObBatchUpdateTableStoreParam::assign( return ret; } -int ObBatchUpdateTableStoreParam::get_max_clog_checkpoint_ts(int64_t &clog_checkpoint_ts) const +int ObBatchUpdateTableStoreParam::get_max_clog_checkpoint_scn(palf::SCN &clog_checkpoint_scn) const { int ret = OB_SUCCESS; - clog_checkpoint_ts = 0; + clog_checkpoint_scn.set_min(); if (!is_valid()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("batch update table store param is invalid", K(ret), KPC(this)); @@ -356,7 +356,7 @@ int ObBatchUpdateTableStoreParam::get_max_clog_checkpoint_ts(int64_t &clog_check } else if (!table->is_multi_version_minor_sstable()) { //do nothing } else { - clog_checkpoint_ts = std::max(clog_checkpoint_ts, table->get_end_scn().get_val_for_tx()); + clog_checkpoint_scn = std::max(clog_checkpoint_scn, table->get_end_scn()); } } } diff --git a/src/storage/ob_storage_struct.h b/src/storage/ob_storage_struct.h index d561eb13b..a313b4875 100644 --- a/src/storage/ob_storage_struct.h +++ b/src/storage/ob_storage_struct.h @@ -340,7 +340,7 @@ struct ObBatchUpdateTableStoreParam final bool is_valid() const; void reset(); int assign(const ObBatchUpdateTableStoreParam ¶m); - int get_max_clog_checkpoint_ts(int64_t &clog_checkpoint_ts) const; + int get_max_clog_checkpoint_scn(palf::SCN &clog_checkpoint_scn) const; TO_STRING_KV(K_(tables_handle), K_(snapshot_version), K_(multi_version_start), K_(need_report), K_(rebuild_seq), K_(update_logical_minor_sstable), K_(start_scn), KP_(tablet_meta)); diff --git a/src/storage/tablelock/ob_lock_table.cpp b/src/storage/tablelock/ob_lock_table.cpp index 2dcb6f0ba..fc9b8cc2d 100644 --- a/src/storage/tablelock/ob_lock_table.cpp +++ b/src/storage/tablelock/ob_lock_table.cpp @@ -225,9 +225,6 @@ int ObLockTable::gen_create_tablet_arg_( ObArray tablet_ids; ObArray tablet_schema_idxs; - // frozen_timestamp: next merge time - int64_t frozen_timestamp = LS_INNER_TABLET_FROZEN_TIMESTAMP; - arg.reset(); // create ObCreateTabletInfo if (OB_FAIL(tablet_ids.push_back(tablet_id))) { @@ -242,10 +239,8 @@ int ObLockTable::gen_create_tablet_arg_( false/*is_create_bind_hidden_tablets*/))) { LOG_WARN("create tablet info init failed", K(ret), K(tablet_ids), K(tablet_id)); // create ObBatchCreateTabletArg - } else if (OB_FAIL(arg.init_create_tablet(ls_id, - frozen_timestamp))) { - LOG_WARN("ObBatchCreateTabletArg init create tablet failed", K(ret), K(tenant_id), - K(ls_id), K(frozen_timestamp)); + } else if (OB_FAIL(arg.init_create_tablet(ls_id, palf::SCN::base_scn()))) { + LOG_WARN("ObBatchCreateTabletArg init create tablet failed", K(ret), K(tenant_id), K(ls_id)); } else if (OB_FAIL(arg.table_schemas_.push_back(table_schema))) { LOG_WARN("add table schema failed", K(ret), K(table_schema)); } else if (OB_FAIL(arg.tablets_.push_back(create_tablet_info))) { diff --git a/src/storage/tablet/ob_tablet_create_delete_helper.cpp b/src/storage/tablet/ob_tablet_create_delete_helper.cpp index 6608b20de..29f5899fd 100644 --- a/src/storage/tablet/ob_tablet_create_delete_helper.cpp +++ b/src/storage/tablet/ob_tablet_create_delete_helper.cpp @@ -1962,7 +1962,7 @@ int ObTabletCreateDeleteHelper::build_batch_create_tablet_arg( if (OB_FAIL(ret)) { } else { new_arg.id_ = old_arg.id_; - new_arg.frozen_timestamp_ = old_arg.frozen_timestamp_; + new_arg.major_frozen_scn_ = old_arg.major_frozen_scn_; if (new_arg.get_tablet_count() > 0 && OB_FAIL(new_arg.table_schemas_.assign(old_arg.table_schemas_))) { LOG_WARN("failed to assign table schemas", K(ret), K(old_arg)); @@ -2249,7 +2249,6 @@ int ObTabletCreateDeleteHelper::do_create_tablet( { int ret = OB_SUCCESS; ObTenantMetaMemMgr *t3m = MTL(ObTenantMetaMemMgr*); - SCN snapshot_version; const ObLSID &ls_id = arg.id_; const ObTabletMapKey key(ls_id, tablet_id); ObTablet *tablet = nullptr; @@ -2265,9 +2264,7 @@ int ObTabletCreateDeleteHelper::do_create_tablet( ObMetaDiskAddr mem_addr; ObTabletTableStoreFlag table_store_flag; table_store_flag.set_with_major_sstable(); - if (OB_FAIL(snapshot_version.convert_tmp(arg.frozen_timestamp_))) { - LOG_WARN("fail to convert scn", K(ret), K(arg.frozen_timestamp_)); - } else if (OB_FAIL(mem_addr.set_mem_addr(0, sizeof(ObTablet)))) { + if (OB_FAIL(mem_addr.set_mem_addr(0, sizeof(ObTablet)))) { LOG_WARN("fail to set memory address", K(ret)); } else if (OB_FAIL(acquire_tablet(key, tablet_handle, false/*only acquire*/))) { LOG_WARN("failed to acquire tablet", K(ret), K(key)); @@ -2276,9 +2273,9 @@ int ObTabletCreateDeleteHelper::do_create_tablet( } else if (!need_create_empty_major_sstable) { table_store_flag.set_without_major_sstable(); LOG_INFO("no need to create sstable", K(ls_id), K(tablet_id), K(table_schema)); - } else if (OB_FAIL(build_create_sstable_param(table_schema, tablet_id, snapshot_version, param))) { + } else if (OB_FAIL(build_create_sstable_param(table_schema, tablet_id, arg.major_frozen_scn_, param))) { LOG_WARN("failed to build create sstable param", K(ret), K(tablet_id), - K(table_schema), K(snapshot_version), K(param)); + K(table_schema), K(arg), K(param)); } else if (OB_FAIL(create_sstable(param, table_handle))) { LOG_WARN("failed to create sstable", K(ret), K(param)); } @@ -2288,10 +2285,10 @@ int ObTabletCreateDeleteHelper::do_create_tablet( ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected error, tablet is NULL", K(ret), K(tablet_handle)); } else if (OB_FAIL(tablet->init(ls_id, tablet_id, data_tablet_id, lob_meta_tablet_id, lob_piece_tablet_id, - create_scn, snapshot_version, table_schema, compat_mode, table_store_flag, table_handle, freezer))) { + create_scn, arg.major_frozen_scn_, table_schema, compat_mode, table_store_flag, table_handle, freezer))) { LOG_WARN("failed to init tablet", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id), K(lob_meta_tablet_id), K(lob_piece_tablet_id), K(index_tablet_array), - K(snapshot_version), K(create_scn), K(table_schema), K(compat_mode), K(table_store_flag)); + K(arg), K(create_scn), K(table_schema), K(compat_mode), K(table_store_flag)); } else if (OB_FAIL(t3m->compare_and_swap_tablet(key, mem_addr, tablet_handle, tablet_handle))) { LOG_WARN("failed to compare and swap tablet", K(ret), K(key), K(mem_addr), K(tablet_handle)); } else { @@ -2554,7 +2551,7 @@ int64_t ObSimpleBatchCreateTabletArg::to_string(char *buf, const int64_t buf_len J_NAME("ObSimpleBatchCreateTabletArg"); J_COLON(); J_KV("id", arg_.id_, - "frozen_timestamp", arg_.frozen_timestamp_, + "major_frozen_scn", arg_.major_frozen_scn_, "total_tablet_cnt", arg_.get_tablet_count()); J_COMMA(); diff --git a/src/storage/tablet/ob_tablet_table_store.cpp b/src/storage/tablet/ob_tablet_table_store.cpp index 0b7fdbbf3..47ae33cef 100644 --- a/src/storage/tablet/ob_tablet_table_store.cpp +++ b/src/storage/tablet/ob_tablet_table_store.cpp @@ -1037,6 +1037,9 @@ int ObTabletTableStore::need_remove_old_table( LOG_WARN("get invalid arguments", K(ret), K(multi_version_start)); } else if (minor_tables_.empty() || INT64_MAX == minor_tables_[0]->get_upper_trans_version()) { // do nothing + } else if (minor_tables_[0]->get_end_scn() > tablet_ptr_->get_tablet_meta().clog_checkpoint_scn_) { + need_remove = false; + //TODO(muwei.ym) remove it later } else if (minor_tables_[0]->get_upper_trans_version() <= major_tables_[0]->get_snapshot_version()) { // at least one minor sstable is coverd by major sstable // don't need to care about kept_multi_version_start here diff --git a/src/storage/tx/ob_id_service.cpp b/src/storage/tx/ob_id_service.cpp index f75751c04..d6157dff0 100644 --- a/src/storage/tx/ob_id_service.cpp +++ b/src/storage/tx/ob_id_service.cpp @@ -302,34 +302,35 @@ palf::SCN ObIDService::get_rec_scn() int ObIDService::switch_to_follower_gracefully() { - int ret = OB_SUCCESS; - const int64_t expire_time = ObTimeUtility::current_time() + 100000; - int locked = false; - if (OB_SUCC(rwlock_.wrlock(expire_time))) { - locked = true; - } - while (is_logging_ && locked) { - rwlock_.unlock(); - locked = false; - ObClockGenerator::usleep(1000); - if (ObTimeUtility::current_time() > expire_time) { - break; - } - if (OB_SUCC(rwlock_.wrlock(expire_time))) { - locked = true; - } - } - if (locked) { - const int64_t last_id = ATOMIC_LOAD(&last_id_); - const int64_t limited_id = ATOMIC_LOAD(&limited_id_); - // Caution: set limit id before submit log, make sure limit id <= last id - ATOMIC_STORE(&limited_id_, last_id); - //提交日志但不要求一定成功,防止阻塞卸任 - submit_log_(ATOMIC_LOAD(&last_id_), limited_id); - rwlock_.unlock(); - locked = false; - } - TRANS_LOG(INFO, "switch to follower gracefully", K(ret), K(service_type_), K(locked)); + // int ret = OB_SUCCESS; + // const int64_t expire_time = ObTimeUtility::current_time() + 100000; + // int locked = false; + // if (OB_SUCC(rwlock_.wrlock(expire_time))) { + // locked = true; + // } + // while (is_logging_ && locked) { + // rwlock_.unlock(); + // locked = false; + // ObClockGenerator::usleep(1000); + // if (ObTimeUtility::current_time() > expire_time) { + // break; + // } + // if (OB_SUCC(rwlock_.wrlock(expire_time))) { + // locked = true; + // } + // } + // if (locked) { + // const int64_t last_id = ATOMIC_LOAD(&last_id_); + // const int64_t limited_id = ATOMIC_LOAD(&limited_id_); + // // Caution: set limit id before submit log, make sure limit id <= last id + // ATOMIC_STORE(&limited_id_, last_id); + // //提交日志但不要求一定成功,防止阻塞卸任 + // submit_log_(ATOMIC_LOAD(&last_id_), limited_id); + // rwlock_.unlock(); + // locked = false; + // } + // TRANS_LOG(INFO, "switch to follower gracefully", K(ret), K(service_type_), K(locked)); + TRANS_LOG(INFO, "switch to follower gracefully", K(last_id_), K(limited_id_), K(service_type_)); // There is no failure scenario for ObIDService to switch the follower, // so return OB_SUCCESS directly. return OB_SUCCESS; diff --git a/src/storage/tx/ob_trans_part_ctx.cpp b/src/storage/tx/ob_trans_part_ctx.cpp index f46ade8b9..f908f4c59 100644 --- a/src/storage/tx/ob_trans_part_ctx.cpp +++ b/src/storage/tx/ob_trans_part_ctx.cpp @@ -358,6 +358,13 @@ int ObPartTransCtx::trans_kill_() { int ret = OB_SUCCESS; TRANS_LOG(INFO, "trans killed", K(trans_id_)); + + if (ctx_tx_data_.get_state() == ObTxData::RUNNING) { + if (OB_FAIL(ctx_tx_data_.set_state(ObTxData::ABORT))) { + TRANS_LOG(WARN, "set abort state in ctx_tx_data_ failed", K(ret)); + } + } + mt_ctx_.trans_kill(); return ret; } @@ -1422,6 +1429,11 @@ int ObPartTransCtx::submit_redo_log(const bool is_freeze) ret = submit_log_impl_(ObTxLogType::TX_REDO_LOG); try_submit = true; } + if (try_submit) { + REC_TRANS_TRACE_EXT2(tlog_, submit_instant_log, Y(ret), OB_ID(arg2), is_freeze, + OB_ID(used), ObTimeUtility::fast_current_time() - start, + OB_ID(ctx_ref), get_ref()); + } } else if (OB_FAIL(lock_.try_lock())) { // try lock if (OB_EAGAIN == ret) { @@ -1443,11 +1455,11 @@ int ObPartTransCtx::submit_redo_log(const bool is_freeze) try_submit = true; } } - } - if (try_submit) { - REC_TRANS_TRACE_EXT2(tlog_, submit_instant_log, Y(ret), OB_ID(arg2), is_freeze, - OB_ID(used), ObTimeUtility::fast_current_time() - start, - OB_ID(ctx_ref), get_ref()); + if (try_submit) { + REC_TRANS_TRACE_EXT2(tlog_, submit_instant_log, Y(ret), OB_ID(arg2), is_freeze, + OB_ID(used), ObTimeUtility::fast_current_time() - start, + OB_ID(ctx_ref), get_ref()); + } } if (OB_BLOCK_FROZEN == ret) { ret = OB_SUCCESS; @@ -5947,10 +5959,13 @@ int ObPartTransCtx::on_local_abort_tx_() ObTxBufferNodeArray tmp_array; - start_us = ObTimeUtility::fast_current_time(); - if (OB_FAIL(mt_ctx_.trans_end(false, palf::SCN::invalid_scn(), ctx_tx_data_.get_end_log_ts()))) { + if (!has_persisted_log_() && OB_FAIL(ctx_tx_data_.set_state(ObTxData::ABORT))) { + TRANS_LOG(WARN, "set abort state failed", K(ret)); + } else if (OB_FALSE_IT(start_us = ObTimeUtility::fast_current_time())) { + } else if (OB_FAIL(mt_ctx_.trans_end(false, palf::SCN::invalid_scn(), ctx_tx_data_.get_end_log_ts()))) { TRANS_LOG(WARN, "trans end error", KR(ret), K(commit_version), "context", *this); } else if (FALSE_IT(end_us = ObTimeUtility::fast_current_time())) { + } else if (OB_FAIL(trans_clear_())) { TRANS_LOG(WARN, "local tx clear error", KR(ret), K(*this)); } else if (OB_FAIL(gen_total_mds_array_(tmp_array))) { @@ -5975,7 +5990,6 @@ int ObPartTransCtx::on_local_abort_tx_() return ret; } - int ObPartTransCtx::dump_2_text(FILE *fd) { int ret = OB_SUCCESS; diff --git a/src/storage/tx_table/ob_tx_table.cpp b/src/storage/tx_table/ob_tx_table.cpp index 04869392c..286aed215 100644 --- a/src/storage/tx_table/ob_tx_table.cpp +++ b/src/storage/tx_table/ob_tx_table.cpp @@ -325,7 +325,6 @@ int ObTxTable::gen_create_tablet_arg_( ObArray tablet_schema_idxs; // frozen_timestamp: next merge time - int64_t frozen_timestamp = LS_INNER_TABLET_FROZEN_TIMESTAMP; arg.reset(); // create ObCreateTabletInfo @@ -342,10 +341,8 @@ int ObTxTable::gen_create_tablet_arg_( false/*is_create_bind_hidden_tablets*/))) { LOG_WARN("create tablet info init failed", K(ret), K(tablet_ids), K(tablet_id)); // create ObBatchCreateTabletArg - } else if (OB_FAIL(arg.init_create_tablet(ls_id, - frozen_timestamp))) { - LOG_WARN("ObBatchCreateTabletArg init create tablet failed", K(ret), K(tenant_id), - K(ls_id), K(frozen_timestamp)); + } else if (OB_FAIL(arg.init_create_tablet(ls_id, palf::SCN::base_scn()))) { + LOG_WARN("ObBatchCreateTabletArg init create tablet failed", K(ret), K(tenant_id), K(ls_id)); } else if (OB_FAIL(arg.table_schemas_.push_back(table_schema))) { LOG_WARN("add table schema failed", K(ret), K(table_schema)); } else if (OB_FAIL(arg.tablets_.push_back(create_tablet_info))) { diff --git a/src/storage/tx_table/ob_tx_table.h b/src/storage/tx_table/ob_tx_table.h index 7864439c4..616264b1f 100644 --- a/src/storage/tx_table/ob_tx_table.h +++ b/src/storage/tx_table/ob_tx_table.h @@ -213,14 +213,6 @@ public: * be cleared. */ int get_recycle_scn(palf::SCN &recycle_scn); - int get_recycle_ts(int64_t &recycle_ts) - { - int ret = OB_SUCCESS; - palf::SCN recycle_scn = palf::SCN::min_scn(); - ret = get_recycle_scn(recycle_scn); - recycle_ts = recycle_scn.get_val_for_lsn_allocator(); - return ret; - } /** * @brief Get the upper trans version for each given end_scn diff --git a/tools/deploy/obd/obproxy.include.yaml b/tools/deploy/obd/obproxy.include.yaml index 257f57e47..e605e7be6 100644 --- a/tools/deploy/obd/obproxy.include.yaml +++ b/tools/deploy/obd/obproxy.include.yaml @@ -5,5 +5,4 @@ config: enable_metadb_used: 'false' enable_qa_mode: 'TRUE' location_expire_period: '1' -__mirror_repository_section_name: taobao-test diff --git a/unittest/storage/init_basic_struct.h b/unittest/storage/init_basic_struct.h index d6d240872..8a662c0df 100644 --- a/unittest/storage/init_basic_struct.h +++ b/unittest/storage/init_basic_struct.h @@ -78,7 +78,6 @@ int gen_create_tablet_arg(const int64_t tenant_id, obrpc::ObCreateTabletInfo tablet_info; ObArray index_tablet_ids; ObArray index_tablet_schema_idxs; - int64_t frozen_timestamp = 0; uint64_t table_id = 12345; arg.reset(); share::schema::ObTableSchema table_schema_obj; @@ -110,10 +109,8 @@ int gen_create_tablet_arg(const int64_t tenant_id, false))) { STORAGE_LOG(WARN, "failed to init tablet info", KR(ret), K(index_tablet_ids), K(tablet_id), K(index_tablet_schema_idxs)); - } else if (OB_FAIL(arg.init_create_tablet(ls_id, - frozen_timestamp))) { - STORAGE_LOG(WARN, "failed to init create tablet", KR(ret), K(tenant_id), K(ls_id), - K(frozen_timestamp)); + } else if (OB_FAIL(arg.init_create_tablet(ls_id, palf::SCN::min_scn()))) { + STORAGE_LOG(WARN, "failed to init create tablet", KR(ret), K(tenant_id), K(ls_id)); } else if (OB_FAIL(arg.table_schemas_.push_back(table_schema))) { STORAGE_LOG(WARN, "failed to push back table schema", KR(ret), K(table_schema)); } else if (OB_FAIL(arg.tablets_.push_back(tablet_info))) { diff --git a/unittest/storage/test_dml_common.h b/unittest/storage/test_dml_common.h index 2e12c962b..8e24eb253 100644 --- a/unittest/storage/test_dml_common.h +++ b/unittest/storage/test_dml_common.h @@ -580,7 +580,6 @@ int TestDmlCommon::build_pure_data_tablet_arg( ObCreateTabletInfo tablet_info; ObArray tablet_id_array; ObArray tablet_schema_index_array; - int64_t frozen_timestamp = 0; share::schema::ObTableSchema table_schema; build_data_table_schema(tenant_id, table_schema); @@ -592,9 +591,8 @@ int TestDmlCommon::build_pure_data_tablet_arg( } else if (OB_FAIL(tablet_info.init(tablet_id_array, data_tablet_id, tablet_schema_index_array, lib::Worker::CompatMode::MYSQL, false))) { STORAGE_LOG(WARN, "failed to init tablet info", K(ret), K(tablet_id_array), K(data_tablet_id), K(tablet_schema_index_array)); - } else if (OB_FAIL(arg.init_create_tablet(ls_id, frozen_timestamp))) { - STORAGE_LOG(WARN, "failed to init create tablet", K(ret), K(tenant_id), K(ls_id), - K(frozen_timestamp)); + } else if (OB_FAIL(arg.init_create_tablet(ls_id, palf::SCN::min_scn()))) { + STORAGE_LOG(WARN, "failed to init create tablet", K(ret), K(tenant_id), K(ls_id)); } else if (OB_FAIL(arg.table_schemas_.push_back(table_schema))) { STORAGE_LOG(WARN, "failed to push back table schema", K(ret), K(table_schema)); } else if (OB_FAIL(arg.tablets_.push_back(tablet_info))) { @@ -620,7 +618,6 @@ int TestDmlCommon::build_mixed_tablets_arg( ObCreateTabletInfo tablet_info; ObArray tablet_id_array; ObArray tablet_schema_index_array; - int64_t frozen_timestamp = 0; share::schema::ObTableSchema data_table_schema; share::schema::ObTableSchema index_table_schema; build_data_table_schema(tenant_id, data_table_schema); @@ -646,8 +643,8 @@ int TestDmlCommon::build_mixed_tablets_arg( } else if (OB_FAIL(tablet_info.init(tablet_id_array, data_tablet_id, tablet_schema_index_array, lib::Worker::CompatMode::MYSQL, false))) { STORAGE_LOG(WARN, "failed to init tablet info", K(ret), K(tablet_id_array), K(data_tablet_id), K(tablet_schema_index_array)); - } else if (OB_FAIL(arg.init_create_tablet(ls_id, frozen_timestamp))) { - STORAGE_LOG(WARN, "failed to init create tablet", K(ret), K(tenant_id), K(ls_id), K(frozen_timestamp)); + } else if (OB_FAIL(arg.init_create_tablet(ls_id, palf::SCN::min_scn()))) { + STORAGE_LOG(WARN, "failed to init create tablet", K(ret), K(tenant_id), K(ls_id)); } else if (OB_FAIL(arg.table_schemas_.push_back(data_table_schema))) { STORAGE_LOG(WARN, "failed to push back data table schema", K(ret), K(data_table_schema)); } else if (OB_FAIL(arg.table_schemas_.push_back(index_table_schema))) { diff --git a/unittest/storage/test_lob_common.h b/unittest/storage/test_lob_common.h index 05f8508a9..27fddab4d 100644 --- a/unittest/storage/test_lob_common.h +++ b/unittest/storage/test_lob_common.h @@ -308,7 +308,6 @@ int TestLobCommon::build_lob_tablet_arg( ObCreateTabletInfo tablet_info; ObArray tablet_id_array; ObArray tablet_schema_index_array; - int64_t frozen_timestamp = 0; share::schema::ObTableSchema table_schema; build_data_table_schema(tenant_id, table_schema); share::schema::ObTableSchema lob_meta_schema; @@ -333,8 +332,8 @@ int TestLobCommon::build_lob_tablet_arg( lib::get_compat_mode(), false/*is_create_bind_hidden_tablets*/))) { STORAGE_LOG(WARN, "failed to init tablet info", K(ret), K(tablet_id_array), K(data_tablet_id), K(tablet_schema_index_array)); - } else if (OB_FAIL(arg.init_create_tablet(ls_id, frozen_timestamp))) { - STORAGE_LOG(WARN, "failed to init create tablet", K(ret), K(tenant_id), K(ls_id), K(frozen_timestamp)); + } else if (OB_FAIL(arg.init_create_tablet(ls_id, palf::SCN::min_scn()))) { + STORAGE_LOG(WARN, "failed to init create tablet", K(ret), K(tenant_id), K(ls_id)); } else if (OB_FAIL(arg.table_schemas_.push_back(table_schema))) { STORAGE_LOG(WARN, "failed to push back table schema", K(ret), K(table_schema)); } else if (OB_FAIL(arg.table_schemas_.push_back(lob_meta_schema))) {