[PATCH 2/2] cli/insert: return EX_TEMPFAIL for some errors
David Bremner
david at tethera.net
Mon Nov 28 04:22:32 PST 2016
David Bremner <david at tethera.net> writes:
> Attempt to distinguish between errors indicating misconfiguration or
> programmer error, which we consider "permanant", in the sense that
> automatic retries are unlikely to be useful, and those indicating
> transient error conditions. We consider XAPIAN_EXCEPTION transient
> because it covers the important special case of locking failure.
> ---
> notmuch-client.h | 3 +++
> notmuch-insert.c | 9 +++++----
> status.c | 16 ++++++++++++++++
> test/T070-insert.sh | 24 ++++++++++++++----------
> 4 files changed, 38 insertions(+), 14 deletions(-)
>
> diff --git a/notmuch-client.h b/notmuch-client.h
> index 793f32e..d026e60 100644
> --- a/notmuch-client.h
> +++ b/notmuch-client.h
> @@ -489,6 +489,9 @@ print_status_database (const char *loc,
> const notmuch_database_t *database,
> notmuch_status_t status);
>
> +int
> +status_to_exit (notmuch_status_t status);
> +
> #include "command-line-arguments.h"
>
> extern char *notmuch_requested_db_uuid;
> diff --git a/notmuch-insert.c b/notmuch-insert.c
> index 862da88..a152f15 100644
> --- a/notmuch-insert.c
> +++ b/notmuch-insert.c
> @@ -538,9 +538,10 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
> return EXIT_FAILURE;
> }
>
> - if (notmuch_database_open (notmuch_config_get_database_path (config),
> - NOTMUCH_DATABASE_MODE_READ_WRITE, ¬much))
> - return EXIT_FAILURE;
> + status = notmuch_database_open (notmuch_config_get_database_path (config),
> + NOTMUCH_DATABASE_MODE_READ_WRITE, ¬much);
> + if (status)
> + return status_to_exit(status);
I guess this should return NOTMUCH_STATUS_SUCCESS if --keep is passed.
> notmuch_exit_if_unmatched_db_uuid (notmuch);
>
> @@ -577,5 +578,5 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
> notmuch_run_hook (db_path, "post-insert");
> }
>
> - return status ? EXIT_FAILURE : EXIT_SUCCESS;
> + return status ? status_to_exit(status) : EXIT_SUCCESS;
This can be simplified to just "return status_to_exit (status)".
And whitespace fixes for both calls to status_to_exit.
> +int
> +status_to_exit (notmuch_status_t status)
> +{
> + switch (status) {
> + case NOTMUCH_STATUS_SUCCESS:
> + return EXIT_SUCCESS;
> + case NOTMUCH_STATUS_OUT_OF_MEMORY:
> + case NOTMUCH_STATUS_XAPIAN_EXCEPTION:
> + case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID:
> + case NOTMUCH_STATUS_FILE_ERROR:
> + return EX_TEMPFAIL;
> + default:
> + return EXIT_FAILURE;
> + }
This classification is pretty arbitrary. The main goal is have locking
errors, which are currently NOTMUCH_STATUS_XAPIAN_EXCEPTION treated as
TEMPFAIL.
d
More information about the notmuch
mailing list