[CP] Support sequence currval session sync via obproxy

This commit is contained in:
hezuojiao
2023-05-10 14:09:18 +00:00
committed by ob-robot
parent 691277a794
commit ed4922aca0
4 changed files with 191 additions and 2 deletions

View File

@ -212,6 +212,7 @@ enum SessionSyncInfoType {
SESSION_SYNC_TXN_DYNAMIC_INFO = 6, // 6: txn dynamic info
SESSION_SYNC_TXN_PARTICIPANTS_INFO = 7, // 7: txn dynamic info
SESSION_SYNC_TXN_EXTRA_INFO = 8, // 8: txn dynamic info
SESSION_SYNC_SEQUENCE_CURRVAL = 9, // for sequence currval
SESSION_SYNC_MAX_TYPE,
};
@ -309,6 +310,21 @@ public:
int64_t current_sess_length, const char* last_sess_buf, int64_t last_sess_length);
};
class ObSequenceCurrvalEncoder : public ObSessInfoEncoder {
public:
ObSequenceCurrvalEncoder() : ObSessInfoEncoder() {}
virtual ~ObSequenceCurrvalEncoder() {}
virtual int serialize(ObSQLSessionInfo &sess, char *buf, const int64_t length, int64_t &pos) override;
virtual int deserialize(ObSQLSessionInfo &sess, const char *buf, const int64_t length, int64_t &pos) override;
virtual int64_t get_serialize_size(ObSQLSessionInfo &sess) const override;
virtual int fetch_sess_info(ObSQLSessionInfo &sess, char *buf, const int64_t length, int64_t &pos) override;
virtual int64_t get_fetch_sess_info_size(ObSQLSessionInfo& sess) override;
virtual int compare_sess_info(const char* current_sess_buf, int64_t current_sess_length,
const char* last_sess_buf, int64_t last_sess_length) override;
virtual int display_sess_info(ObSQLSessionInfo &sess, const char* current_sess_buf,
int64_t current_sess_length, const char* last_sess_buf, int64_t last_sess_length) override;
};
class ObControlInfoEncoder : public ObSessInfoEncoder {
public:
ObControlInfoEncoder() : ObSessInfoEncoder() {}
@ -923,6 +939,11 @@ public:
uint64_t seq_id,
const share::ObSequenceValue &value);
int drop_sequence_value_if_exists(uint64_t tenant_id, uint64_t seq_id);
void reuse_all_sequence_value()
{
sequence_currval_map_.reuse();
}
int get_context_values(const common::ObString &context_name,
const common::ObString &attribute,
common::ObString &value,
@ -977,7 +998,9 @@ public:
ObAppCtxInfoEncoder &get_app_ctx_encoder() { return app_ctx_info_encoder_; }
ObClientIdInfoEncoder &get_client_info_encoder() { return client_id_info_encoder_;}
ObControlInfoEncoder &get_control_info_encoder() { return control_info_encoder_;}
ObSequenceCurrvalEncoder &get_sequence_currval_encoder() { return sequence_currval_encoder_; }
ObContextsMap &get_contexts_map() { return contexts_map_; }
ObSequenceCurrvalMap &get_sequence_currval_map() { return sequence_currval_map_; }
int get_mem_ctx_alloc(common::ObIAllocator *&alloc);
int update_sess_sync_info(const SessionSyncInfoType sess_sync_info_type,
const char *buf, const int64_t length, int64_t &pos);
@ -1274,7 +1297,8 @@ private:
&txn_static_info_encoder_,
&txn_dynamic_info_encoder_,
&txn_participants_info_encoder_,
&txn_extra_info_encoder_
&txn_extra_info_encoder_,
&sequence_currval_encoder_
};
ObSysVarEncoder sys_var_encoder_;
//ObUserVarEncoder usr_var_encoder_;
@ -1286,6 +1310,7 @@ private:
ObTxnDynamicInfoEncoder txn_dynamic_info_encoder_;
ObTxnParticipantsInfoEncoder txn_participants_info_encoder_;
ObTxnExtraInfoEncoder txn_extra_info_encoder_;
ObSequenceCurrvalEncoder sequence_currval_encoder_;
public:
void post_sync_session_info();
void prep_txn_free_route_baseline(bool reset_audit = true);