51a52
> #define softfail_ce(x) (x->ces[JSON_CONF_SOFTFAIL])
53a55,57
>
> static int json_init_connect(struct ulogd_pluginstance *upi);
>
61a66,67
> int started;
> int softfail;
81c87,88
< JSON_CONF_MAX
---
> JSON_CONF_SOFTFAIL,
> JSON_CONF_MAX,
140a148,153
> [JSON_CONF_SOFTFAIL] = {
> .key = "softfail",
> .type = CONFIG_TYPE_INT,
> .options = CONFIG_OPT_NONE,
> .u = { .value = 0 },
> },
283a297,313
> if (opi->softfail == 1 && opi->started == 0) {
> int state;
> state = json_init_connect(upi);
> /* Not connected but softfail, skip packet */
> if (state == 1) {
> ulogd_log(ULOGD_DEBUG, "unable to connect to json but softail=1, packet will be ignored.\n");
> return ULOGD_IRET_OK;
> }
> else if (state == 0) {
> ulogd_log(ULOGD_DEBUG, "successfully connected json endpoint!\n");
> }
> else {
> ulogd_log(ULOGD_FATAL, "not supposed to happen !\n");
> return ULOGD_IRET_STOP;
> }
> }
>
500a531,535
> if ( softfail_ce(upi->config_kset).u.value != 0 )
> op->softfail = 1;
> else
> op->softfail = 0;
>
542a578,609
>
> /*
> return value:
> 0: connection is OK.
> 1: connection is KO but softfail=1 (retry later).
> -1: connection is KO and softfail=0 (fail).
> */
> static int json_init_connect(struct ulogd_pluginstance *upi)
> {
> struct json_priv *op = (struct json_priv *) &upi->private;
> int ret;
> ret = 0;
> if (op->mode == JSON_MODE_FILE)
> ret = json_init_file(upi);
> else
> ret = json_init_socket(upi);
>
> /* failed starting and softfail_start != 0 */
> if (ret != 0) {
> if(op->softfail == 1) {
> ulogd_log(ULOGD_INFO, "can't init output, but softfail=1. Will retry later.\n");
> op->started = 0;
> return 1;
> } else {
> ulogd_log(ULOGD_FATAL, "can't connect and softfail=0, fatal error.\n");
> return -1;
> }
> }
> op->started = 1;
> return 0;
> }
>
561,564c628
< if (op->mode == JSON_MODE_FILE)
< return json_init_file(upi);
< else
< return json_init_socket(upi);
---
> return json_init_connect(upi) == -1 ? -1 : 0;