ei: Drain all events sitting in our pipe - #8556
Conversation
If we're starved for resources, we may end up with more than 64 notifications in our pipe before we get to actually read them. Those notifications are just that though, so let's drain them.
|
Hope you don't mind, I reworded the commit ( |
nbolton
left a comment
There was a problem hiding this comment.
Looks good, managed to get a few lines that drained >1. I noticed that when used normally, rarely >1 are drained. But, when running the server through valgrind and also running stress, I more often get 2 drained, and occasionally even get 3 drained.
$ grep 'total drained' deskflow.log
[2025-05-01T09:47:01] DEBUG2: event queue read result: 0 (total drained: 3)
[2025-05-01T09:47:02] DEBUG2: event queue read result: 0 (total drained: 2)
[2025-05-01T09:47:03] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:03] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:03] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:04] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:04] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:04] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:04] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:04] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:04] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:04] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:05] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:05] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:05] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:05] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:05] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:05] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:05] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:05] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:06] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:08] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:08] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:08] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:13] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:13] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:18] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:18] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:18] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:18] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:23] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:23] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:23] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:23] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:28] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:28] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:28] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:33] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:33] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:33] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:33] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:38] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:38] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:38] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:38] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:38] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:38] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:43] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:43] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:43] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:43] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:43] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:48] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:48] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:48] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:48] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:53] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:53] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:53] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:53] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:53] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:58] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:58] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:58] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:58] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:47:58] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:01] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:03] DEBUG2: event queue read result: 0 (total drained: 2)
[2025-05-01T09:48:05] DEBUG2: event queue read result: 0 (total drained: 3)
[2025-05-01T09:48:08] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:08] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:13] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:13] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:13] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:18] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:18] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:19] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:24] DEBUG2: event queue read result: 0 (total drained: 1)
[2025-05-01T09:48:24] DEBUG2: event queue read result: 0 (total drained: 1)
oh, oops, thanks for fixing it. ftr, you are welcome to change any commit message and minor things in the commit to match project requirements without asking me first.
1 is the ideal condition, I think except in the (presumably rare) situation where you do enqueue two special events immediately. Anytime you go >1 means we're not pulling the events out fast enough and our event order is messed up. |
If we're starved for resources, we may end up with more than 64 notifications in our pipe before we get to actually read them. Those notifications are just that though, so let's drain them.
Seen in #8503 (comment)