Builder collectd-60-solaris10-sparc Build #36
Results:
Build successful
SourceStamp:
Project | collectd/collectd |
Repository | https://github.com/collectd/collectd |
Branch | collectd-6.0 |
Revision | e4cc3f9a0f066153b1f7666d3065b0985b0d13a8 |
Got Revision | e4cc3f9a0f066153b1f7666d3065b0985b0d13a8 |
Changes | 5 changes |
BuildSlave:
unstable10sReason:
The AnyBranchScheduler scheduler named 'schedule-collectd-60' triggered this build
Steps and Logfiles:
Build Properties:
Name | Value | Source |
---|---|---|
branch | collectd-6.0 | Build |
builddir | /export/home/buildbot-unstable10s/slave/collectd-60-solaris10-sparc | slave |
buildername | collectd-60-solaris10-sparc | Builder |
buildnumber | 36 | Build |
ciflags | --disable-aggregation --disable-check_uptime --disable-csv --disable-java --disable-lua --disable-match_empty_counter --disable-match_hashed --disable-match_regex --disable-match_timediff --disable-match_value --disable-network --disable-perl --disable-postgresql --disable-target_notification --disable-target_replace --disable-target_scale --disable-target_set --disable-target_v5upgrade --disable-threshold --disable-write_graphite --disable-write_kafka --disable-write_mongodb --disable-write_pro .. [property value too long] | SetPropertyFromCommand Step |
codebase | Build | |
got_revision | e4cc3f9a0f066153b1f7666d3065b0985b0d13a8 | Git |
project | collectd/collectd | Build |
repository | https://github.com/collectd/collectd | Build |
revision | e4cc3f9a0f066153b1f7666d3065b0985b0d13a8 | Build |
scheduler | schedule-collectd-60 | Scheduler |
slavename | unstable10s | BuildSlave |
workdir | /export/home/buildbot-unstable10s/slave/collectd-60-solaris10-sparc | slave (deprecated) |
Forced Build Properties:
Name | Label | Value |
---|
Responsible Users:
- Leonard Göhrsl.goehrs@pengutronix.de
- Leonard Göhrsleonard@goehrs.eu
Timing:
Start | Mon Feb 27 18:39:08 2023 |
End | Mon Feb 27 19:02:36 2023 |
Elapsed | 23 mins, 28 secs |
All Changes:
:
Change #169443
Category None Changed by Leonard Göhrs <l.goehrs @pengutronix.de>Changed at Mon 27 Feb 2023 18:37:53 Repository https://github.com/collectd/collectd Project collectd/collectd Branch collectd-6.0 Revision 55efb56a8d56f5b37bfdad430801e731210ecd1f Comments
[collectd 6] src/daemon/plugin.c: Use one thread per write plugin ChangeLog: collectd: Use one write thread per write plugin The previous write thread design used a single queue with a single read head from which one of the write threads would de-queue an element and would then sequentially call each registered write callback. This meant that all write plugins would have to cooperate in order to not drop values. If for example all write threads are stalled by the same write plugin's callback function not returning, the queue will start to fill up until elements start to be dropped, even though there are other plugins that could still make progress. In addition to that, all write callbacks have to be designed to be reentrant right now, which increases complexity. This new design uses a single linked-list write queue with one read head per output plugin. Each output plugin is serviced in a dedicated write thread. Elements are freed based on a reference count, which is shown in the ASCII-Art below: +- Thread #1 Head +- Thread #2 Head +- Tail v v v +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ | 0|->| 1|->| 1|->| 1|->| 1|->| 2|->| 2|->| 2|->| 2|->| 2|->X +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ ^ +- to be free()d The changes introduced by this commit have some side-effects: - The WriteThreads config option no longer exists, as a strict 1:1 ratio of write plugins and write threads is used. - The data flow has changed. The previous data flow was: (From one of the ReadThreads) plugin_dispatch_{values,multivalue}() plugin_dispatch_metric_family() enqueue_metric_family() write_queue_enqueue() -----{Queue}----+ | (In one of the WriteThreads threads) | plugin_write_thread() | ^- plugin_write_dequeue() <-+ plugin_dispatch_metric_internal() ^- fc_process_chain(pre_cache_chain) fc_process_chain(fc_process_chain) fc_bit_write_invoke() plugin_write(NULL) / plugin_write(plugin_name) plugin callback() The data flow now is: (From one of the ReadThreads) plugin_dispatch_{values,multivalue}() plugin_dispatch_metric_family() plugin_dispatch_metric_internal() ^- fc_process_chain(pre_cache_chain) fc_process_chain(post_cache_chain) fc_bit_write_invoke() plugin_write(NULL) / plugin_write(plugin_name) write_queue_enqueue() -----{Queue}----+ | (In one of the WriteThreads threads) | plugin_write_thread() <-+ plugin callback() One result of this change is, that the behaviour of plugin_write has changed from running the plugin callback immediately and in the same thread, to always enqueueing the value and de-queing in the dedicated thread. - The behaviour of the WriteQueueLimitHigh and WriteQueueLimitLow options has changed. The Queue will be be capped to a length of LimitHigh by dropping random queue elements between the queue end and LimitLow. Setting LimitLow to a reasonably large value ensures that fast write plugins do not loose values, even in the vicinity of a slow plugin. The diagram below shows the random element selected for removal (###) in Step 1 and the queue with the element removed in Step 2. Step 1: +- Thread #1 Head | +- Thread #2 Head +- Tail v | | v v +--+| +--+ #### +--+| +--+ +--+ +--+ +--+ +--+ | 1|->| 1|-># 1#->| 1|->| 2|->| 2|->| 2|->| 2|->| 2|->X +--+| +--+ #### +--+| +--+ +--+ +--+ +--+ +--+ | | | LimitHigh | LimitLow Step 2: | +- Thread #1 Head +- Thread #2 Head +- Tail | v | v v | +--+ +--+ +--+| +--+ +--+ +--+ +--+ +--+ | | 1|->| 1|->| 1|->| 2|->| 2|->| 2|->| 2|->| 2|->X | +--+ +--+ +--+| +--+ +--+ +--+ +--+ +--+ | | | LimitHigh | LimitLow Signed-off-by: Leonard Göhrs <l.goehrs@pengutronix.de>
Changed files
- src/collectd.conf.in
- src/collectd.conf.pod
- src/daemon/configfile.c
- src/daemon/filter_chain.c
- src/daemon/filter_chain.h
- src/daemon/plugin.c
- src/daemon/plugin.h
Change #169444
Category None Changed by Leonard Göhrs <l.goehrs @pengutronix.de>Changed at Mon 27 Feb 2023 18:37:53 Repository https://github.com/collectd/collectd Project collectd/collectd Branch collectd-6.0 Revision e79c4aef839e2c9493345715dd0375e3d34ec21e Comments
[collectd 6] src/daemon/plugin.c: work around missing stpcpy on solaris The CI tests on solaris failed due to missing stpcpy. Work around it using memcpy and strlen. Signed-off-by: Leonard Göhrs <l.goehrs@pengutronix.de>
Changed files
- src/daemon/plugin.c
Change #169445
Category None Changed by Leonard Göhrs <l.goehrs @pengutronix.de>Changed at Mon 27 Feb 2023 18:37:53 Repository https://github.com/collectd/collectd Project collectd/collectd Branch collectd-6.0 Revision a2060ca651aac6a890ae5d589680863c877fbff2 Comments
[collectd 6] src/daemon/plugin.c: restore previous position of plugin_write The new queue design resulted in plugin_write being based on enqueue_metric_family, which resulted in the functions moving around in the file. This made the diff harder to read. Restore old position. Signed-off-by: Leonard Göhrs <l.goehrs@pengutronix.de>
Changed files
- src/daemon/plugin.c
Change #169446
Category None Changed by Leonard Göhrs <leonard @goehrs.eu>Changed at Mon 27 Feb 2023 18:37:53 Repository https://github.com/collectd/collectd Project collectd/collectd Branch collectd-6.0 Revision 46fe47b43a5ce20ea0b3b2d51fcae796de0e34c9 Comments
[collectd 6] src/collectd.conf.pod polish the WriteQueueLimitHigh/Low docs The behaviour of LimitHight/LimitLow has changed with the switch to one thread per write plugin. This warrants a rewrite of the respective documentation. Thanks to @eero-t for the suggestion.
Changed files
- src/collectd.conf.pod
Change #169447
Category None Changed by Leonard Göhrs <leonard @goehrs.eu>Changed at Mon 27 Feb 2023 18:37:53 Repository https://github.com/collectd/collectd Project collectd/collectd Branch collectd-6.0 Revision e4cc3f9a0f066153b1f7666d3065b0985b0d13a8 Comments
[collectd 6] src/daemon/plugin.h: Revert plugin_write documentation change The behaviour of plugin_write with regards to fam being NULL has not changed with the switch to one thread per write plugin, so the documentation should not change as well.
Changed files
- src/daemon/plugin.h