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,185 @@
/**
* 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 __OB_SQL_END_TRANS_CALLBACK_H__
#define __OB_SQL_END_TRANS_CALLBACK_H__
#include "share/ob_define.h"
#include "lib/utility/utility.h"
#include "lib/allocator/ob_allocator.h"
#include "lib/objectpool/ob_tc_factory.h"
#include "lib/allocator/ob_mod_define.h"
#include "sql/ob_i_end_trans_callback.h"
#include "storage/transaction/ob_trans_result.h"
#include "storage/transaction/ob_trans_define.h"
#include "observer/mysql/ob_mysql_end_trans_cb.h"
namespace oceanbase {
namespace sql {
class ObSharedEndTransCallback : public ObIEndTransCallback {
public:
ObSharedEndTransCallback();
virtual ~ObSharedEndTransCallback();
virtual bool is_shared() const override final
{
return true;
}
};
class ObExclusiveEndTransCallback : public ObIEndTransCallback {
public:
enum EndTransType {
END_TRANS_TYPE_INVALID,
END_TRANS_TYPE_EXPLICIT, // Explicit commit
END_TRANS_TYPE_IMPLICIT, // Implicit commit
};
public:
ObExclusiveEndTransCallback();
virtual ~ObExclusiveEndTransCallback();
virtual bool is_shared() const override final
{
return false;
}
void set_is_need_rollback(bool is_need_rollback)
{
has_set_need_rollback_ = true;
is_need_rollback_ = is_need_rollback;
}
void set_end_trans_type(ObExclusiveEndTransCallback::EndTransType end_trans_type)
{
end_trans_type_ = end_trans_type;
}
void set_is_txs_end_trans_called(bool is_txs_end_trans_called)
{
is_txs_end_trans_called_ = is_txs_end_trans_called;
}
bool is_txs_end_trans_called() const
{
return is_txs_end_trans_called_;
}
void reset()
{
ObIEndTransCallback::reset();
end_trans_type_ = END_TRANS_TYPE_INVALID;
has_set_need_rollback_ = false;
is_need_rollback_ = false;
is_txs_end_trans_called_ = false;
}
protected:
ObExclusiveEndTransCallback::EndTransType end_trans_type_;
bool has_set_need_rollback_;
bool is_need_rollback_;
bool is_txs_end_trans_called_;
};
class ObEndTransSyncCallback : public ObExclusiveEndTransCallback {
public:
ObEndTransSyncCallback();
virtual ~ObEndTransSyncCallback();
virtual void callback(int cb_param);
virtual void callback(int cb_param, const transaction::ObTransID& trans_id);
virtual const char* get_type() const
{
return "ObEndTransSyncCallback";
}
virtual ObEndTransCallbackType get_callback_type() const
{
return SYNC_CALLBACK_TYPE;
}
int wait();
int init(const transaction::ObTransDesc* trans_desc, ObSQLSessionInfo* session);
void reset();
private:
/* functions */
/* variables */
static const int64_t PUSH_POP_TIMEOUT = 1000 * 1000 * 10L;
transaction::ObTransCond queue_;
const transaction::ObTransDesc* trans_desc_;
ObSQLSessionInfo* session_;
/* macro */
DISALLOW_COPY_AND_ASSIGN(ObEndTransSyncCallback);
};
class ObEndTransAsyncCallback : public ObExclusiveEndTransCallback {
public:
ObEndTransAsyncCallback();
virtual ~ObEndTransAsyncCallback();
virtual void callback(int cb_param);
virtual void callback(int cb_param, const transaction::ObTransID& trans_id);
virtual const char* get_type() const
{
return "ObEndTransAsyncCallback";
}
virtual ObEndTransCallbackType get_callback_type() const
{
return ASYNC_CALLBACK_TYPE;
}
observer::ObSqlEndTransCb& get_mysql_end_trans_cb()
{
return mysql_end_trans_cb_;
}
void reset()
{
ObExclusiveEndTransCallback::reset();
mysql_end_trans_cb_.reset();
}
private:
/* macro */
observer::ObSqlEndTransCb mysql_end_trans_cb_;
DISALLOW_COPY_AND_ASSIGN(ObEndTransAsyncCallback);
};
class ObNullEndTransCallback : public ObSharedEndTransCallback {
public:
ObNullEndTransCallback() : ObSharedEndTransCallback()
{}
virtual ~ObNullEndTransCallback()
{}
virtual void callback(int cb_param)
{
UNUSED(cb_param);
}
virtual void callback(int cb_param, const transaction::ObTransID& trans_id)
{
UNUSED(cb_param);
UNUSED(trans_id);
}
virtual const char* get_type() const
{
return "ObNullEndTransCallback";
}
virtual ObEndTransCallbackType get_callback_type() const
{
return NULL_CALLBACK_TYPE;
}
virtual int init(const transaction::ObTransID& trans_id);
private:
DISALLOW_COPY_AND_ASSIGN(ObNullEndTransCallback);
private:
transaction::ObTransID trans_id_;
};
} // namespace sql
} // namespace oceanbase
#endif /* __OB_SQL_END_TRANS_CALLBACK_H__ */
//// end of header file