Skip to content

Commit 29d840d

Browse files
authored
Merge pull request syslog-ng#4915 from wjoost/mqtt-destination-yield
Fix MQTT destination module loosing its connection to the broker regulary.
2 parents 6e401bc + 2696620 commit 29d840d

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

modules/mqtt/destination/mqtt-worker.c

+34
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,35 @@
2626
#include "thread-utils.h"
2727
#include "apphook.h"
2828
#include "messages.h"
29+
#include "timeutils/misc.h"
2930

3031
#include <stdio.h>
3132

3233
#define PUBLISH_TIMEOUT 10000L
34+
#define YIELD_INTERVAL_MSEC 500
35+
36+
static void
37+
_start_yield_timer(MQTTDestinationWorker *self)
38+
{
39+
if (iv_timer_registered(&self->yield_timer))
40+
iv_timer_unregister(&self->yield_timer);
41+
42+
iv_validate_now();
43+
self->yield_timer.expires = iv_now;
44+
timespec_add_msec(&self->yield_timer.expires, YIELD_INTERVAL_MSEC);
45+
46+
iv_timer_register(&self->yield_timer);
47+
}
48+
49+
static void
50+
_yield_mqtt(void *cookie)
51+
{
52+
MQTTDestinationWorker *self = cookie;
53+
54+
MQTTClient_yield();
55+
56+
_start_yield_timer(self);
57+
}
3358

3459
static LogThreadedResult
3560
_publish_result_evaluation (LogThreadedDestWorker *self, gint result)
@@ -234,6 +259,12 @@ _init(LogThreadedDestWorker *s)
234259
return FALSE;
235260
}
236261

262+
IV_TIMER_INIT(&self->yield_timer);
263+
self->yield_timer.cookie = self;
264+
self->yield_timer.handler = _yield_mqtt;
265+
266+
_start_yield_timer(self);
267+
237268
return log_threaded_dest_worker_init_method(s);
238269
}
239270

@@ -242,6 +273,9 @@ _deinit(LogThreadedDestWorker *s)
242273
{
243274
MQTTDestinationWorker *self = (MQTTDestinationWorker *)s;
244275

276+
if (iv_timer_registered(&self->yield_timer))
277+
iv_timer_unregister(&self->yield_timer);
278+
245279
MQTTClient_destroy(&self->client);
246280

247281
log_threaded_dest_worker_deinit_method(s);

modules/mqtt/destination/mqtt-worker.h

+4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#include "logthrdest/logthrdestdrv.h"
2727
#include "thread-utils.h"
2828

29+
#include <iv.h>
30+
2931
#include <MQTTClient.h>
3032

3133
typedef struct _MQTTDestinationWorker
@@ -36,6 +38,8 @@ typedef struct _MQTTDestinationWorker
3638

3739
GString *string_to_write;
3840
GString *topic_name_buffer;
41+
42+
struct iv_timer yield_timer;
3943
} MQTTDestinationWorker;
4044

4145
LogThreadedDestWorker *mqtt_dw_new(LogThreadedDestDriver *o, gint worker_index);

0 commit comments

Comments
 (0)