gboolean http_dd_init(LogPipe *s) { HTTPDestinationDriver *self = (HTTPDestinationDriver *)s; GlobalConfig *cfg = log_pipe_get_config(s); if (self->load_balancer->num_targets == 0) http_load_balancer_add_target(self->load_balancer, HTTP_DEFAULT_URL); if (self->load_balancer->num_targets > 1 && s->persist_name == NULL) { msg_warning("WARNING: your http() driver instance uses multiple urls without persist-name(). " "It is recommended that you set persist-name() in this case as syslog-ng will be " "using the first URL in urls() to register persistent data, such as the disk queue " "name, which might change", evt_tag_str("url", self->load_balancer->targets[0].url)); } /* we need to set up url before we call the inherited init method, so our stats key is correct */ self->url = self->load_balancer->targets[0].url; if (!_setup_auth_header(s)) return FALSE; if (!log_threaded_dest_driver_init_method(s)) return FALSE; log_template_options_init(&self->template_options, cfg); http_load_balancer_set_recovery_timeout(self->load_balancer, self->super.time_reopen); return log_threaded_dest_driver_start_workers(&self->super); }
Test(http_loadbalancer, failed_servers_are_reattempted_after_recovery_time) { HTTPLoadBalancer *lb = _construct_load_balancer(); HTTPLoadBalancerClient lbc[NUM_CLIENTS]; HTTPLoadBalancerTarget *target; http_load_balancer_set_recovery_timeout(lb, 1); _setup_lb_clients(lb, lbc, G_N_ELEMENTS(lbc)); http_load_balancer_set_target_failed(lb, &lb->targets[0]); for (gint i = 0; i < G_N_ELEMENTS(lbc); i++) { target = http_load_balancer_choose_target(lb, &lbc[i]); cr_assert(target->state == HTTP_TARGET_OPERATIONAL, "As it seems the test lost its race against the load" "balancer's 1 seconds recovery timeout. You can always bump" "the timeout a bit higher, but hey this loop is 16 iterations" "long, that should be doable in 1 second."); } sleep(1); target = http_load_balancer_choose_target(lb, &lbc[0]); cr_assert(target->state == HTTP_TARGET_FAILED); _teardown_lb_clients(lb, lbc, G_N_ELEMENTS(lbc)); http_load_balancer_free(lb); }