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 #define TMQ_FSCACHE_LEN sizeof(tmq_msg_t)
0102
0103
0104
0105
0106
0107
0108 typedef struct
0109 {
0110 char magic[4];
0111 short srvid;
0112 short nodeid;
0113
0114
0115
0116 char qname[TMQNAMELEN+1];
0117 char qspace[XATMI_SERVICE_NAME_LENGTH+1];
0118 char command_code;
0119 char msgid[TMMSGIDLEN];
0120 long flags;
0121 char reserved[64];
0122 char magic2[4];
0123 } tmq_cmdheader_t;
0124
0125
0126
0127
0128 typedef struct
0129 {
0130
0131
0132
0133
0134 tmq_cmdheader_t hdr;
0135 uint64_t lockthreadid;
0136 char status;
0137 long trycounter;
0138 long msgtstamp;
0139 long msgtstamp_usec;
0140 int msgtstamp_cntr;
0141 long trytstamp;
0142 long trytstamp_usec;
0143
0144 TPQCTL qctl;
0145
0146 long len;
0147 char msg[0];
0148
0149
0150 } tmq_msg_t;
0151
0152
0153
0154
0155 typedef struct
0156 {
0157 tmq_cmdheader_t hdr;
0158 } tmq_msg_del_t;
0159
0160
0161
0162
0163
0164 typedef struct
0165 {
0166 tmq_cmdheader_t hdr;
0167 } tmq_msg_dum_t;
0168
0169
0170
0171
0172
0173 typedef struct
0174 {
0175 tmq_cmdheader_t hdr;
0176
0177 } tmq_msg_unl_t;
0178
0179
0180
0181
0182 typedef struct
0183 {
0184 tmq_cmdheader_t hdr;
0185 char status;
0186 long trycounter;
0187 long trytstamp;
0188 long trytstamp_usec;
0189
0190 } tmq_msg_upd_t;
0191
0192 #define UPD_MSG(DEST, SRC) NDRX_LOG(log_debug, "status [%c] -> [%c]",\
0193 DEST->status, SRC->status);\
0194 DEST->status = SRC->status;\
0195 NDRX_LOG(log_debug, "trycounter [%ld] -> [%ld]",\
0196 DEST->trycounter, SRC->trycounter);\
0197 DEST->trycounter = SRC->trycounter;\
0198 NDRX_LOG(log_debug, "trycounter [%ld] -> [%ld]",\
0199 DEST->trytstamp, SRC->trytstamp);\
0200 DEST->trytstamp = SRC->trytstamp;\
0201 NDRX_LOG(log_debug, "trycounter_usec [%ld] -> [%ld]",\
0202 DEST->trytstamp, SRC->trytstamp);\
0203 DEST->trytstamp_usec = SRC->trytstamp_usec;
0204
0205
0206
0207
0208 union tmq_block {
0209 tmq_cmdheader_t hdr;
0210 tmq_msg_t msg;
0211 tmq_msg_del_t del;
0212 tmq_msg_upd_t upd;
0213 tmq_msg_dum_t dum;
0214 };
0215
0216
0217
0218
0219 union tmq_upd_block {
0220 tmq_cmdheader_t hdr;
0221 tmq_msg_del_t del;
0222 tmq_msg_upd_t upd;
0223 tmq_msg_dum_t dum;
0224 };
0225
0226
0227
0228 extern char ndrx_G_qspace[];
0229 extern char ndrx_G_qspacesvc[];
0230
0231
0232
0233
0234
0235 extern int tmq_setup_cmdheader_newmsg(tmq_cmdheader_t *hdr, char *qname,
0236 short nodeid, short srvid, char *qspace, long flags);
0237 extern void tmq_msgid_gen(char *msgid);
0238 extern char * tmq_msgid_serialize(char *msgid_in, char *msgid_str_out);
0239 extern char * tmq_msgid_deserialize(char *msgid_str_in, char *msgid_out);
0240 extern void tmq_msgid_get_info(char *msgid, short *p_nodeid, short *p_srvid);
0241 extern char * tmq_corrid_serialize(char *corrid_in, char *corrid_str_out);
0242 extern int tmq_finalize_files(UBFH *p_ub);
0243 extern void tmq_set_tmqueue(
0244 int setting
0245 , int (*p_tmq_setup_cmdheader_dum)(tmq_cmdheader_t *hdr, char *qname,
0246 short nodeid, short srvid, char *qspace, long flags)
0247 , int (*p_tmq_dum_add)(char *tmxid)
0248 , int (*p_tmq_unlock_msg)(union tmq_upd_block *b)
0249 , void (**p_tmq_chkdisk_th)(void *ptr, int *p_finish_off)
0250 , int (*p_tmq_msgid_exists)(char *msgid_str)
0251 , void (*p_tpexit)(void));
0252
0253
0254 extern size_t tmq_get_block_len(char *data);
0255 extern int tmq_storage_write_cmd_newmsg(tmq_msg_t *msg, int *int_diag);
0256 extern int tmq_storage_write_cmd_block(char *p_block, char *descr, char *cust_tmxid,
0257 int *int_diag);
0258 extern int tmq_storage_get_blocks(int (*process_block)(char *tmxid,
0259 union tmq_block **p_block, int state, int seqno), short nodeid, short srvid);
0260
0261
0262 extern int ndrx_xa_qminiservce(UBFH *p_ub, char cmd);
0263
0264 extern int tmq_setup_cmdheader_dum(tmq_cmdheader_t *hdr, char *qname,
0265 short nodeid, short srvid, char *qspace, long flags);
0266
0267 extern int tmq_lock_msg(char *msgid);
0268
0269 extern long tmq_chkdisk_stopwatch_get_delta_sec(void);
0270 extern void tmq_chkdisk_stopwatch_reset(void);
0271
0272 #ifdef __cplusplus
0273 }
0274 #endif
0275
0276 #endif
0277
0278