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 TMQUEUE_H
0036 #define TMQUEUE_H
0037
0038 #ifdef __cplusplus
0039 extern "C" {
0040 #endif
0041
0042
0043 #include <xa_cmn.h>
0044 #include <atmi.h>
0045 #include <exhash.h>
0046 #include <exthpool.h>
0047
0048
0049
0050
0051
0052
0053
0054
0055 #define TMQ_DEFAULT_Q "@"
0056
0057 #define TMQ_MAGIC "ETQ3"
0058 #define TMQ_MAGIC2 "END3"
0059 #define TMQ_MAGIC_LEN 4
0060
0061 #define TMQ_MAGICBASE "ETQ"
0062 #define TMQ_MAGICBASE2 "END"
0063 #define TMQ_MAGICBASE_LEN 3
0064
0065 #define TMQ_STORCMD_NEWMSG 'N'
0066 #define TMQ_STORCMD_UPD 'U'
0067 #define TMQ_STORCMD_DEL 'D'
0068 #define TMQ_STORCMD_UNLOCK 'L'
0069 #define TMQ_STORCMD_DUM 'M'
0070
0071
0072
0073
0074
0075
0076 #define TMQ_STATUS_ACTIVE 'A'
0077 #define TMQ_STATUS_DONE 'D'
0078 #define TMQ_STATUS_EXPIRED 'E'
0079 #define TMQ_STATUS_SUSPENDED 'S'
0080
0081
0082 #define TMQ_SYS_ASYNC_CPLT 0x00000001
0083
0084
0085
0086
0087
0088
0089
0090 #define TMQ_ERR_VERSION 1
0091 #define TMQ_ERR_EOF 2
0092 #define TMQ_ERR_CORRUPT 3
0093
0094
0095
0096
0097 #define TMQ_HOUSEKEEP_DEFAULT (90*60)
0098
0099 #define TMQ_INT_DIAG_EJOIN 0x00000001
0100
0101
0102
0103
0104
0105
0106 typedef struct
0107 {
0108 char magic[4];
0109 short srvid;
0110 short nodeid;
0111
0112
0113
0114 char qname[TMQNAMELEN+1];
0115 char qspace[XATMI_SERVICE_NAME_LENGTH+1];
0116 char command_code;
0117 char msgid[TMMSGIDLEN];
0118 long flags;
0119 char reserved[64];
0120 char magic2[4];
0121 } tmq_cmdheader_t;
0122
0123
0124
0125
0126 typedef struct
0127 {
0128
0129
0130
0131
0132 tmq_cmdheader_t hdr;
0133 uint64_t lockthreadid;
0134 char status;
0135 long trycounter;
0136 long msgtstamp;
0137 long msgtstamp_usec;
0138 int msgtstamp_cntr;
0139 long trytstamp;
0140 long trytstamp_usec;
0141
0142 TPQCTL qctl;
0143
0144 long len;
0145 char msg[0];
0146
0147
0148 } tmq_msg_t;
0149
0150
0151
0152
0153 typedef struct
0154 {
0155 tmq_cmdheader_t hdr;
0156 } tmq_msg_del_t;
0157
0158
0159
0160
0161
0162 typedef struct
0163 {
0164 tmq_cmdheader_t hdr;
0165 } tmq_msg_dum_t;
0166
0167
0168
0169
0170
0171 typedef struct
0172 {
0173 tmq_cmdheader_t hdr;
0174
0175 } tmq_msg_unl_t;
0176
0177
0178
0179
0180 typedef struct
0181 {
0182 tmq_cmdheader_t hdr;
0183 char status;
0184 long trycounter;
0185 long trytstamp;
0186 long trytstamp_usec;
0187
0188 } tmq_msg_upd_t;
0189
0190 #define UPD_MSG(DEST, SRC) NDRX_LOG(log_debug, "status [%c] -> [%c]",\
0191 DEST->status, SRC->status);\
0192 DEST->status = SRC->status;\
0193 NDRX_LOG(log_debug, "trycounter [%ld] -> [%ld]",\
0194 DEST->trycounter, SRC->trycounter);\
0195 DEST->trycounter = SRC->trycounter;\
0196 NDRX_LOG(log_debug, "trycounter [%ld] -> [%ld]",\
0197 DEST->trytstamp, SRC->trytstamp);\
0198 DEST->trytstamp = SRC->trytstamp;\
0199 NDRX_LOG(log_debug, "trycounter_usec [%ld] -> [%ld]",\
0200 DEST->trytstamp, SRC->trytstamp);\
0201 DEST->trytstamp_usec = SRC->trytstamp_usec;
0202
0203
0204
0205
0206 union tmq_block {
0207 tmq_cmdheader_t hdr;
0208 tmq_msg_t msg;
0209 tmq_msg_del_t del;
0210 tmq_msg_upd_t upd;
0211 tmq_msg_dum_t dum;
0212 };
0213
0214
0215
0216
0217 union tmq_upd_block {
0218 tmq_cmdheader_t hdr;
0219 tmq_msg_del_t del;
0220 tmq_msg_upd_t upd;
0221 tmq_msg_dum_t dum;
0222 };
0223
0224
0225
0226 extern char ndrx_G_qspace[];
0227 extern char ndrx_G_qspacesvc[];
0228
0229
0230
0231
0232
0233 extern int tmq_setup_cmdheader_newmsg(tmq_cmdheader_t *hdr, char *qname,
0234 short nodeid, short srvid, char *qspace, long flags);
0235 extern void tmq_msgid_gen(char *msgid);
0236 extern char * tmq_msgid_serialize(char *msgid_in, char *msgid_str_out);
0237 extern char * tmq_msgid_deserialize(char *msgid_str_in, char *msgid_out);
0238 extern void tmq_msgid_get_info(char *msgid, short *p_nodeid, short *p_srvid);
0239 extern char * tmq_corrid_serialize(char *corrid_in, char *corrid_str_out);
0240 extern int tmq_finalize_files(UBFH *p_ub);
0241 extern void tmq_set_tmqueue(
0242 int setting
0243 , int (*p_tmq_setup_cmdheader_dum)(tmq_cmdheader_t *hdr, char *qname,
0244 short nodeid, short srvid, char *qspace, long flags)
0245 , int (*p_tmq_dum_add)(char *tmxid)
0246 , int (*p_tmq_unlock_msg)(union tmq_upd_block *b)
0247 , void (**p_tmq_chkdisk_th)(void *ptr, int *p_finish_off)
0248 , int (*p_tmq_msgid_exists)(char *msgid_str)
0249 , void (*p_tpexit)(void));
0250
0251
0252 extern size_t tmq_get_block_len(char *data);
0253 extern int tmq_storage_write_cmd_newmsg(tmq_msg_t *msg, int *int_diag);
0254 extern int tmq_storage_write_cmd_block(char *p_block, char *descr, char *cust_tmxid,
0255 int *int_diag);
0256 extern int tmq_storage_get_blocks(int (*process_block)(char *tmxid,
0257 union tmq_block **p_block, int state, int seqno), short nodeid, short srvid);
0258
0259
0260 extern int ndrx_xa_qminiservce(UBFH *p_ub, char cmd);
0261
0262 extern int tmq_setup_cmdheader_dum(tmq_cmdheader_t *hdr, char *qname,
0263 short nodeid, short srvid, char *qspace, long flags);
0264
0265 extern int tmq_lock_msg(char *msgid);
0266
0267 extern long tmq_chkdisk_stopwatch_get_delta_sec(void);
0268 extern void tmq_chkdisk_stopwatch_reset(void);
0269
0270 #ifdef __cplusplus
0271 }
0272 #endif
0273
0274 #endif
0275
0276