Previously, generated parent nodes aka generatedPNs (which hold ShapedDevices without a defined Parent Node) would reside on the last few cores of the CPU. A problem became apparent here where if an operator had more Top Level Parent Nodes defined in network.json than CPU cores, there were no CPU cores left to use for generatedPNs. With this change, generatedPNs are created for each CPU core. Additionally, to reduce verbosity of the console output, the warning "uploadMax of Circuit ID exceeded that of its parent node." has been changed to an info log.
IPv6 is a max of 40 characters, so I cut the allowed space to 42.
That gave room to have multi-second long observable RTTs in the
RTT segment.
Compile tested only. A slightly better approach might be to
display time in ns/us/ms/s.
Sometimes the watcher persists, sometimes it doesn't. This is
awful behavior. Work around by looping the watcher and returning
after it fires - restarting the watch process. This has the
added advantage of handling "file deleted" gracefully.
When ShapedDevices cannot be read, an empty set is loaded so
its obvious on the web UI that there is an issue.
In testing, I've been through a bunch of "break shaped devices",
"unbreak shaped devices" and seen the data come and go correctly
now.
ISSUE #239
The Rust validator was running, and the very next line set the
result to success irregardless of the result. Move the validation
initialization to the top.
ISSUE #240
separated items will no longer cause validation issues - excess
whitespace is automatically trimmed at the beginning and end
of comma separated entries before parsing.
First part of ISSUE #240
(Fixing the validation issue rather than the actual cause)
to let the server finish starting.
The delay is in the polling thread, not global - so it doesn't
cause a stall, or affect data access. The ringbuffer will be
slightly delayed in starting (and show zeroes until then).
Testing shows no more logged messages on reboot.
ISSUE #235
into running files to avoid service interruption. The script
detects if you are using systemd (with the default names) and
will restart the services at the end of the process - for a
very brief interruption rather than several minutes.
Also suppresses pushd/popd output.
Related to ISSUE #208
ISSUE #52
* Added file locking commands to the Python/Rust library.
* When LibreQoS.py starts, it checks that /var/run/libreqos.lock
does not exist. If it does, it checks that it contains a PID
and that PID is not still running with a python process.
* If the lock file exists and is valid, execution aborts.
* If the lock file exists and is invalid, it is cleaned.
* Cleans the lock on termination.
boot time. ISSUE #235 . Also relevant to ISSUE #209
* Discovered that the BOOT_TIME clock can fail if called
immediately after boot.
* Refactored time fetching functions into `lqos_utils` with
proper error wrapping.
* Adjusted unknown IP expiration to issue a bus response of
"not ready yet" if the boot time clock is not available.
* Adjusted unknown IP expiration to handle 5-minutes in the
past being a negative number.
* Adjusted queue collection to suggest that you run
LibreQoS.py if queues don't exist - and fail gracefully,
without causing a hitch.
Remove the unused feature from notify. We actually moved notify
into a single crate (as opposed to all over the place) in
816ca7e651
As of this commit, build_rust runs without warnings.
* Corrected a lot of small issues like passing a string when a char
will be (marginally) faster.
* Cleaned up single-arm match statements for the much more compiler
friendly if let.
* Combined nested if statements.
* Cleaned all remaining unchecked unwrap() calls.