[SCN] adjust ObBatchCreateTabletArg

This commit is contained in:
obdev 2022-11-28 02:40:26 +00:00 committed by ob-robot
parent 4c49f6e7c5
commit c538314fd7
62 changed files with 391 additions and 1828 deletions

View File

@ -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

View File

@ -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

View File

@ -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
$<$<STREQUAL:"${ARCHITECTURE}","x86_64">:${DEP_DIR}/lib/libunwind.a>
${DEP_DIR}/lib/libz.a
-L${DEP_DIR}/var/usr/lib64
-L${DEP_DIR}/var/usr/lib

View File

@ -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));

View File

@ -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 K, uint64_t N, class Allocator> class ObExtIterHashSet;
///////////////////////////////////// ObExtIterHashSet Iterator /////////////////////////////////////
template <class HashSet>
class ObExtIterHashSetConstIterator
{
public:
typedef typename HashSet::const_key_ref_t const_key_ref_t;
typedef ObExtIterHashSetConstIterator<HashSet> 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 K, uint64_t N = 1031, class Allocator = ObIAllocator>
class ObExtIterHashSet
{
public:
typedef const K &const_key_ref_t;
typedef ObIteratableHashSet<K, N> BaseHashSet;
typedef ObExtIterHashSet<K, N, Allocator> SelfType;
typedef ObExtIterHashSetConstIterator<SelfType> 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<int64_t>(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 <class HashSet>
friend class ObExtIterHashSetConstIterator;
private:
DISALLOW_COPY_AND_ASSIGN(ObExtIterHashSet);
};
template <class K, uint64_t N, class Allocator>
ObExtIterHashSet<K, N, Allocator>::ObExtIterHashSet(Allocator &allocator) :
count_(0),
bucket_num_(1),
allocator_(allocator),
buckets_(),
buckets_tail_(&buckets_)
{}
template <class K, uint64_t N, class Allocator>
ObExtIterHashSet<K, N, Allocator>::~ObExtIterHashSet()
{
reset();
}
template <class K, uint64_t N, class Allocator>
int ObExtIterHashSet<K, N, Allocator>::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 <class K, uint64_t N, class Allocator>
bool ObExtIterHashSet<K, N, Allocator>::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 <class K, uint64_t N, class Allocator>
int ObExtIterHashSet<K, N, Allocator>::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 <class K, uint64_t N, class Allocator>
void ObExtIterHashSet<K, N, Allocator>::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 <class K, uint64_t N, class Allocator>
int64_t ObExtIterHashSet<K, N, Allocator>::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

View File

@ -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<typename key_t>
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_ */

View File

@ -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 <class KEY, class ITEM>
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 KEY, class ITEM, class NODE, class ITEM_PROTECTOR>
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<ITEM *> 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<NODE**>(
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<NODE> allocator_;
DISALLOW_COPY_AND_ASSIGN(ObPreAllocLinkHashMap);
};
} // hash
} // common
} // oceanbase
#endif /* SRC_LIBRARY_SRC_LIB_HASH_OB_MEMLESS_LINK_HASHMAP_H_ */

View File

@ -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

View File

@ -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();

View File

@ -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;

View File

@ -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 {

View File

@ -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;
}

View File

@ -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)

View File

@ -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 <gtest/gtest.h>
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<int64_t, N> 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<int64_t, N>::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<int64_t, 1> hashset(allocator_);
ObExtIterHashSet<int64_t, 1>::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<int64_t, N> hashset(allocator_);
ObExtIterHashSet<int64_t, N>::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<int64_t, N> hashset(allocator_);
ObExtIterHashSet<int64_t, N>::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<int64_t, N> hashset(allocator_);
ObExtIterHashSet<int64_t, N>::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<int64_t, N> hashset(allocator_);
ObExtIterHashSet<int64_t, N>::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();
}

View File

@ -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 <pthread.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
#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<int64_t, Item>
{
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<int64_t, Item, Node, ItemProtector> 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();
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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) {}

View File

@ -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*/))) {

View File

@ -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<share::ObLSID, ObBatchCreateTabletHelper*> args_map_;

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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,

View File

@ -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_);

View File

@ -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<share::schema::ObTableSchema> table_schemas_;
common::ObSArray<ObCreateTabletInfo> tablets_;
};

View File

@ -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;

View File

@ -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<char*>(allocator.alloc(sizeof(ObDASTableLoc)

View File

@ -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<ObSSTable *>(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);
}
}
}

View File

@ -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));
}

View File

@ -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)
{

View File

@ -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<uint32_t>(pos_bak - encoding_meta_offset);
ch.length_ = static_cast<uint32_t>(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<uint32_t>(pos_bak - encoding_meta_offset);
}
ch.obj_type_ = static_cast<uint8_t>(encoders_.at(i)->get_obj_type());
}
if (OB_SUCC(ret) && !desc.is_var_data_ && desc.need_data_store_) {

View File

@ -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<ObObjType>(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));

View File

@ -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))) {

View File

@ -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;

View File

@ -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;

View File

@ -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);
};

View File

@ -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_));
}
}

View File

@ -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<common::ObTabletID> &tablet_id_array);
int check_ls_need_copy_data_(bool &need_copy);

View File

@ -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));

View File

@ -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<common::ObAddr> &addr_list,
const palf::SCN &local_clog_checkpoint_scn, const common::ObIArray<common::ObAddr> &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;
}
}

View File

@ -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<common::ObAddr> &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<common::ObAddr> &addr_list,
const palf::SCN &local_clog_checkpoint_scn, const common::ObIArray<common::ObAddr> &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);

View File

@ -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;

View File

@ -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_));
}

View File

@ -109,7 +109,6 @@ namespace storage
return ret; \
}
const static int64_t LS_INNER_TABLET_FROZEN_TIMESTAMP = 1;
struct ObLSVTInfo
{

View File

@ -1592,7 +1592,6 @@ int ObLSTabletService::build_single_data_tablet(
common::ObIArray<ObTabletHandle> &tablet_handle_array)
{
int ret = OB_SUCCESS;
palf::SCN snapshot_version;
const common::ObTabletID &data_tablet_id = info.data_tablet_id_;
const common::ObSArray<common::ObTabletID> &tablet_ids = info.tablet_ids_;
const common::ObSArray<share::schema::ObTableSchema> &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))) {

View File

@ -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());
}
}
}

View File

@ -340,7 +340,7 @@ struct ObBatchUpdateTableStoreParam final
bool is_valid() const;
void reset();
int assign(const ObBatchUpdateTableStoreParam &param);
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));

View File

@ -225,9 +225,6 @@ int ObLockTable::gen_create_tablet_arg_(
ObArray<ObTabletID> tablet_ids;
ObArray<int64_t> 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))) {

View File

@ -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();

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -325,7 +325,6 @@ int ObTxTable::gen_create_tablet_arg_(
ObArray<int64_t> 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))) {

View File

@ -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

View File

@ -5,5 +5,4 @@ config:
enable_metadb_used: 'false'
enable_qa_mode: 'TRUE'
location_expire_period: '1'
__mirror_repository_section_name: taobao-test

View File

@ -78,7 +78,6 @@ int gen_create_tablet_arg(const int64_t tenant_id,
obrpc::ObCreateTabletInfo tablet_info;
ObArray<common::ObTabletID> index_tablet_ids;
ObArray<int64_t> 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))) {

View File

@ -580,7 +580,6 @@ int TestDmlCommon::build_pure_data_tablet_arg(
ObCreateTabletInfo tablet_info;
ObArray<common::ObTabletID> tablet_id_array;
ObArray<int64_t> 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<common::ObTabletID> tablet_id_array;
ObArray<int64_t> 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))) {

View File

@ -308,7 +308,6 @@ int TestLobCommon::build_lob_tablet_arg(
ObCreateTabletInfo tablet_info;
ObArray<common::ObTabletID> tablet_id_array;
ObArray<int64_t> 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))) {