Skip to content
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

FS#1525 - listing more than ~230 objects fails (ubusd discards messages when tx queue is full) #8844

Closed
openwrt-bot opened this issue Apr 30, 2018 · 2 comments
Labels

Comments

@openwrt-bot
Copy link

marv:

When registering more than ~250 objects on ubus, calling ubus list on the command line hangs before finishing to list all the registered objects. It keeps waiting for data and the //sequence end message// on the socket forever.

This issue was witnessed on x86 VM builds of Chaos Calmer and LEDE 17.01.4 as well as ubus on a Linux Desktop. The number of objects being successfully listed varied for each system (232 for CC VM, 252 for LEDE VM and 572 on Desktop).

The root of the problem seems to be a limitation of the ubus daemon. When doing a recursive lookup, one message per object is sent from the daemon to the client. The current implementation of the ubus daemon seems to discard messages, when the fixed size tx queue is full.

The code responsible for this behavior can be found in method ubus_msg_enqueue() in ubusd.c:

if (cl->tx_queue[cl->txq_tail]) return;

Calling one or more methods in rapid sequence could potentially lead to the same problem.

@openwrt-bot
Copy link
Author

fvbogaert:

I'd like to raise the priority on this task. It's critical to our plans for the prplMesh project, where we're aiming to expose a big data model on ubus.

We're currently running into this limitation, and blocked on it.

@openwrt-bot
Copy link
Author

arnout:

Here's a patch that fixes the issue. I'll send it to the mailing list as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant