OpenLightingProject / ola

The Open Lighting Architecture - The Travel Adaptor for the Lighting Industry
https://www.openlighting.org/ola/
Other
647 stars 205 forks source link

"WARNING:root:Failed to send full datagram" #1598

Open modalen opened 5 years ago

modalen commented 5 years ago

Trying to send sACN with python API. after a while i the CPU usage slowly increases and i get this error at 30%.

test1.zip WARNING:root:Failed to send full datagram Exception in thread Thread-14971: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner self.run() File "/usr/lib/python2.7/threading.py", line 1073, in run self.function(*self.args, **self.kwargs) File "test1.py", line 96, in SendDMXFrame wrapper.Client().SendDmx(1, data, DmxSent) File "/usr/lib/python2.7/dist-packages/ola/OlaClient.py", line 888, in SendDmx raise OLADNotRunningException() OLADNotRunningException

WARNING:root:Failed to send full datagram

peternewman commented 5 years ago

Hi @modalen ,

What OS and version of OLA are you running?

Can you also add some olad -l 4 logs, see here for how: https://www.openlighting.org/ola/get-help/ola-faq/#How_do_I_get_olad_-l_4_logs

Are we talking roughly 30 seconds, five minutes or three hours before it fails?

modalen commented 5 years ago

Depends on the update rate. With the example i sent, about 1-2 minutes.

Raspberry pi 4 4GB

OLA olad version: 0.10.7 Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster ARMHF

peternewman commented 4 years ago

Depends on the update rate. With the example i sent, about 1-2 minutes.

So if you double or halve the refresh rate it changes to match? i. e. It's crashing after a certain number of packets?

Can you share the olad log too please? The error in Python basically just says OLA has gone away.

modalen commented 4 years ago

If i half it takes a long time to crash. i ran "olad -l 4 &> log.txt" log.txt 14618 lines of logging 👍

common/io/EPoller.cpp:306: ss process time was 0.000019 common/io/EPoller.cpp:306: ss process time was 0.000019 olad: malloc.c:2385: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.

Thank you!

modalen commented 4 years ago

I found the problem. The problem is my code ofc.... I did not clear an array properly. for every loop the DMX universe was expanded by 128 zeros. in the end it was too big for OLA to deal with. Should not OLA discard everything over 512(511) in a universe?

peternewman commented 4 years ago

I found the problem.

Well done

The problem is my code ofc....

I'd half suspected it might have been something else (like recursing too much), but not that, and hadn't been able to pin it down either.

I did not clear an array properly. for every loop the DMX universe was expanded by 128 zeros. in the end it was too big for OLA to deal with. Should not OLA discard everything over 512(511) in a universe?

Yes, I think I'd probably agree with you. Can you get the Python code to print out the size of the array before it submits it each time so we can see what number to test with. We need to try and work out if it's in the Python API code, Google Protobuf, OLAD or somewhere else.

Thanks for spotting it. You might like to look at something like this to simplify resetting your array, or simply re-initialising it each time: https://stackoverflow.com/questions/4654414/python-append-item-to-list-n-times