-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
core: minimal synchronous scheduler #6339
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -173,6 +173,125 @@ void flb_output_coro_add(struct flb_output_instance *ins, struct flb_coro *coro) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mk_list_add(&out_flush->_head, &ins->flush_list); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Queue a task to be flushed at a later time | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Deletes retry context if enqueue fails | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
static int flb_output_task_queue_enqueue(struct flb_task_queue *queue, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_task_retry *retry, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_task *task, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_output_instance *out_ins, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_config *config) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_task_enqueued *queued_task; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queued_task = flb_malloc(sizeof(struct flb_task_enqueued)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!queued_task) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_errno(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (retry) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_task_retry_destroy(retry); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return -1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queued_task->retry = retry; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queued_task->out_instance = out_ins; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queued_task->task = task; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queued_task->config = config; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mk_list_add(&queued_task->_head, &queue->pending); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
matthewfala marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Pop task from pending queue and flush it | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Will delete retry context if flush fails | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
static int flb_output_task_queue_flush_one(struct flb_task_queue *queue) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_task_enqueued *queued_task; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int ret; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int is_empty; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_empty = mk_list_is_empty(&queue->pending) == 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (is_empty) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_error("Attempting to flush task from an empty in_progress queue"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return -1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queued_task = mk_list_entry_first(&queue->pending, struct flb_task_enqueued, _head); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mk_list_del(&queued_task->_head); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mk_list_add(&queued_task->_head, &queue->in_progress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ret = flb_output_task_flush(queued_task->task, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queued_task->out_instance, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queued_task->config); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* Destroy retry context if needed */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (ret == -1) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (queued_task->retry) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_task_retry_destroy(queued_task->retry); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* Flush the next task */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_output_task_singleplex_flush_next(queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return -1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return ret; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Will either run or queue running a single task | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Deletes retry context if enqueue fails | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int flb_output_task_singleplex_enqueue(struct flb_task_queue *queue, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
matthewfala marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_task_retry *retry, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_task *task, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_output_instance *out_ins, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_config *config) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int ret; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int is_empty; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* Enqueue task */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ret = flb_output_task_queue_enqueue(queue, retry, task, out_ins, config); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (ret == -1) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return -1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* Launch task if nothing is running */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_empty = mk_list_is_empty(&out_ins->singleplex_queue->in_progress) == 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (is_empty) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return flb_output_task_queue_flush_one(out_ins->singleplex_queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Clear in progress task and flush a single queued task if exists | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Deletes retry context on next flush if flush fails | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int flb_output_task_singleplex_flush_next(struct flb_task_queue *queue) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int is_empty; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_task_enqueued *ended_task; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* Remove in progress task */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_empty = mk_list_is_empty(&queue->in_progress) == 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!is_empty) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ended_task = mk_list_entry_first(&queue->in_progress, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
matthewfala marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
struct flb_task_enqueued, _head); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mk_list_del(&ended_task->_head); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_free(ended_task); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* Flush if there is a pending task queued */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_empty = mk_list_is_empty(&queue->pending) == 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!is_empty) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return flb_output_task_queue_flush_one(queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Flush a task through the output plugin, either using a worker thread + coroutine | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* or a simple co-routine in the current thread. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -191,6 +310,11 @@ int flb_output_task_flush(struct flb_task *task, | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ret = flb_output_thread_pool_flush(task, out_ins, config); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (ret == -1) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_task_users_dec(task, FLB_FALSE); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* If we are in synchronous mode, flush one waiting task */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (out_ins->flags & FLB_OUTPUT_SYNCHRONOUS) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_output_task_singleplex_flush_next(out_ins->singleplex_queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -208,6 +332,14 @@ int flb_output_task_flush(struct flb_task *task, | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sizeof(struct flb_output_flush*)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (ret == -1) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_errno(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_output_flush_destroy(out_flush); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this was a missing error handling code right? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It does look like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here's where it is normally called which is in turn called each time a task finishes. Lines 501 to 534 in d7a30d1
Since this task is not started it will never finish, meaning that this flush would never get cleaned up unless we call flb_output_flush_destroy here. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_task_users_dec(task, FLB_FALSE); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* If we are in synchronous mode, flush one waiting task */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (out_ins->flags & FLB_OUTPUT_SYNCHRONOUS) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_output_task_singleplex_flush_next(out_ins->singleplex_queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return -1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -285,6 +417,11 @@ int flb_output_instance_destroy(struct flb_output_instance *ins) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* release properties */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_output_free_properties(ins); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* free singleplex queue */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (ins->flags & FLB_OUTPUT_SYNCHRONOUS) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_task_queue_destroy(ins->singleplex_queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mk_list_del(&ins->_head); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_free(ins); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -461,6 +598,9 @@ struct flb_output_instance *flb_output_new(struct flb_config *config, | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
instance->p = plugin; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
instance->callback = flb_callback_create(instance->name); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!instance->callback) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (instance->flags & FLB_OUTPUT_SYNCHRONOUS) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_task_queue_destroy(instance->singleplex_queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_free(instance); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return NULL; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -474,6 +614,9 @@ struct flb_output_instance *flb_output_new(struct flb_config *config, | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ctx = flb_calloc(1, sizeof(struct flb_plugin_proxy_context)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!ctx) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_errno(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (instance->flags & FLB_OUTPUT_SYNCHRONOUS) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_task_queue_destroy(instance->singleplex_queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_free(instance); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return NULL; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -527,11 +670,25 @@ struct flb_output_instance *flb_output_new(struct flb_config *config, | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (plugin->flags & FLB_OUTPUT_NET) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ret = flb_net_host_set(plugin->name, &instance->host, output); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (ret != 0) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (instance->flags & FLB_OUTPUT_SYNCHRONOUS) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_task_queue_destroy(instance->singleplex_queue); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_free(instance); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return NULL; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* Create singleplex queue if SYNCHRONOUS mode is used */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
instance->singleplex_queue = NULL; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (instance->flags & FLB_OUTPUT_SYNCHRONOUS) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
instance->singleplex_queue = flb_task_queue_create(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!instance->singleplex_queue) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_free(instance); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_errno(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return NULL; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_kv_init(&instance->properties); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flb_kv_init(&instance->net_properties); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mk_list_init(&instance->upstreams); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
May need to discuss how to handle retry properly in the enqueued case. Can we hold onto the retry and delete it if the flush fails later?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added retry clean up to the singleplex code. Automatically cleans up the associated retry if flush fails, whenever it is called.