diff --git a/lib/affinitymap_northbound.c b/lib/affinitymap_northbound.c index 8e84d36f2fff..003e0c11b939 100644 --- a/lib/affinitymap_northbound.c +++ b/lib/affinitymap_northbound.c @@ -94,7 +94,8 @@ const struct frr_yang_module_info frr_affinity_map_info = { .cbs = { .create = lib_affinity_map_create, .destroy = lib_affinity_map_destroy, - } + }, + .priority = NB_DFLT_PRIORITY - 1, }, { .xpath = "/frr-affinity-map:lib/affinity-maps/affinity-map/value", diff --git a/lib/northbound.c b/lib/northbound.c index a3d91e56afb3..6b31b818c515 100644 --- a/lib/northbound.c +++ b/lib/northbound.c @@ -391,11 +391,14 @@ void nb_config_replace(struct nb_config *config_dst, static inline int nb_config_cb_compare(const struct nb_config_cb *a, const struct nb_config_cb *b) { - /* Sort by priority first. */ + /* + * Sort by priority first. If the operation is "destroy", reverse the + * order, so that the dependencies are destroyed before the dependants. + */ if (a->nb_node->priority < b->nb_node->priority) - return -1; + return a->operation != NB_CB_DESTROY ? -1 : 1; if (a->nb_node->priority > b->nb_node->priority) - return 1; + return a->operation != NB_CB_DESTROY ? 1 : -1; /* * Preserve the order of the configuration changes as told by libyang.