fledge-iot/fledge

Control pipelines: crash when converting empty reading to operation

Closed this issue · 1 comments

Describe the bug
When exiting a control pipeline, if the reading does not contain any value, the dispatcher will crash with the following stack trace:

Fledge dispatcher[1741]: FATAL: Signal 11 (Segmentation fault) trapped:
Fledge dispatcher[1741]: FATAL: (0) 0       0x5628b82807d2 handler(int) + 82---------
Fledge dispatcher[1741]: FATAL: (1) 1       0x7fcbb5b31090 /lib/x86_64-linux-gnu/libc.so.6(+0x43090) [0x7fcbb5b31090]---------
Fledge dispatcher[1741]: FATAL: (2) 2       0x5628b82de657 PipelineExecutionContext::filter(Reading*) + 311---------
Fledge dispatcher[1741]: FATAL: (3) 3       0x5628b827f5da ControlOperationRequest::filter(ControlPipelineManager*) + 202---------
Fledge dispatcher[1741]: FATAL: (4) 4       0x5628b827f841 ControlOperationServiceRequest::execute(DispatcherService*) + 65---------
Fledge dispatcher[1741]: FATAL: (5) 5       0x5628b82bb623 DispatcherService::worker() + 35---------
Fledge dispatcher[1741]: FATAL: (6) 6       0x7fcbb5dd3df4 /lib/x86_64-linux-gnu/libstdc++.so.6(+0xd6df4) [0x7fcbb5dd3df4]---------
Fledge dispatcher[1741]: FATAL: (7) 7       0x7fcbb634c609 /lib/x86_64-linux-gnu/libpthread.so.0(+0x8609) [0x7fcbb634c609]---------
Fledge dispatcher[1741]: FATAL: (8) 8       0x7fcbb5c0d133 clone + 67---------

To Reproduce
Steps to reproduce the behavior:

  1. Create a north service that can call an operation "TestOP" containing one parameter "type".
  2. Create a south service that can receive an operation "TestOP" with 0 parameters that prints a log when receiving an operation.
  3. Create a control pipeline between those services.
  4. Add a filter to this pipeline that will remove the paramters from any operation it process and log the resulting reading.
  5. Restart Fledge so that the pipeline becomes active.
  6. Call the "TestOP" operation from the north plugin.
  7. In the log from the filter, notice that the properly removed: {"asset_code":"TestOP","user_ts":"2023-12-04 14:38:07.746647+00:00","ts":"2023-12-04 14:38:07.746647+00:00","reading":{}}
  8. Notice the crash before the operation could reach the south plugin.

Expected behavior
The reading is properly converted into an operation with 0 parameters.

Additional context
N/A