summaryrefslogtreecommitdiff
path: root/mgmtd
diff options
context:
space:
mode:
Diffstat (limited to 'mgmtd')
-rw-r--r--mgmtd/mgmt_fe_adapter.h4
-rw-r--r--mgmtd/mgmt_txn.c10
-rw-r--r--mgmtd/mgmt_txn.h28
3 files changed, 36 insertions, 6 deletions
diff --git a/mgmtd/mgmt_fe_adapter.h b/mgmtd/mgmt_fe_adapter.h
index 61d6cfae13..5a7dec3e6f 100644
--- a/mgmtd/mgmt_fe_adapter.h
+++ b/mgmtd/mgmt_fe_adapter.h
@@ -194,7 +194,7 @@ extern int mgmt_fe_adapter_send_rpc_reply(uint64_t session_id, uint64_t txn_id,
* unlock: implicit-lock flag was set in the request
* commit: implicit-commit flag was set in the request
* xpath: the xpath of the data node that was created
- * error: the error code, zero for successful request
+ * error: >0 LY_ERR, < 0 -errno
* errstr: the error string, if error is non-zero
*/
extern int mgmt_fe_adapter_send_edit_reply(uint64_t session_id, uint64_t txn_id,
@@ -210,7 +210,7 @@ extern int mgmt_fe_adapter_send_edit_reply(uint64_t session_id, uint64_t txn_id,
* Args:
* txn_id: the txn_id this error pertains to.
* short_circuit_ok: True if OK to short-circuit the call.
- * error: An integer error value.
+ * error: >0 LY_ERR, < 0 -errno
* errfmt: An error format string (i.e., printfrr)
* ...: args for use by the `errfmt` format string.
*
diff --git a/mgmtd/mgmt_txn.c b/mgmtd/mgmt_txn.c
index ed133243a1..53d9f5c3fa 100644
--- a/mgmtd/mgmt_txn.c
+++ b/mgmtd/mgmt_txn.c
@@ -1335,7 +1335,8 @@ static int txn_get_tree_data_done(struct mgmt_txn_ctx *txn,
" req_id %" PRIu64 " to requested type %u",
txn->txn_id, req_id, get_tree->result_type);
- (void)mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, ret,
+ (void)mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false,
+ errno_from_nb_error(ret),
"Error converting results of GETTREE");
}
@@ -1351,7 +1352,7 @@ static int txn_rpc_done(struct mgmt_txn_ctx *txn, struct mgmt_txn_req *txn_req)
EVENT_OFF(txn->rpc_timeout);
if (rpc->errstr)
- mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, -1,
+ mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, -EINVAL,
rpc->errstr);
else if (mgmt_fe_adapter_send_rpc_reply(txn->session_id, txn->txn_id,
req_id, rpc->result_type,
@@ -1360,7 +1361,8 @@ static int txn_rpc_done(struct mgmt_txn_ctx *txn, struct mgmt_txn_req *txn_req)
" req_id %" PRIu64 " to requested type %u",
txn->txn_id, req_id, rpc->result_type);
- (void)mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, -1,
+ (void)mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false,
+ -EINVAL,
"Error converting results of RPC");
}
@@ -2580,7 +2582,7 @@ int mgmt_txn_send_edit(uint64_t txn_id, uint64_t req_id,
reply:
mgmt_fe_adapter_send_edit_reply(txn->session_id, txn->txn_id, req_id,
unlock, commit, edit->xpath_created,
- ret ? -1 : 0, errstr);
+ errno_from_nb_error(ret), errstr);
XFREE(MTYPE_MGMTD_TXN_REQ, edit);
diff --git a/mgmtd/mgmt_txn.h b/mgmtd/mgmt_txn.h
index b6ca288675..37dadc0171 100644
--- a/mgmtd/mgmt_txn.h
+++ b/mgmtd/mgmt_txn.h
@@ -69,6 +69,34 @@ static inline const char *mgmt_txn_type2str(enum mgmt_txn_type type)
return "Unknown";
}
+
+static inline int16_t errno_from_nb_error(enum nb_error ret)
+{
+ switch (ret) {
+ case NB_OK:
+ return 0;
+ case NB_ERR_NO_CHANGES:
+ return -EALREADY;
+ case NB_ERR_NOT_FOUND:
+ return -ENOENT;
+ case NB_ERR_EXISTS:
+ return -EEXIST;
+ case NB_ERR_LOCKED:
+ return -EWOULDBLOCK;
+ case NB_ERR_VALIDATION:
+ return -EINVAL;
+ case NB_ERR_RESOURCE:
+ return -ENOMEM;
+ case NB_ERR:
+ case NB_ERR_INCONSISTENCY:
+ return -EINVAL;
+ case NB_YIELD:
+ default:
+ return -EINVAL;
+ }
+}
+
+
/* Initialise transaction module. */
extern int mgmt_txn_init(struct mgmt_master *cm, struct event_loop *tm);