0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 #ifndef TMSRV_H
0036 #define TMSRV_H
0037
0038 #ifdef __cplusplus
0039 extern "C" {
0040 #endif
0041
0042
0043 #include <xa_cmn.h>
0044 #include <exthpool.h>
0045 #include <exhash.h>
0046
0047 extern pthread_t G_bacground_thread;
0048 extern int G_bacground_req_shutdown;
0049
0050 #define SCAN_TIME_DFLT 10
0051 #define MAX_TRIES_DFTL 100
0052 #define TOUT_CHECK_TIME 1
0053 #define THREADPOOL_DFLT 10
0054 #define LOGPARSE_ATTEMPTS_DFLT 1
0055
0056 #define XA_RETRIES_DFLT 3
0057 #define TMSRV_HOUSEKEEP_DEFAULT (90*60)
0058
0059
0060
0061
0062
0063
0064
0065 typedef struct
0066 {
0067 long dflt_timeout;
0068 char tlog_dir[PATH_MAX];
0069 int scan_time;
0070 long max_tries;
0071
0072
0073 int tout_check_time;
0074 int threadpoolsize;
0075
0076 int xa_retries;
0077
0078 int ping_time;
0079 int ping_mode_jointran;
0080 threadpool thpool;
0081
0082 int housekeeptime;
0083 long vnodeid;
0084
0085 int chkdisk_time;
0086
0087 int logparse_attempts;
0088
0089 } tmsrv_cfg_t;
0090
0091 struct thread_server
0092 {
0093 char *context_data;
0094 int cd;
0095 char *buffer;
0096 };
0097
0098 typedef struct thread_server thread_server_t;
0099
0100
0101
0102
0103
0104 typedef struct
0105 {
0106 char tmxid[NDRX_XID_SERIAL_BUFSIZE+1];
0107
0108
0109
0110
0111
0112 int attempts;
0113 EX_hash_handle hh;
0114 int housekeepable;
0115 } ndrx_tms_file_registry_t;
0116
0117
0118
0119 extern void tm_thread_init(void);
0120 extern void tm_thread_uninit(void);
0121 extern void tm_thread_shutdown(void *ptr, int *p_finish_off);
0122
0123 extern void tm_ping_db(void *ptr, int *p_finish_off);
0124
0125 extern tmsrv_cfg_t G_tmsrv_cfg;
0126
0127 extern void atmi_xa_new_xid(XID *xid);
0128
0129 extern int tms_unlock_entry(atmi_xa_log_t *p_tl);
0130 extern int tms_log_exists_entry(char *tmxid);
0131 extern int tms_log_exists_file(char *tmxid);
0132 extern atmi_xa_log_t * tms_log_get_entry(char *tmxid, int dowait, int *is_tout);
0133 extern int tms_log_start(atmi_xa_tx_info_t *xai, int txtout, long tmflags, long *btid);
0134 extern int tms_log_addrm(atmi_xa_tx_info_t *xai, short rmid, int *p_is_already_logged,
0135 long *btid, long flags);
0136 extern int tms_log_chrmstat(atmi_xa_tx_info_t *xai, short rmid,
0137 long btid, char rmstatus, UBFH *p_ub);
0138 extern int tms_open_logfile(atmi_xa_log_t *p_tl, char *mode);
0139 extern int tms_is_logfile_open(atmi_xa_log_t *p_tl);
0140 extern void tms_close_logfile(atmi_xa_log_t *p_tl);
0141 extern void tms_remove_logfree(atmi_xa_log_t *p_tl, int hash_rm);
0142 extern void tms_remove_logfile(atmi_xa_log_t *p_tl, int hash_rm);
0143 extern int tms_log_info(atmi_xa_log_t *p_tl);
0144 extern int tms_log_stage(atmi_xa_log_t *p_tl, short stage, int forced);
0145 extern int tms_log_rmstatus(atmi_xa_log_t *p_tl, atmi_xa_rm_status_btid_t *bt,
0146 char rmstatus, int rmerrorcode, short rmreason);
0147 extern int tms_load_logfile(char *logfile, char *tmxid, atmi_xa_log_t **pp_tl,
0148 int *log_removed, int *housekeepable);
0149 extern int tms_housekeep(char *logfile);
0150 extern int tm_chk_tx_status(atmi_xa_log_t *p_tl);
0151 extern atmi_xa_log_list_t* tms_copy_hash2list(int copy_mode);
0152 extern void tms_tx_hash_lock(void);
0153 extern void tms_tx_hash_unlock(void);
0154 extern int tms_log_cpy_info_to_fb(UBFH *p_ub, atmi_xa_log_t *p_tl, int inc_rm_stat);
0155
0156 extern int tm_drive(atmi_xa_tx_info_t *p_xai, atmi_xa_log_t *p_tl, int master_op,
0157 short rmid, long flags);
0158
0159
0160 extern int tm_prepare_local(UBFH *p_ub, atmi_xa_tx_info_t *p_xai, long btid);
0161 extern int tm_prepare_remote_call(atmi_xa_tx_info_t *p_xai, short rmid, long btid);
0162 extern int tm_prepare_combined(atmi_xa_tx_info_t *p_xai, short rmid, long btid);
0163
0164
0165 extern int tm_rollback_local(UBFH *p_ub, atmi_xa_tx_info_t *p_xai, long btid);
0166 extern int tm_rollback_remote_call(atmi_xa_tx_info_t *p_xai, short rmid, long btid);
0167 extern int tm_rollback_combined(atmi_xa_tx_info_t *p_xai, short rmid, long btid);
0168
0169
0170 extern int tm_forget_local(UBFH *p_ub, atmi_xa_tx_info_t *p_xai, long btid);
0171 extern int tm_forget_remote_call(atmi_xa_tx_info_t *p_xai, short rmid, long btid);
0172 extern int tm_forget_combined(atmi_xa_tx_info_t *p_xai, short rmid, long btid);
0173
0174
0175 extern int tm_commit_local(UBFH *p_ub, atmi_xa_tx_info_t *p_xai, long btid);
0176 extern int tm_commit_remote_call(atmi_xa_tx_info_t *p_xai, short rmid, long btid);
0177 extern int tm_commit_combined(atmi_xa_tx_info_t *p_xai, short rmid, long btid);
0178
0179 extern int tm_tpbegin(UBFH *p_ub);
0180 extern int tm_tpcommit(UBFH *p_ub);
0181 extern int tm_tpabort(UBFH *p_ub);
0182
0183 extern int tm_tmprepare(UBFH *p_ub);
0184 extern int tm_tmcommit(UBFH *p_ub);
0185 extern int tm_tmabort(UBFH *p_ub);
0186 extern int tm_tmforget(UBFH *p_ub);
0187 extern int tm_tmregister(UBFH *p_ub);
0188 extern int tm_rmstatus(UBFH *p_ub);
0189
0190
0191 extern int background_read_log(void);
0192 extern void background_wakeup(void);
0193 extern int background_process_init(void);
0194 extern void background_lock(void);
0195 extern void background_unlock(void);
0196
0197
0198 extern ndrx_tms_file_registry_t *ndrx_tms_file_registry_get(ndrx_tms_file_registry_t ** hash, const char *tmxid);
0199 extern int ndrx_tms_file_registry_add(ndrx_tms_file_registry_t ** hash,
0200 const char *tmxid, int housekeepable);
0201 extern int ndrx_tms_file_registry_del(ndrx_tms_file_registry_t ** hash, ndrx_tms_file_registry_t *ent);
0202 extern void ndrx_tms_file_registry_free(ndrx_tms_file_registry_t ** hash);
0203
0204 extern int tms_log_checkpointseq(atmi_xa_log_t *p_tl);
0205
0206
0207 extern int tm_tpprinttrans(UBFH *p_ub, int cd);
0208 extern int tm_aborttrans(UBFH *p_ub);
0209 extern int tm_status(UBFH *p_ub);
0210 extern int tm_committrans(UBFH *p_ub);
0211 extern int tm_recoverlocal(UBFH *p_ub, int cd);
0212 extern int tm_proclocal(char cmd, UBFH *p_ub, int cd);
0213
0214
0215 extern long tms_btid_gettid(atmi_xa_log_t *p_tl, short rmid);
0216
0217
0218 extern atmi_xa_rm_status_btid_t *tms_btid_find(atmi_xa_log_t *p_tl,
0219 short rmid, long btid);
0220 extern int tms_btid_add(atmi_xa_log_t *p_tl, short rmid,
0221 long btid, char rmstatus, int rmerrorcode, short rmreason,
0222 atmi_xa_rm_status_btid_t **bt);
0223 extern int tms_btid_addupd(atmi_xa_log_t *p_tl, short rmid,
0224 long *btid, char rmstatus, int rmerrorcode, short rmreason, int *exists,
0225 atmi_xa_rm_status_btid_t **bt);
0226
0227
0228 #ifdef __cplusplus
0229 }
0230 #endif
0231
0232 #endif
0233
0234