init push

This commit is contained in:
oceanbase-admin
2021-05-31 22:56:52 +08:00
commit cea7de1475
7020 changed files with 5689869 additions and 0 deletions

View File

@ -0,0 +1,93 @@
/**
* 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_STORAGE_CLOG_CB_ASYNC_WORKER
#define OCEANBASE_STORAGE_CLOG_CB_ASYNC_WORKER
#include "common/ob_queue_thread.h"
#include "lib/ob_define.h"
#include "common/ob_partition_key.h"
#include "storage/ob_storage_log_type.h"
namespace oceanbase {
namespace storage {
class ObPartitionService;
struct ObCLogCallbackAsyncTask {
ObCLogCallbackAsyncTask()
: pg_key_(),
partition_key_(),
log_type_(ObStorageLogType::OB_LOG_UNKNOWN),
log_id_(common::OB_INVALID_ID),
is_physical_drop_(false)
{}
OB_INLINE bool is_valid() const
{
return pg_key_.is_valid() && partition_key_.is_valid() && ObStorageLogType::OB_LOG_UNKNOWN != log_type_ &&
common::OB_INVALID_ID != log_id_;
}
OB_INLINE void deep_copy(const ObCLogCallbackAsyncTask& that)
{
if (&that != this) {
pg_key_ = that.pg_key_;
partition_key_ = that.partition_key_;
log_type_ = that.log_type_;
log_id_ = that.log_id_;
is_physical_drop_ = that.is_physical_drop_;
}
}
TO_STRING_KV(K(pg_key_), K(partition_key_), K(log_type_), K(log_id_), K(is_physical_drop_));
public:
common::ObPGKey pg_key_;
common::ObPartitionKey partition_key_;
int64_t log_type_;
uint64_t log_id_;
bool is_physical_drop_; // used by offline log
};
class ObCLogCallbackAsyncWorker : public common::M2SQueueThread {
public:
ObCLogCallbackAsyncWorker() : is_inited_(false), ptt_svr_(nullptr), free_queue_(), tasks_(nullptr){};
~ObCLogCallbackAsyncWorker()
{
destroy();
};
int init(ObPartitionService* ptt_svr);
void destroy();
virtual void handle(void* task, void* pdata);
int push_task(const ObCLogCallbackAsyncTask& task);
private:
int get_task(ObCLogCallbackAsyncTask*& task);
void free_task(ObCLogCallbackAsyncTask* task);
DISALLOW_COPY_AND_ASSIGN(ObCLogCallbackAsyncWorker);
private:
static const int64_t LONG_RETRY_INTERVAL = 100 * 1000; // 100ms
static const int64_t RETRY_INTERVAL = 2 * 1000; // 2ms
static const int64_t MAX_TASK_NUM = common::OB_MAX_PARTITION_NUM_PER_SERVER;
static const int64_t IDLE_INTERVAL = INT64_MAX;
bool is_inited_;
ObPartitionService* ptt_svr_;
common::ObFixedQueue<ObCLogCallbackAsyncTask> free_queue_;
ObCLogCallbackAsyncTask* tasks_;
};
} // namespace storage
} // namespace oceanbase
#endif