Re: [PATCH 6/6] maintenance: use random minute in systemd scheduler
From: Phillip Wood <hidden>
Date: 2023-08-09 10:00:49
On 08/08/2023 18:14, Derrick Stolee wrote:
On 8/8/2023 1:06 PM, Derrick Stolee wrote:quoted
On 8/8/2023 8:08 AM, Phillip Wood wrote:quoted
On 07/08/2023 19:51, Derrick Stolee via GitGitGadget wrote:quoted
quoted
quoted
+ char *local_timer_name = xstrfmt("git-maintenance@%s.timer", frequency);The "@" in the name signifies that it is a template unit which it isn't anymore so I think we want to change this to "git-maintenance-%s.timer"I'll also take your SYSTEMD_UNIT_FORMAT macro suggestion to simplify things.As I was checking things, it turns out that we _should_ keep the '@' symbol if only to make sure that our new schedule overwrites the old schedule.
Oh, so if the user already has scheduled maintenance set up then running "git maintenance start" adds a new set of timers. I'd not though about that.
The alternative is that we manually try to delete the old schedule, but that feels like an inefficient way to do it, leaving some cruft around long-term.
This patch still changes the names of the files we write. Currently we write $XDG_CONFIG_HOME/systemd/user/git-maintenance@.service $XDG_CONFIG_HOME/systemd/user/git-maintenance@.timer and this patch changes that to $XDG_CONFIG_HOME/systemd/user/git-maintenance@hourly.service $XDG_CONFIG_HOME/systemd/user/git-maintenance@daily.service $XDG_CONFIG_HOME/systemd/user/git-maintenance@weekly.service $XDG_CONFIG_HOME/systemd/user/git-maintenance@hourly.timer $XDG_CONFIG_HOME/systemd/user/git-maintenance@daily.timer $XDG_CONFIG_HOME/systemd/user/git-maintenance@weekly.timer If the user has already enabled maintenance then $XDG_CONFIG_HOME/systemd/user/timers.target.wants/git-maintenance@hourly.timer $XDG_CONFIG_HOME/systemd/user/timers.target.wants/git-maintenance@daily.timer $XDG_CONFIG_HOME/systemd/user/timers.target.wants/git-maintenance@weekly.timer will exist and are all symlinks pointing to $XDG_CONFIG_HOME/systemd/user/git-maintenance@.timer After this patch if the user runs "git maintenance start" again then systemctl will update the symlinks tot point to the matching unit files rather than the old template file. That means the user will pick up the new schedule but we leave behind the original files that are unused.
For completeness, here is what I did to check: $ systemctl --user list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Tue 2023-08-08 13:13:00 EDT 6s left n/a n/a git-maintenance-hourly.timer git-maintenance-hourly.service Tue 2023-08-08 13:50:00 EDT 37min left Tue 2023-08-08 12:50:10 EDT 22min ago git-maintenance@hourly.timer git-maintenance@hourly.service Wed 2023-08-09 00:13:00 EDT 11h left n/a n/a git-maintenance-daily.timer git-maintenance-daily.service Wed 2023-08-09 00:50:00 EDT 11h left Tue 2023-08-08 09:35:31 EDT 3h 37min ago git-maintenance@daily.timer git-maintenance@daily.service Mon 2023-08-14 00:13:00 EDT 5 days left n/a n/a git-maintenance-weekly.timer git-maintenance-weekly.service Mon 2023-08-14 00:50:00 EDT 5 days left Mon 2023-08-07 10:28:10 EDT 1 day 2h ago git-maintenance@weekly.timer git-maintenance@weekly.service Do you have an alternative idea how to handle that?
I think we should stick with the names as you have them. It might be worth keeping the service file as a template so we only write the new timer files and have a reason to use the "@" naming scheme. We could update systemd_timer_setup_units() to delete git-maintenance@.timer if we successfully enable the new timer unit files. Sorry for the confusion, I should have thought about the user running "git maintenance start" for a second time. Best Wishes Phillip