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
-
over 1 year 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/
-
11 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.
-
10 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
Generic text file preprocessor using custom syntax for define include ifdef by mdati
Project Description
Scope of this project...
Extract generic testing framework from Linux Test Project code base by acervesato
Project Description
The Linux Test Projec...
Linux incarnation of the Party Parrot by rsimai
Project Description
Lesser on the coding s...
Avahi Integration and Network Connection by vojha
Avahi Integration and Network Connection
...
Testing and adding GNU/Linux distributions on Uyuni by juliogonzalezgil
Join the Gitter channel! [https://gitter.im/uy...
Installation server setup utility - continued by csalmond
Project Description
Create a utility that...
Testing and adding GNU/Linux distributions on Uyuni by juliogonzalezgil
Join the Gitter channel! [https://gitter.im/uy...
Generic text file preprocessor using custom syntax for define include ifdef by mdati
Project Description
Scope of this project...
Avahi Integration and Network Connection by vojha
Avahi Integration and Network Connection
...
Collect flaky test cases identified by the team in a GitHub board and highlight them in the Test report by oscar-barrios
Project Description
Flaky tests: Th...
Test Results for openQA on GitHub by livdywan
Project Description
Jobs in openQA are us...
Deep clean-up of the Uyuni documentation files by omaric
Project Description
This project is plann...
openSUSE on ZoL from OpenZFS project by jkohoutek
Idea is to have SUSE system with OpenZFS as roo...
SSH key distribution solution by vgrinco
Project Description
SSH key distribution so...
Update Haskell ecosystem in Tumbleweed to GHC-9.6.x by psimons
[comment]: # (Please use the project descriptio...
LSP server for SPEC files by mcepl
Has anybody ever heard about RPM Spec LSP serve...
A set of utilities to produce a "from scratch" OCI/Docker container using Opensuse/SLE rpms by ldragon
[comment]: # (Please use the project descriptio...