colocation 110 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation, colocation 446 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation, colocation 452 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation); colocation 457 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation); colocation 471 lib/pacemaker/libpacemaker_private.h void pcmk__add_this_with(GList **list, const pcmk__colocation_t *colocation); colocation 477 lib/pacemaker/libpacemaker_private.h void pcmk__add_with_this(GList **list, const pcmk__colocation_t *colocation); colocation 505 lib/pacemaker/libpacemaker_private.h pcmk__colocation_has_influence(const pcmk__colocation_t *colocation, colocation 509 lib/pacemaker/libpacemaker_private.h rsc = colocation->primary; colocation 524 lib/pacemaker/libpacemaker_private.h if (pcmk_is_set(colocation->dependent->flags, pe_rsc_allow_remote_remotes) colocation 533 lib/pacemaker/libpacemaker_private.h return colocation->influence || (rsc->running_on == NULL); colocation 619 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation); colocation 624 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation); colocation 667 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation, colocation 710 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation, colocation 764 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation, colocation 783 lib/pacemaker/libpacemaker_private.h const pcmk__colocation_t *colocation, colocation 425 lib/pacemaker/pcmk_sched_bundle.c const pcmk__colocation_t *colocation, colocation 437 lib/pacemaker/pcmk_sched_bundle.c CRM_CHECK((colocation != NULL) && (dependent != NULL) && (primary != NULL), colocation 445 lib/pacemaker/pcmk_sched_bundle.c } else if (colocation->dependent->variant > pe_group) { colocation 455 lib/pacemaker/pcmk_sched_bundle.c colocation, true); colocation 457 lib/pacemaker/pcmk_sched_bundle.c } else if (colocation->score >= INFINITY) { colocation 472 lib/pacemaker/pcmk_sched_bundle.c colocation->id, dependent->id, primary->id, colocation->score); colocation 478 lib/pacemaker/pcmk_sched_bundle.c if (colocation->score < INFINITY) { colocation 481 lib/pacemaker/pcmk_sched_bundle.c colocation, false); colocation 491 lib/pacemaker/pcmk_sched_bundle.c if ((colocation->primary_role >= RSC_ROLE_PROMOTED) colocation 495 lib/pacemaker/pcmk_sched_bundle.c if ((colocation->primary_role >= RSC_ROLE_PROMOTED) colocation 501 lib/pacemaker/pcmk_sched_bundle.c colocation->id, pe__node_name(chosen), chosen->weight); colocation 506 lib/pacemaker/pcmk_sched_bundle.c if (colocation->score >= INFINITY) { colocation 225 lib/pacemaker/pcmk_sched_clone.c const pcmk__colocation_t *colocation, colocation 238 lib/pacemaker/pcmk_sched_clone.c CRM_CHECK((colocation != NULL) && (dependent != NULL) && (primary != NULL), colocation 243 lib/pacemaker/pcmk_sched_clone.c colocation->id, dependent->id, primary->id, colocation->score); colocation 251 lib/pacemaker/pcmk_sched_clone.c } else if (colocation->primary_role == RSC_ROLE_UNKNOWN) { colocation 254 lib/pacemaker/pcmk_sched_clone.c colocation->id); colocation 259 lib/pacemaker/pcmk_sched_clone.c colocation); colocation 262 lib/pacemaker/pcmk_sched_clone.c } else if (colocation->dependent_role == RSC_ROLE_PROMOTED) { colocation 265 lib/pacemaker/pcmk_sched_clone.c colocation); colocation 271 lib/pacemaker/pcmk_sched_clone.c interleave_s = g_hash_table_lookup(colocation->dependent->meta, colocation 274 lib/pacemaker/pcmk_sched_clone.c && (colocation->dependent->variant > pe_group)) { colocation 278 lib/pacemaker/pcmk_sched_clone.c if (copies_per_node(colocation->dependent) != copies_per_node(colocation->primary)) { colocation 281 lib/pacemaker/pcmk_sched_clone.c colocation->dependent->id, colocation 282 lib/pacemaker/pcmk_sched_clone.c colocation->primary->id); colocation 303 lib/pacemaker/pcmk_sched_clone.c colocation, true); colocation 305 lib/pacemaker/pcmk_sched_clone.c } else if (colocation->score >= INFINITY) { colocation 317 lib/pacemaker/pcmk_sched_clone.c } else if (colocation->score >= INFINITY) { colocation 327 lib/pacemaker/pcmk_sched_clone.c colocation->id, pe__node_name(chosen), colocation 342 lib/pacemaker/pcmk_sched_clone.c child_rsc->cmds->apply_coloc_score(dependent, child_rsc, colocation, colocation 143 lib/pacemaker/pcmk_sched_colocation.c pcmk__add_this_with(GList **list, const pcmk__colocation_t *colocation) colocation 145 lib/pacemaker/pcmk_sched_colocation.c CRM_ASSERT((list != NULL) && (colocation != NULL)); colocation 149 lib/pacemaker/pcmk_sched_colocation.c colocation->id, colocation->dependent->id, colocation 150 lib/pacemaker/pcmk_sched_colocation.c colocation->primary->id, colocation 151 lib/pacemaker/pcmk_sched_colocation.c (colocation->node_attribute == NULL)? "" : " using ", colocation 152 lib/pacemaker/pcmk_sched_colocation.c pcmk__s(colocation->node_attribute, ""), colocation 153 lib/pacemaker/pcmk_sched_colocation.c colocation->score); colocation 154 lib/pacemaker/pcmk_sched_colocation.c *list = g_list_insert_sorted(*list, (gpointer) colocation, colocation 194 lib/pacemaker/pcmk_sched_colocation.c pcmk__add_with_this(GList **list, const pcmk__colocation_t *colocation) colocation 196 lib/pacemaker/pcmk_sched_colocation.c CRM_ASSERT((list != NULL) && (colocation != NULL)); colocation 200 lib/pacemaker/pcmk_sched_colocation.c colocation->id, colocation->dependent->id, colocation 201 lib/pacemaker/pcmk_sched_colocation.c colocation->primary->id, colocation 202 lib/pacemaker/pcmk_sched_colocation.c (colocation->node_attribute == NULL)? "" : " using ", colocation 203 lib/pacemaker/pcmk_sched_colocation.c pcmk__s(colocation->node_attribute, ""), colocation 204 lib/pacemaker/pcmk_sched_colocation.c colocation->score); colocation 205 lib/pacemaker/pcmk_sched_colocation.c *list = g_list_insert_sorted(*list, (gpointer) colocation, colocation 963 lib/pacemaker/pcmk_sched_colocation.c pcmk__colocation_t *colocation = (pcmk__colocation_t *) gIter->data; colocation 965 lib/pacemaker/pcmk_sched_colocation.c if (colocation->score < INFINITY) { colocation 975 lib/pacemaker/pcmk_sched_colocation.c if (!is_start && (colocation->primary_role != RSC_ROLE_PROMOTED)) { colocation 980 lib/pacemaker/pcmk_sched_colocation.c if (colocation->dependent_role == RSC_ROLE_PROMOTED) { colocation 981 lib/pacemaker/pcmk_sched_colocation.c mark_action_blocked(colocation->dependent, RSC_PROMOTE, colocation 984 lib/pacemaker/pcmk_sched_colocation.c mark_action_blocked(colocation->dependent, RSC_START, action->rsc); colocation 1011 lib/pacemaker/pcmk_sched_colocation.c const pcmk__colocation_t *colocation, bool preview) colocation 1018 lib/pacemaker/pcmk_sched_colocation.c if ((colocation->dependent_role >= RSC_ROLE_UNPROMOTED) colocation 1040 lib/pacemaker/pcmk_sched_colocation.c colocation->id, dependent->id); colocation 1042 lib/pacemaker/pcmk_sched_colocation.c } else if (colocation->score >= INFINITY) { colocation 1053 lib/pacemaker/pcmk_sched_colocation.c } else if (colocation->score <= -CRM_SCORE_INFINITY) { colocation 1066 lib/pacemaker/pcmk_sched_colocation.c if ((colocation->score > 0) colocation 1067 lib/pacemaker/pcmk_sched_colocation.c && (colocation->dependent_role != RSC_ROLE_UNKNOWN) colocation 1068 lib/pacemaker/pcmk_sched_colocation.c && (colocation->dependent_role != dependent->next_role)) { colocation 1072 lib/pacemaker/pcmk_sched_colocation.c colocation->id, role2text(colocation->dependent_role), colocation 1077 lib/pacemaker/pcmk_sched_colocation.c if ((colocation->score > 0) colocation 1078 lib/pacemaker/pcmk_sched_colocation.c && (colocation->primary_role != RSC_ROLE_UNKNOWN) colocation 1079 lib/pacemaker/pcmk_sched_colocation.c && (colocation->primary_role != primary->next_role)) { colocation 1083 lib/pacemaker/pcmk_sched_colocation.c colocation->id, role2text(colocation->primary_role), colocation 1088 lib/pacemaker/pcmk_sched_colocation.c if ((colocation->score < 0) colocation 1089 lib/pacemaker/pcmk_sched_colocation.c && (colocation->dependent_role != RSC_ROLE_UNKNOWN) colocation 1090 lib/pacemaker/pcmk_sched_colocation.c && (colocation->dependent_role == dependent->next_role)) { colocation 1092 lib/pacemaker/pcmk_sched_colocation.c colocation->id, role2text(colocation->dependent_role)); colocation 1096 lib/pacemaker/pcmk_sched_colocation.c if ((colocation->score < 0) colocation 1097 lib/pacemaker/pcmk_sched_colocation.c && (colocation->primary_role != RSC_ROLE_UNKNOWN) colocation 1098 lib/pacemaker/pcmk_sched_colocation.c && (colocation->primary_role == primary->next_role)) { colocation 1100 lib/pacemaker/pcmk_sched_colocation.c colocation->id, role2text(colocation->primary_role)); colocation 1121 lib/pacemaker/pcmk_sched_colocation.c const pcmk__colocation_t *colocation) colocation 1129 lib/pacemaker/pcmk_sched_colocation.c if (colocation->node_attribute != NULL) { colocation 1130 lib/pacemaker/pcmk_sched_colocation.c attribute = colocation->node_attribute; colocation 1136 lib/pacemaker/pcmk_sched_colocation.c } else if (colocation->score < 0) { colocation 1146 lib/pacemaker/pcmk_sched_colocation.c node->weight = pcmk__add_scores(-colocation->score, node->weight); colocation 1150 lib/pacemaker/pcmk_sched_colocation.c colocation->id, dependent->id, pe__node_name(node), colocation 1152 lib/pacemaker/pcmk_sched_colocation.c pcmk_readable_score(colocation->score), primary->id); colocation 1162 lib/pacemaker/pcmk_sched_colocation.c if (colocation->score < CRM_SCORE_INFINITY) { colocation 1163 lib/pacemaker/pcmk_sched_colocation.c node->weight = pcmk__add_scores(colocation->score, colocation 1168 lib/pacemaker/pcmk_sched_colocation.c colocation->id, dependent->id, pe__node_name(node), colocation 1170 lib/pacemaker/pcmk_sched_colocation.c pcmk_readable_score(colocation->score)); colocation 1173 lib/pacemaker/pcmk_sched_colocation.c } else if (colocation->score >= CRM_SCORE_INFINITY) { colocation 1183 lib/pacemaker/pcmk_sched_colocation.c dependent->id, pe__node_name(node), colocation->id, colocation 1188 lib/pacemaker/pcmk_sched_colocation.c if ((colocation->score <= -INFINITY) || (colocation->score >= INFINITY) colocation 1220 lib/pacemaker/pcmk_sched_colocation.c const pcmk__colocation_t *colocation) colocation 1231 lib/pacemaker/pcmk_sched_colocation.c if (colocation->node_attribute != NULL) { colocation 1232 lib/pacemaker/pcmk_sched_colocation.c attribute = colocation->node_attribute; colocation 1239 lib/pacemaker/pcmk_sched_colocation.c if ((colocation->score == INFINITY) colocation 1240 lib/pacemaker/pcmk_sched_colocation.c && (colocation->dependent_role == RSC_ROLE_PROMOTED)) { colocation 1246 lib/pacemaker/pcmk_sched_colocation.c if ((colocation->primary_role != RSC_ROLE_UNKNOWN) colocation 1247 lib/pacemaker/pcmk_sched_colocation.c && (colocation->primary_role != primary->next_role)) { colocation 1251 lib/pacemaker/pcmk_sched_colocation.c if (colocation->dependent_role == RSC_ROLE_UNPROMOTED) { colocation 1255 lib/pacemaker/pcmk_sched_colocation.c dependent->priority = pcmk__add_scores(score_multiplier * colocation->score, colocation 1259 lib/pacemaker/pcmk_sched_colocation.c colocation->id, dependent->id, colocation 1262 lib/pacemaker/pcmk_sched_colocation.c pcmk_readable_score(colocation->score)); colocation 1538 lib/pacemaker/pcmk_sched_colocation.c pcmk__colocation_t *colocation = (pcmk__colocation_t *) data; colocation 1541 lib/pacemaker/pcmk_sched_colocation.c pe_resource_t *other = colocation->dependent; colocation 1542 lib/pacemaker/pcmk_sched_colocation.c const float factor = colocation->score / (float) INFINITY; colocation 1545 lib/pacemaker/pcmk_sched_colocation.c if (!pcmk__colocation_has_influence(colocation, NULL)) { colocation 1553 lib/pacemaker/pcmk_sched_colocation.c "to colocation %s", rsc->id, other->id, colocation->id); colocation 1555 lib/pacemaker/pcmk_sched_colocation.c colocation->node_attribute, factor, colocation 320 lib/pacemaker/pcmk_sched_group.c const pcmk__colocation_t *colocation) colocation 329 lib/pacemaker/pcmk_sched_group.c colocation->id, dependent->id, primary->id); colocation 334 lib/pacemaker/pcmk_sched_group.c member->cmds->apply_coloc_score(member, primary, colocation, true); colocation 338 lib/pacemaker/pcmk_sched_group.c if (colocation->score >= INFINITY) { colocation 348 lib/pacemaker/pcmk_sched_group.c member->cmds->apply_coloc_score(member, primary, colocation, true); colocation 366 lib/pacemaker/pcmk_sched_group.c const pcmk__colocation_t *colocation) colocation 372 lib/pacemaker/pcmk_sched_group.c colocation->id, dependent->id, primary->id); colocation 380 lib/pacemaker/pcmk_sched_group.c if (colocation->score >= INFINITY) { colocation 397 lib/pacemaker/pcmk_sched_group.c member->cmds->apply_coloc_score(dependent, member, colocation, false); colocation 401 lib/pacemaker/pcmk_sched_group.c if (colocation->score >= INFINITY) { colocation 411 lib/pacemaker/pcmk_sched_group.c member->cmds->apply_coloc_score(dependent, member, colocation, false); colocation 431 lib/pacemaker/pcmk_sched_group.c const pcmk__colocation_t *colocation, colocation 435 lib/pacemaker/pcmk_sched_group.c && (colocation != NULL)); colocation 438 lib/pacemaker/pcmk_sched_group.c colocate_group_with(dependent, primary, colocation); colocation 444 lib/pacemaker/pcmk_sched_group.c colocate_with_group(dependent, primary, colocation); colocation 734 lib/pacemaker/pcmk_sched_group.c const pcmk__colocation_t *colocation = NULL; colocation 736 lib/pacemaker/pcmk_sched_group.c colocation = (const pcmk__colocation_t *) cons_iter->data; colocation 737 lib/pacemaker/pcmk_sched_group.c if (colocation->score == INFINITY) { colocation 738 lib/pacemaker/pcmk_sched_group.c pcmk__add_this_with(list, colocation); colocation 185 lib/pacemaker/pcmk_sched_instances.c pcmk__colocation_t *colocation = NULL; colocation 194 lib/pacemaker/pcmk_sched_instances.c colocation = (pcmk__colocation_t *) iter->data; colocation 195 lib/pacemaker/pcmk_sched_instances.c other = colocation->primary; colocation 196 lib/pacemaker/pcmk_sched_instances.c factor = colocation->score / (float) INFINITY, colocation 198 lib/pacemaker/pcmk_sched_instances.c colocation->node_attribute, colocation 203 lib/pacemaker/pcmk_sched_instances.c colocation = (pcmk__colocation_t *) iter->data; colocation 204 lib/pacemaker/pcmk_sched_instances.c if (!pcmk__colocation_has_influence(colocation, rsc)) { colocation 207 lib/pacemaker/pcmk_sched_instances.c other = colocation->dependent; colocation 208 lib/pacemaker/pcmk_sched_instances.c factor = colocation->score / (float) INFINITY, colocation 210 lib/pacemaker/pcmk_sched_instances.c colocation->node_attribute, colocation 1643 lib/pacemaker/pcmk_sched_instances.c const pcmk__colocation_t *colocation = iter->data; colocation 1646 lib/pacemaker/pcmk_sched_instances.c && !pcmk__colocation_has_influence(colocation, instance)) { colocation 1649 lib/pacemaker/pcmk_sched_instances.c if (!everywhere || (colocation->score < 0) colocation 1650 lib/pacemaker/pcmk_sched_instances.c || (!with_this && (colocation->score == INFINITY))) { colocation 1653 lib/pacemaker/pcmk_sched_instances.c pcmk__add_with_this(list, colocation); colocation 1655 lib/pacemaker/pcmk_sched_instances.c pcmk__add_this_with(list, colocation); colocation 278 lib/pacemaker/pcmk_sched_primitive.c pcmk__colocation_t *colocation = (pcmk__colocation_t *) data; colocation 282 lib/pacemaker/pcmk_sched_primitive.c pe_resource_t *other = colocation->primary; colocation 285 lib/pacemaker/pcmk_sched_primitive.c if ((colocation->dependent_role >= RSC_ROLE_PROMOTED) colocation 286 lib/pacemaker/pcmk_sched_primitive.c || ((colocation->score < 0) && (colocation->score > -INFINITY))) { colocation 294 lib/pacemaker/pcmk_sched_primitive.c rsc->id, colocation->id, other->id, colocation 295 lib/pacemaker/pcmk_sched_primitive.c colocation->score, role2text(colocation->dependent_role)); colocation 300 lib/pacemaker/pcmk_sched_primitive.c rsc->cmds->apply_coloc_score(rsc, other, colocation, true); colocation 366 lib/pacemaker/pcmk_sched_primitive.c pcmk__colocation_t *colocation = NULL; colocation 397 lib/pacemaker/pcmk_sched_primitive.c colocation = iter->data; colocation 398 lib/pacemaker/pcmk_sched_primitive.c if ((colocation->score <= -CRM_SCORE_INFINITY) colocation 399 lib/pacemaker/pcmk_sched_primitive.c || (colocation->score >= CRM_SCORE_INFINITY)) { colocation 404 lib/pacemaker/pcmk_sched_primitive.c colocation = iter->data; colocation 405 lib/pacemaker/pcmk_sched_primitive.c if ((colocation->score <= -CRM_SCORE_INFINITY) colocation 406 lib/pacemaker/pcmk_sched_primitive.c || (colocation->score >= CRM_SCORE_INFINITY)) { colocation 416 lib/pacemaker/pcmk_sched_primitive.c colocation = iter->data; colocation 418 lib/pacemaker/pcmk_sched_primitive.c if ((colocation->score > -CRM_SCORE_INFINITY) colocation 419 lib/pacemaker/pcmk_sched_primitive.c && (colocation->score < CRM_SCORE_INFINITY)) { colocation 424 lib/pacemaker/pcmk_sched_primitive.c colocation = iter->data; colocation 426 lib/pacemaker/pcmk_sched_primitive.c if ((colocation->score > -CRM_SCORE_INFINITY) colocation 427 lib/pacemaker/pcmk_sched_primitive.c && (colocation->score < CRM_SCORE_INFINITY)) { colocation 1032 lib/pacemaker/pcmk_sched_primitive.c const pcmk__colocation_t *colocation, colocation 1037 lib/pacemaker/pcmk_sched_primitive.c CRM_CHECK((colocation != NULL) && (dependent != NULL) && (primary != NULL), colocation 1042 lib/pacemaker/pcmk_sched_primitive.c primary->cmds->apply_coloc_score(dependent, primary, colocation, false); colocation 1046 lib/pacemaker/pcmk_sched_primitive.c filter_results = pcmk__colocation_affects(dependent, primary, colocation, colocation 1049 lib/pacemaker/pcmk_sched_primitive.c ((colocation->score > 0)? "Colocating" : "Anti-colocating"), colocation 1050 lib/pacemaker/pcmk_sched_primitive.c dependent->id, primary->id, colocation->id, colocation->score, colocation 1055 lib/pacemaker/pcmk_sched_primitive.c pcmk__apply_coloc_to_priority(dependent, primary, colocation); colocation 1058 lib/pacemaker/pcmk_sched_primitive.c pcmk__apply_coloc_to_weights(dependent, primary, colocation); colocation 1153 lib/pacemaker/pcmk_sched_promotable.c const pcmk__colocation_t *colocation) colocation 1160 lib/pacemaker/pcmk_sched_promotable.c if (colocation->score >= INFINITY) { colocation 1165 lib/pacemaker/pcmk_sched_promotable.c attr = colocation->node_attribute; colocation 1171 lib/pacemaker/pcmk_sched_promotable.c pe_rsc_trace(colocation->primary, colocation 1173 lib/pacemaker/pcmk_sched_promotable.c colocation->id, colocation->dependent->id, colocation 1174 lib/pacemaker/pcmk_sched_promotable.c colocation->primary->id, pe__node_name(primary_node), attr, colocation 1175 lib/pacemaker/pcmk_sched_promotable.c colocation->score, dependent->id); colocation 1182 lib/pacemaker/pcmk_sched_promotable.c node->weight = pcmk__add_scores(node->weight, colocation->score); colocation 1183 lib/pacemaker/pcmk_sched_promotable.c pe_rsc_trace(colocation->primary, colocation 1185 lib/pacemaker/pcmk_sched_promotable.c colocation->id, pcmk_readable_score(colocation->score), colocation 1202 lib/pacemaker/pcmk_sched_promotable.c const pcmk__colocation_t *colocation) colocation 1217 lib/pacemaker/pcmk_sched_promotable.c if (instance->fns->state(instance, FALSE) == colocation->primary_role) { colocation 1218 lib/pacemaker/pcmk_sched_promotable.c update_dependent_allowed_nodes(dependent, node, colocation); colocation 1230 lib/pacemaker/pcmk_sched_promotable.c if ((colocation->score >= INFINITY) colocation 1231 lib/pacemaker/pcmk_sched_promotable.c && ((colocation->dependent_role != RSC_ROLE_PROMOTED) colocation 1232 lib/pacemaker/pcmk_sched_promotable.c || (colocation->primary_role != RSC_ROLE_PROMOTED))) { colocation 1234 lib/pacemaker/pcmk_sched_promotable.c pe_rsc_trace(colocation->primary, colocation 1236 lib/pacemaker/pcmk_sched_promotable.c colocation->id, colocation->dependent->id, colocation 1237 lib/pacemaker/pcmk_sched_promotable.c colocation->primary->id, dependent->id); colocation 1255 lib/pacemaker/pcmk_sched_promotable.c const pcmk__colocation_t *colocation) colocation 1261 lib/pacemaker/pcmk_sched_promotable.c colocation->primary_role, colocation 1267 lib/pacemaker/pcmk_sched_promotable.c colocation->score); colocation 1269 lib/pacemaker/pcmk_sched_promotable.c pe_rsc_trace(colocation->primary, colocation 1271 lib/pacemaker/pcmk_sched_promotable.c colocation->id, colocation->dependent->id, colocation 1272 lib/pacemaker/pcmk_sched_promotable.c colocation->primary->id, dependent->id, colocation 1274 lib/pacemaker/pcmk_sched_promotable.c pcmk_readable_score(colocation->score), colocation 1278 lib/pacemaker/pcmk_sched_promotable.c } else if (colocation->score >= INFINITY) { colocation 1280 lib/pacemaker/pcmk_sched_promotable.c pe_rsc_trace(colocation->primary, colocation 1282 lib/pacemaker/pcmk_sched_promotable.c colocation->id, colocation->dependent->id, colocation 1283 lib/pacemaker/pcmk_sched_promotable.c colocation->primary->id, dependent->id);