Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 8 additions & 11 deletions mgmtd/mgmt_ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,7 @@ static int mgmt_ds_dump_in_memory(struct mgmt_ds_ctx *ds_ctx,
return 0;
}

static int mgmt_ds_replace_dst_with_src_ds(struct mgmt_ds_ctx *src,
struct mgmt_ds_ctx *dst)
static int ds_copy(struct mgmt_ds_ctx *dst, struct mgmt_ds_ctx *src)
{
if (!src || !dst)
return -1;
Expand All @@ -95,8 +94,7 @@ static int mgmt_ds_replace_dst_with_src_ds(struct mgmt_ds_ctx *src,
return 0;
}

static int mgmt_ds_merge_src_with_dst_ds(struct mgmt_ds_ctx *src,
struct mgmt_ds_ctx *dst)
static int ds_merge(struct mgmt_ds_ctx *dst, struct mgmt_ds_ctx *src)
{
int ret;

Expand Down Expand Up @@ -251,14 +249,13 @@ void mgmt_ds_unlock(struct mgmt_ds_ctx *ds_ctx)
ds_ctx->locked = 0;
}

int mgmt_ds_copy_dss(struct mgmt_ds_ctx *src_ds_ctx,
struct mgmt_ds_ctx *dst_ds_ctx, bool updt_cmt_rec)
int mgmt_ds_copy_dss(struct mgmt_ds_ctx *dst, struct mgmt_ds_ctx *src, bool updt_cmt_rec)
{
if (mgmt_ds_replace_dst_with_src_ds(src_ds_ctx, dst_ds_ctx) != 0)
if (ds_copy(dst, src) != 0)
return -1;

if (updt_cmt_rec && dst_ds_ctx->ds_id == MGMTD_DS_RUNNING)
mgmt_history_new_record(dst_ds_ctx);
if (updt_cmt_rec && dst->ds_id == MGMTD_DS_RUNNING)
mgmt_history_new_record(dst);

return 0;
}
Expand Down Expand Up @@ -416,9 +413,9 @@ int mgmt_ds_load_config_from_file(struct mgmt_ds_ctx *dst,
parsed.ds_id = dst->ds_id;

if (merge)
mgmt_ds_merge_src_with_dst_ds(&parsed, dst);
ds_merge(dst, &parsed);
else
mgmt_ds_replace_dst_with_src_ds(&parsed, dst);
ds_copy(dst, &parsed);

nb_config_free(parsed.root.cfg_root);

Expand Down
12 changes: 5 additions & 7 deletions mgmtd/mgmt_ds.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,21 +196,19 @@ extern void mgmt_ds_unlock(struct mgmt_ds_ctx *ds_ctx);
/*
* Copy from source to destination datastore.
*
* src_ds
* Source datastore handle (ds to be copied from).
*
* dst_ds
* dst
* Destination datastore handle (ds to be copied to).
*
* src
* Source datastore handle (ds to be copied from).
*
* update_cmd_rec
* TRUE if need to update commit record, FALSE otherwise.
*
* Returns:
* 0 on success, -1 on failure.
*/
extern int mgmt_ds_copy_dss(struct mgmt_ds_ctx *src_ds_ctx,
struct mgmt_ds_ctx *dst_ds_ctx,
bool update_cmt_rec);
extern int mgmt_ds_copy_dss(struct mgmt_ds_ctx *dst, struct mgmt_ds_ctx *src, bool update_cmt_rec);

/*
* Fetch northbound configuration for a given datastore context.
Expand Down
6 changes: 0 additions & 6 deletions mgmtd/mgmt_fe_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,12 +216,6 @@ static void mgmt_fe_session_unlock_ds(Mgmtd__DatastoreId ds_id,
static void
mgmt_fe_session_cfg_txn_cleanup(struct mgmt_fe_session_ctx *session)
{
/*
* Ensure any uncommitted changes in Candidate DS
* is discarded.
*/
mgmt_ds_copy_dss(mm->running_ds, mm->candidate_ds, false);

/*
* Destroy the actual transaction created earlier.
*/
Expand Down
26 changes: 10 additions & 16 deletions mgmtd/mgmt_txn.c
Original file line number Diff line number Diff line change
Expand Up @@ -764,17 +764,15 @@ static int mgmt_txn_send_commit_cfg_reply(struct mgmt_txn_ctx *txn,
!txn->commit_cfg_req->req.commit_cfg.rollback);

/*
* Successful commit: Merge Src DS into Dst DS if and only if
* Successful commit: Copy Src DS to Dst DS if and only if
* this was not a validate-only or abort request.
*/
if ((txn->session_id &&
!txn->commit_cfg_req->req.commit_cfg.validate_only &&
!txn->commit_cfg_req->req.commit_cfg.abort) ||
txn->commit_cfg_req->req.commit_cfg.rollback) {
mgmt_ds_copy_dss(txn->commit_cfg_req->req.commit_cfg
.src_ds_ctx,
txn->commit_cfg_req->req.commit_cfg
.dst_ds_ctx,
mgmt_ds_copy_dss(txn->commit_cfg_req->req.commit_cfg.dst_ds_ctx,
txn->commit_cfg_req->req.commit_cfg.src_ds_ctx,
create_cmt_info_rec);
}

Expand All @@ -783,22 +781,18 @@ static int mgmt_txn_send_commit_cfg_reply(struct mgmt_txn_ctx *txn,
* request.
*/
if (txn->session_id && txn->commit_cfg_req->req.commit_cfg.abort)
mgmt_ds_copy_dss(txn->commit_cfg_req->req.commit_cfg
.dst_ds_ctx,
txn->commit_cfg_req->req.commit_cfg
.src_ds_ctx,
false);
mgmt_ds_copy_dss(txn->commit_cfg_req->req.commit_cfg.src_ds_ctx,
txn->commit_cfg_req->req.commit_cfg.dst_ds_ctx, false);
} else {
/*
* The commit has failied. For implicit commit requests restore
* back the contents of the candidate DS.
* back the contents of the candidate DS. For non-implicit
* commit we want to allow the user to re-commit on the changes
* (whether further modified or not).
*/
if (txn->commit_cfg_req->req.commit_cfg.implicit)
mgmt_ds_copy_dss(txn->commit_cfg_req->req.commit_cfg
.dst_ds_ctx,
txn->commit_cfg_req->req.commit_cfg
.src_ds_ctx,
false);
mgmt_ds_copy_dss(txn->commit_cfg_req->req.commit_cfg.src_ds_ctx,
txn->commit_cfg_req->req.commit_cfg.dst_ds_ctx, false);
}

if (txn->commit_cfg_req->req.commit_cfg.rollback) {
Expand Down
Loading