]> git.puffer.fish Git - mirror/frr.git/commitdiff
mgmtd: allow dest DS "running" if implicit lock+commit
authorChristian Hopps <chopps@labn.net>
Sat, 14 Sep 2024 10:52:43 +0000 (06:52 -0400)
committerChristian Hopps <chopps@labn.net>
Tue, 17 Sep 2024 07:04:59 +0000 (03:04 -0400)
Signed-off-by: Christian Hopps <chopps@labn.net>
mgmtd/mgmt_fe_adapter.c

index fc35e74610ec3f7bc7f76a78b7dc1a42cd6c68ed..8ab66de6875dfd2e46394b4d61d4edf8302a2e95 100644 (file)
@@ -1406,7 +1406,12 @@ static void fe_adapter_handle_edit(struct mgmt_fe_session_ctx *session,
        bool lock, commit;
        int ret;
 
-       if (msg->datastore != MGMT_MSG_DATASTORE_CANDIDATE) {
+       lock = CHECK_FLAG(msg->flags, EDIT_FLAG_IMPLICIT_LOCK);
+       commit = CHECK_FLAG(msg->flags, EDIT_FLAG_IMPLICIT_COMMIT);
+
+       if (lock && commit && msg->datastore == MGMT_MSG_DATASTORE_RUNNING)
+               ;
+       else if (msg->datastore != MGMT_MSG_DATASTORE_CANDIDATE) {
                fe_adapter_send_error(session, msg->req_id, false, -EINVAL,
                                      "Unsupported datastore");
                return;
@@ -1427,9 +1432,6 @@ static void fe_adapter_handle_edit(struct mgmt_fe_session_ctx *session,
        rds_ctx = mgmt_ds_get_ctx_by_id(mm, rds_id);
        assert(rds_ctx);
 
-       lock = CHECK_FLAG(msg->flags, EDIT_FLAG_IMPLICIT_LOCK);
-       commit = CHECK_FLAG(msg->flags, EDIT_FLAG_IMPLICIT_COMMIT);
-
        if (lock) {
                if (mgmt_fe_session_write_lock_ds(ds_id, ds_ctx, session)) {
                        fe_adapter_send_error(session, msg->req_id, false,