[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis] branch master updated: improve error reporting from re
From: |
gnunet |
Subject: |
[taler-anastasis] branch master updated: improve error reporting from reducer |
Date: |
Fri, 19 Mar 2021 19:54:20 +0100 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository anastasis.
The following commit(s) were added to refs/heads/master by this push:
new 2de3c77 improve error reporting from reducer
2de3c77 is described below
commit 2de3c77d1419229ac788b42926ced2e2672a45b2
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Fri Mar 19 19:54:16 2021 +0100
improve error reporting from reducer
---
contrib/gana | 2 +-
src/include/anastasis.h | 15 ++++
src/lib/anastasis_recovery.c | 26 +++++--
src/reducer/anastasis_api_recovery_redux.c | 107 +++++++++++++++++++++++++----
4 files changed, 129 insertions(+), 21 deletions(-)
diff --git a/contrib/gana b/contrib/gana
index f2a01a8..0d7ef35 160000
--- a/contrib/gana
+++ b/contrib/gana
@@ -1 +1 @@
-Subproject commit f2a01a8e1fa5bd9d4e90b080e4a2a9db4022e4fe
+Subproject commit 0d7ef35edeabec5de9c4e479c697fd643d92c26c
diff --git a/src/include/anastasis.h b/src/include/anastasis.h
index b58000b..7e10325 100644
--- a/src/include/anastasis.h
+++ b/src/include/anastasis.h
@@ -418,6 +418,21 @@ enum ANASTASIS_RecoveryStatus
* The decompressed policy document was in malformed JSON.
*/
ANASTASIS_RS_POLICY_MALFORMED_JSON,
+
+ /**
+ * The Anastasis server reported a transient error.
+ */
+ ANASTASIS_RS_POLICY_SERVER_ERROR,
+
+ /**
+ * The Anastasis server no longer has a policy (likely expired).
+ */
+ ANASTASIS_RS_POLICY_GONE,
+
+ /**
+ * The Anastasis server reported that the account is unknown.
+ */
+ ANASTASIS_RS_POLICY_UNKNOWN
};
diff --git a/src/lib/anastasis_recovery.c b/src/lib/anastasis_recovery.c
index cc5e4de..7a893ce 100644
--- a/src/lib/anastasis_recovery.c
+++ b/src/lib/anastasis_recovery.c
@@ -546,24 +546,36 @@ policy_lookup_cb (void *cls,
case MHD_HTTP_OK:
break;
case MHD_HTTP_NOT_FOUND:
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Policy unknown to server (HTTP status %u in %s:%u\n)",
- http_status,
- __FILE__,
- __LINE__);
r->csc (r->csc_cls,
- ANASTASIS_RS_POLICY_DOWNLOAD_FAILED,
+ ANASTASIS_RS_POLICY_UNKNOWN,
+ NULL,
+ 0);
+ ANASTASIS_recovery_abort (r);
+ return;
+ case MHD_HTTP_NO_CONTENT:
+ /* Account known, policy expired */
+ r->csc (r->csc_cls,
+ ANASTASIS_RS_POLICY_GONE,
+ NULL,
+ 0);
+ ANASTASIS_recovery_abort (r);
+ return;
+ case MHD_HTTP_INTERNAL_SERVER_ERROR:
+ /* Bad server... */
+ r->csc (r->csc_cls,
+ ANASTASIS_RS_POLICY_SERVER_ERROR,
NULL,
0);
ANASTASIS_recovery_abort (r);
return;
+ case MHD_HTTP_NOT_MODIFIED:
+ /* Should not be possible, we do not cache, fall-through! */
default:
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Unexpected response code %u in %s:%u\n",
http_status,
__FILE__,
__LINE__);
- // FIXME #6764: should differenciate by @a http_status here!
r->csc (r->csc_cls,
ANASTASIS_RS_POLICY_DOWNLOAD_FAILED,
NULL,
diff --git a/src/reducer/anastasis_api_recovery_redux.c
b/src/reducer/anastasis_api_recovery_redux.c
index 75fa5f2..e272cf1 100644
--- a/src/reducer/anastasis_api_recovery_redux.c
+++ b/src/reducer/anastasis_api_recovery_redux.c
@@ -180,6 +180,76 @@ sctx_free (void *cls)
}
+/**
+ * Update @a state to reflect the error provided in @a rc.
+ *
+ * @param[in,out] state state to update
+ * @param rc error code to translate to JSON
+ * @return error code to use
+ */
+static enum TALER_ErrorCode
+update_state_by_error (json_t *state,
+ enum ANASTASIS_RecoveryStatus rc)
+{
+ const char *msg = NULL;
+ enum TALER_ErrorCode ec;
+
+ switch (rc)
+ {
+ case ANASTASIS_RS_SUCCESS:
+ GNUNET_assert (0);
+ break;
+ case ANASTASIS_RS_POLICY_DOWNLOAD_FAILED:
+ msg = "download failed due to unexpected network issue";
+ ec = TALER_EC_ANASTASIS_REDUCER_NETWORK_FAILED;
+ break;
+ case ANASTASIS_RS_POLICY_DOWNLOAD_NO_POLICY:
+ msg = "policy document returned was malformed";
+ ec = TALER_EC_ANASTASIS_REDUCER_POLICY_MALFORMED;
+ break;
+ case ANASTASIS_RS_POLICY_DOWNLOAD_TOO_BIG:
+ msg = "policy document too large for client memory";
+ ec = TALER_EC_ANASTASIS_REDUCER_POLICY_MALFORMED;
+ break;
+ case ANASTASIS_RS_POLICY_DOWNLOAD_INVALID_COMPRESSION:
+ msg = "failed to decompress policy document";
+ ec = TALER_EC_ANASTASIS_REDUCER_POLICY_MALFORMED;
+ break;
+ case ANASTASIS_RS_POLICY_DOWNLOAD_NO_JSON:
+ msg = "policy document returned was not in JSON format";
+ ec = TALER_EC_ANASTASIS_REDUCER_POLICY_MALFORMED;
+ break;
+ case ANASTASIS_RS_POLICY_MALFORMED_JSON:
+ msg = "policy document returned was not in required JSON format";
+ ec = TALER_EC_ANASTASIS_REDUCER_POLICY_MALFORMED;
+ break;
+ case ANASTASIS_RS_POLICY_SERVER_ERROR:
+ msg = "Anastasis server reported transient internal error";
+ ec = TALER_EC_ANASTASIS_REDUCER_BACKUP_PROVIDER_FAILED;
+ break;
+ case ANASTASIS_RS_POLICY_GONE:
+ msg = "policy document no longer exists";
+ ec = TALER_EC_ANASTASIS_REDUCER_POLICY_LOOKUP_FAILED;
+ break;
+ case ANASTASIS_RS_POLICY_UNKNOWN:
+ msg = "account unknown to Anastasis server";
+ ec = TALER_EC_ANASTASIS_REDUCER_POLICY_LOOKUP_FAILED;
+ break;
+ }
+ GNUNET_assert (0 ==
+ json_object_set_new (state,
+ "error_message",
+ json_string (msg)));
+ GNUNET_assert (0 ==
+ json_object_set_new (state,
+ "error_code",
+ json_integer (rc)));
+ set_state (state,
+ ANASTASIS_GENERIC_STATE_ERROR);
+ return ec;
+}
+
+
/**
* This function is called whenever the recovery process ends.
* On success, the secret is returned in @a secret.
@@ -196,17 +266,28 @@ core_secret_cb (void *cls,
size_t secret_size)
{
struct SelectChallengeContext *sctx = cls;
+ enum TALER_ErrorCode ec;
sctx->r = NULL;
- GNUNET_assert (0 ==
- json_object_set_new (sctx->state,
- "core_secret",
- GNUNET_JSON_from_data (secret,
- secret_size)));
- set_state (sctx->state,
- ANASTASIS_RECOVERY_STATE_RECOVERY_FINISHED);
+ if (ANASTASIS_RS_SUCCESS == rc)
+ {
+ GNUNET_assert (0 ==
+ json_object_set_new (sctx->state,
+ "core_secret",
+ GNUNET_JSON_from_data (secret,
+ secret_size)));
+ set_state (sctx->state,
+ ANASTASIS_RECOVERY_STATE_RECOVERY_FINISHED);
+ sctx->cb (sctx->cb_cls,
+ TALER_EC_NONE,
+ sctx->state);
+ sctx_free (sctx);
+ return;
+ }
+ ec = update_state_by_error (sctx->state,
+ rc);
sctx->cb (sctx->cb_cls,
- TALER_EC_NONE,
+ ec,
sctx->state);
sctx_free (sctx);
}
@@ -1662,6 +1743,7 @@ core_early_secret_cb (void *cls,
{
struct PolicyDownloadEntry *pd = cls;
struct RecoverSecretState *rss = pd->rss;
+ enum TALER_ErrorCode ec;
pd->recovery = NULL;
GNUNET_assert (NULL == secret);
@@ -1673,13 +1755,12 @@ core_early_secret_cb (void *cls,
if (NULL != rss->pd_head)
return; /* wait for another one */
/* all failed! report failure! */
- /* FIXME #6764: return 'rc' to application more nicely */
- set_state (rss->state,
- ANASTASIS_GENERIC_STATE_ERROR);
-
+ GNUNET_assert (ANASTASIS_RS_SUCCESS != rc);
+ ec = update_state_by_error (rss->state,
+ rc);
ANASTASIS_redux_fail_ (rss->cb,
rss->cb_cls,
- TALER_EC_ANASTASIS_REDUCER_POLICY_LOOKUP_FAILED,
+ ec,
"Failed to obtain policy data");
rss->cb = NULL;
free_rss (rss);
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-anastasis] branch master updated: improve error reporting from reducer,
gnunet <=