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 #ifndef NDRXD_H
0035 #define NDRXD_H
0036
0037 #ifdef __cplusplus
0038 extern "C" {
0039 #endif
0040
0041
0042 #include <sys/param.h>
0043 #include <atmi.h>
0044 #include <atmi_int.h>
0045 #include <ndrxdcmn.h>
0046 #include <nstopwatch.h>
0047 #include <cconfig.h>
0048 #include <exenv.h>
0049 #include <libxml/xmlreader.h>
0050 #include <ndrx_ddr.h>
0051 #include <signal.h>
0052 #include <libndrxconf.h>
0053
0054 extern sigset_t ndrx_G_org_mask;
0055
0056 #define PARSE_SECTION_FAIL EXFAIL
0057 #define PARSE_SECTION_CONFIG 0
0058 #define PARSE_SECTION_SERVERS 1
0059
0060
0061 #define COMMAND_WAIT_DEFAULT 2
0062
0063 #define RESPAWN_CNTR_MAX 1000
0064 #define DEF_SRV_STARTWAIT 30
0065 #define DEF_SRV_STOPWAIT 30
0066 #define DEF_RQADDRTTL 10
0067
0068 #define SANITY_CNT_IDLE -1
0069 #define SANITY_CNT_START 0
0070
0071 #define MAX_SERVICE_LIST 1024
0072
0073 #define NDRX_KILLSEQ_MAX 3
0074
0075
0076
0077
0078
0079
0080 typedef struct conf_server_node conf_server_node_t;
0081 struct conf_server_node
0082 {
0083 char binary_name[MAXTIDENT+1];
0084
0085
0086
0087 char fullpath[PATH_MAX+1];
0088
0089 char cmdline[PATH_MAX+1];
0090 int srvid;
0091 int min;
0092 int max;
0093 int autokill;
0094 char env[PATH_MAX];
0095
0096 int start_max;
0097
0098 int pingtime;
0099 int ping_max;
0100 int end_max;
0101 int killtime;
0102 int killseq[NDRX_KILLSEQ_MAX];
0103
0104 char exportsvcs[MAX_SERVICE_LIST];
0105
0106 char blacklistsvcs[MAX_SERVICE_LIST];
0107 int sleep_after;
0108 char SYSOPT[PATH_MAX/2 - 8 ];
0109 char APPOPT[PATH_MAX/2];
0110 char clopt[PATH_MAX];
0111 char rqaddr[MAXTIDENT+1];
0112
0113 int srvstartwait;
0114 int srvstopwait;
0115
0116
0117 char cctag[NDRX_CCTAG_MAX+1];
0118 int isprotected;
0119
0120 int reloadonchange;
0121 int respawn;
0122
0123 long rssmax;
0124 long vszmax;
0125
0126 int mindispatchthreads;
0127 int maxdispatchthreads;
0128 int threadstacksize;
0129 int procgrp_no;
0130 int procgrp_lp_no;
0131
0132
0133
0134
0135 ndrx_env_grouplist_t *envgrouplist;
0136
0137
0138 ndrx_env_list_t *envlist;
0139
0140
0141 conf_server_node_t *prev;
0142
0143 conf_server_node_t *next;
0144 };
0145
0146
0147
0148
0149 typedef struct pm_node_svc pm_node_svc_t;
0150 struct pm_node_svc
0151 {
0152 svc_inf_t svc;
0153 pm_node_svc_t *prev;
0154 pm_node_svc_t *next;
0155 };
0156
0157
0158
0159
0160 typedef struct pm_node pm_node_t;
0161 struct pm_node
0162 {
0163 conf_server_node_t *conf;
0164
0165 char binary_name[MAXTIDENT+1];
0166
0167 char binary_name_real[MAXTIDENT+1];
0168
0169 char rqaddress[NDRX_MAX_Q_SIZE+1];
0170 int srvid;
0171 char clopt[PATH_MAX - 128];
0172 long state;
0173 long reqstate;
0174 short autostart;
0175 int exec_seq_try;
0176 long rspstwatch;
0177 long pingstwatch;
0178 long pingtimer;
0179 ndrx_stopwatch_t pingroundtrip;
0180 int pingseq;
0181
0182 int num_term_sigs;
0183 long last_sig;
0184 int autokill;
0185
0186
0187
0188
0189 int killreq;
0190
0191 pid_t pid;
0192
0193 pid_t svpid;
0194 long state_changed;
0195 pm_node_svc_t *svcs;
0196 int flags;
0197 short nodeid;
0198 int reloadonchange_cksum;
0199 char binary_path[PATH_MAX+1];
0200 int resid;
0201 int procgrp_lp_no;
0202
0203 pm_node_t *prev;
0204 pm_node_t *next;
0205 };
0206
0207
0208
0209
0210 typedef struct pm_pidhash pm_pidhash_t;
0211 struct pm_pidhash
0212 {
0213 pid_t pid;
0214 pm_node_t *p_pm;
0215 pm_pidhash_t *prev;
0216 pm_pidhash_t *next;
0217 };
0218
0219
0220
0221
0222 typedef struct
0223 {
0224
0225 conf_server_node_t *monitor_config;
0226 int default_min;
0227 int default_max;
0228 int default_autokill;
0229 char default_env[PATH_MAX];
0230
0231
0232 int sanity;
0233
0234 int restart_min;
0235 int restart_step;
0236 int restart_max;
0237
0238 int default_start_max;
0239
0240 int default_pingtime;
0241 int default_ping_max;
0242
0243 int default_end_max;
0244 int default_killtime;
0245 int default_killseq[NDRX_KILLSEQ_MAX];
0246
0247 char default_exportsvcs[MAX_SERVICE_LIST];
0248
0249 char default_blacklistsvcs[MAX_SERVICE_LIST];
0250
0251 char default_cctag[NDRX_CCTAG_MAX+1];
0252
0253 int default_reloadonchange;
0254
0255 int qrmdelay;
0256
0257 int restart_to_check;
0258
0259 int checkpm;
0260 int brrefresh;
0261
0262 int default_srvstartwait;
0263 int default_srvstopwait;
0264
0265 int gather_pq_stats;
0266 int default_isprotected;
0267
0268 int default_respawn;
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279 int rqaddrttl;
0280 char default_rqaddr[MAXTIDENT+1];
0281
0282 int ddrreload;
0283
0284 long default_rssmax;
0285 long default_vszmax;
0286
0287 int ctl_had_defaults;
0288
0289 int default_mindispatchthreads;
0290 int default_maxdispatchthreads;
0291 int default_threadstacksize;
0292 int default_procgrp_no;
0293 int default_procgrp_lp_no;
0294
0295
0296 ndrx_env_group_t *envgrouphash;
0297
0298
0299 ndrx_routcrit_hash_t *cirthash;
0300
0301
0302 ndrx_services_hash_t *services;
0303
0304
0305 char *services_block;
0306
0307
0308 char *routing_block;
0309
0310
0311 ndrx_procgroups_t *procgroups;
0312
0313 } config_t;
0314
0315
0316
0317
0318 typedef struct
0319 {
0320 char args[CMD_ARG_MAX+1];
0321 int cmd;
0322 } cmd_arg_t;
0323
0324
0325
0326
0327 typedef struct
0328 {
0329 char *qprefix;
0330 char *config_file;
0331 char *config_file_short;
0332 long cmd_wait_time;
0333 char *pidfile;
0334 long stat_flags;
0335 char *qpath;
0336
0337 short restarting;
0338
0339 ndrx_stopwatch_t time_from_restart;
0340 int fullstart;
0341 int last_line;
0342 } sys_config_t;
0343
0344
0345
0346
0347 typedef struct
0348 {
0349 mqd_t listenq;
0350 char listenq_str[NDRX_MAX_Q_SIZE+1];
0351 int context;
0352 } command_state_t;
0353
0354
0355
0356
0357 typedef struct
0358 {
0359 int error;
0360 ndrx_growlist_t stringbuffer;
0361 ndrx_routcrit_typehash_t *p_crit;
0362 } ndrx_ddr_parser_t;
0363
0364
0365
0366 extern config_t *G_app_config;
0367 extern sys_config_t G_sys_config;
0368 extern ndrx_ddr_parser_t ndrx_G_ddrp;
0369
0370
0371
0372
0373 extern char *G_config_file;
0374 extern pm_node_t *G_process_model;
0375 extern pm_node_t **G_process_model_hash;
0376 extern pm_pidhash_t **G_process_model_pid_hash;
0377 extern unsigned G_sanity_cycle;
0378
0379
0380
0381 extern int command_wait_and_run(int *finished, int *abort);
0382 extern int get_cmdq_attr(struct mq_attr *attr);
0383
0384
0385 extern int remove_startfail_process(pm_node_t *p_pm, char *svcnm, pm_pidhash_t *pm_pid);
0386 extern pm_node_t * get_pm_from_srvid(int srvid);
0387 extern int remove_service_q(char *svc, short srvid, mqd_t in_qd, char *in_qstr);
0388 extern char * get_srv_admin_q(pm_node_t * p_pm);
0389
0390
0391 extern int load_config(config_t *config, char *config_file);
0392 extern int load_active_config(config_t **app_config, pm_node_t **process_model,
0393 pm_node_t ***process_model_hash, pm_pidhash_t ***process_model_pid_hash);
0394 extern int load_active_config_live(void);
0395
0396 extern int test_config(int reload, command_call_t * call, void (*p_reload_error)(command_call_t * call,
0397 int srvid, char *old_bin, char *new_bin, int error, char *msg));
0398 extern int build_process_model(conf_server_node_t *p_server_conf,
0399 pm_node_t **p_pm_model,
0400 pm_node_t **p_pm_hash);
0401 extern int add_to_pid_hash(pm_pidhash_t **pid_hash, pm_node_t *p_pm);
0402 extern int ndrxd_sigchld_init(void);
0403 extern void ndrxd_sigchld_uninit(void);
0404 extern pm_pidhash_t * pid_hash_get(pm_pidhash_t **pid_hash, pid_t pid);
0405 extern int delete_from_pid_hash(pm_pidhash_t **pid_hash, pm_pidhash_t *pm_pid);
0406 extern void sign_chld_handler(int sig);
0407 extern int cmd_close_queue(void);
0408
0409 extern int ndrx_services_parse(config_t *config, xmlDocPtr doc, xmlNodePtr cur);
0410 extern void ndrx_services_free(config_t *config);
0411
0412 extern int ndrx_routing_parse(config_t *config, xmlDocPtr doc, xmlNodePtr cur);
0413 extern void ddrerror(char *s, ...);
0414
0415 extern void ndrx_ddr_apply_sanity(void);
0416 extern void ndrx_ddr_install(void);
0417 extern void ndrx_ddr_apply(void);
0418
0419
0420 extern int do_sanity_check(int isfinal);
0421 extern int self_notify(srv_status_t *status, int block);
0422 extern int remove_server_queues(char *process, pid_t pid, int srv_id, char *rplyq);
0423 extern ndrx_stopwatch_t * ndrx_get_santiy_stopwatch(void);
0424
0425
0426 extern int do_restart_actions(void);
0427 extern int do_restart_chk(void);
0428
0429
0430 extern int app_startup(command_startstop_t *call,
0431 void (*p_startup_progress)(command_startstop_t *call, pm_node_t *pm, int calltype),
0432 long *p_processes_started);
0433 extern int is_srvs_down(void);
0434
0435 extern int ndrxd_unlink_pid_file(int second_call);
0436 extern void ndrx_mark_singlegrp_srv_booted(int nrgrps, int *sg_groups);
0437
0438
0439 extern void NDRXD_error (char *str);
0440 extern void NDRXD_set_error(int error_code);
0441 extern void NDRXD_set_error_msg(int error_code, char *msg);
0442 extern void NDRXD_set_error_fmt(int error_code, const char *fmt, ...);
0443 extern void NDRXD_unset_error(void);
0444 extern int NDRXD_is_error(void);
0445 extern void NDRXD_append_error_msg(char *msg);
0446 extern int * _ndrxd_getNDRXD_errno_addr (void);
0447 extern char * ndrxd_strerror (int err);
0448 extern char * NDRXD_error_res_get(int **error_code_ptr, int *errbufsz);
0449
0450 #define ndrxd_errno (*_ndrxd_getNDRXD_errno_addr())
0451
0452
0453 extern int cmd_xadunadv (command_call_t * call, char *data, size_t len, int context);
0454 extern int cmd_srvunadv (command_call_t * call, char *data, size_t len, int context);
0455 extern int cmd_srvadv (command_call_t * call, char *data, size_t len, int context);
0456 extern int cmd_xadreadv (command_call_t * call, char *data, size_t len, int context);
0457
0458 extern int readv_request(int srvid, char *svc);
0459 extern char * get_srv_admin_q(pm_node_t * p_pm);
0460 extern int pq_run_santiy(int run_hist);
0461
0462
0463 extern int roc_is_reload_in_progress(unsigned sanity_cycle);
0464 extern int roc_check_binary(char *binary_path, unsigned sanity_cycle);
0465 extern void roc_mark_as_reloaded(char *binary_path, unsigned sanity_cycle);
0466 extern int self_sreload(pm_node_t *p_pm);
0467
0468 extern int ndrxd_sanity_finally(void);
0469
0470
0471 extern void ndrx_ddr_delete_buffer(void *ptr);
0472 extern int ndrx_ddr_add_group(ndrx_routcritseq_dl_t * seq, char *grp, int is_mallocd);
0473 extern ndrx_routcritseq_dl_t * ndrx_ddr_new_rangeexpr(char *range_min, char *range_max);
0474 extern char *ndrx_ddr_new_rangeval(char *range, int is_negative, int dealloc);
0475
0476 void ddrerror(char *s, ...);
0477 extern int ndrx_ddr_gen_blocks(config_t *config);
0478 extern void ndrx_ddr_free_all(config_t *config);
0479
0480 #ifdef EX_USE_SYSVQ
0481 extern int do_sanity_check_sysv(int finalchk);
0482 extern int ndrxd_sysv_finally(void);
0483 #endif
0484
0485 #ifdef __cplusplus
0486 }
0487 #endif
0488
0489 #endif
0490
0491