Motivation
When automating tasks often the requirement comes up to retry commands, for example when network connections are involved and commands do not return successfully immediately or if resources are temporarily not available. Sometimes a simple for-loop in bash is sufficient. Sometimes it is necessary to use additional waiting between retries, sometimes timeouts are desired. Getting all those combinations right can be tedious and error-prone so a generic "retry" command should be available in usual environments so we should provide a retry command to openSUSE distributions.
Goals
- G1: A "retry" command is submitted to openSUSE:Factory as part of a package
Execution
- Research existing approaches and distributions
- Package existing solution or develop alternative on your own
- Submit package to a devel repository and then openSUSE:Factory and work on feedback
Results
- 2022-06-11: Couldn't wait until hackweek so made it a small weekend project :D Based on what I had in https://github.com/okurz/scripts/tree/master/retry I created https://github.com/okurz/retry including proper README, license, tests, CI, spec file for a package. An according package in OBS https://build.opensuse.org/package/show/home:okurz:retry/retry setup to be triggered from github following https://linuxkamarada.com/en/2019/03/19/integrating-the-open-build-service-with-github/
- 2022-06-13: After some fixes to get the package to build preparing submission to openSUSE:Factory so created https://build.opensuse.org/package/show/home:okurz:retry_submission/retry. To my knowledge the best approach to automate submission is still something like https://github.com/os-autoinst/scripts/blob/master/os-autoinst-obs-auto-submit but in this case I did it manually, something like getting the tarball, actually obscpio, obsinfo, spec-file and replacing the services in _service and submitting all, then creating a submission to Base:System https://build.opensuse.org/request/show/982215
- 2022-06-14: The package is already in [openSUSE:Factory](build.opensuse.org/package/show/openSUSE:Factory/retry) so usable in openSUSE Tumbleweed. openSUSE Leap does not currently accept submissions to any version
- 2022-06-16: The project already received a contribution from a second person \o/ https://github.com/okurz/retry/pull/1
- 2022-06-27: Created new submission https://build.opensuse.org/request/show/985315 including the exponential backoff feature added by jbaier. Created https://github.com/os-autoinst/os-autoinst-distri-openQA/pull/92 to use the retry feature within the openQA-in-openQA tests. Created lightning talk presentation https://v.gd/okurz_retry
Further details
There are some "best practices" like https://stackoverflow.com/questions/7449772/how-to-retry-a-command-in-bash and https://unix.stackexchange.com/questions/82598/how-do-i-write-a-retry-logic-in-script-to-keep-retrying-to-run-it-upto-5-times . There are also existing commands, like https://github.com/minfrin/retry but it seems to unmaintained and even fails to build so maybe https://github.com/okurz/scripts/blob/master/retry is a better start.
This project is part of:
Hack Week 21
Activity
Comments
-
12 months ago by okurz | Reply
Couldn't wait until hackweek so made it a small weekend project :D Based on what I had in https://github.com/okurz/scripts/tree/master/retry I created https://github.com/okurz/retry including proper README, license, tests, CI, spec file for a package. An according package in OBS https://build.opensuse.org/package/show/home:okurz:retry/retry setup to be triggered from github following https://linuxkamarada.com/en/2019/03/19/integrating-the-open-build-service-with-github/
-
5 months ago by minfrin | Reply
While alternative implementations are great, please be careful with naming. The “retry” tool is already out the box in Debian, Ubuntu, and Nix, and in the queue for EPEL. It is currently available for Suse via copr. If you create a different tool with the same name but different command line options into opensuse it creates chaos for everyone.
-
5 months ago by okurz | Reply
Thanks for the comment. I researched earlier if I could find existing solutions in various distributions and I had not found the applications you mentioned at that time. Regarding copr, do you mean https://software.opensuse.org/package/python-copr ?
-
Similar Projects
Authenticated hashes for BTRFS by dsterba
Project Description
Implement a checksum ...
Encrypted volumes in elemental-toolkit by flonnegren
[comment]: # (Please use the project descriptio...
Improve Qualcomm SOC msm8994/msm8992 kernel mainline support by pvorel
Project Description
Due previous hackweek...
Testing and adding GNU/Linux distributions on Uyuni by juliogonzalezgil
Join the Gitter channel! [https://gitter.im/uy...
Testing and adding GNU/Linux distributions on Uyuni by juliogonzalezgil
Join the Gitter channel! [https://gitter.im/uy...
obs_scm_demo by smithfarm
Project Description
For a long time, I ha...
OSSelot collaboration on legal reviews of community packages by lkocman
[comment]: # (Please use the project descriptio...
Expanding e2e tests on Windows self-hosted runners via CI by iguimaraes
Achievements:
- Documented all necessary s...
Give some love to spec-cleaner by kstreitova
Project Description
spec-cleaner is an open...
Update Haskell ecosystem in Tumbleweed to GHC-9.4.4 by psimons
[comment]: # (Please use the project descriptio...
Dictu Language by bdowns328
[comment]: # (Please use the project descriptio...