Intersite Connection Creation

This task computes an NC replica graph for each NC replica that "should be present" on the local DC or "is present" on any DC in the same site as the local DC. For each edge directed to an NC replica on such a DC from an NC replica on a DC in another site, the KCC reconciles its portion of the NC replica graph by creating an nTDSConnection object to "imply" that edge if one does not already exist.

If the site of the local DC has a site settings object o and the NTDSSETTINGS_OPT_IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED bit is set in o!options, the KCC skips this task.

Like intrasite connection, intersite connection creation utilizes distributed algorithms—algorithms that rely upon each DC in the forest implementing the same algorithm and arriving at the same conclusions given the same inputs. However, the algorithms used for intersite connection creation are significantly more complex. Sufficient analysis of a given variation of this algorithm might yield that DCs implementing the variation are compatible with Windows DCs, but no such different-yet-compatible algorithm is known. To illustrate this point, consider the following simple example:

Assume a forest F that contains three DCs of the same domain in three distinct sites—DC1 in Site1, DC2 in Site2, and DC3 in Site3—where siteLink objects exist specifying that each site is connected to the other two sites with the same cost. DC1 and DC2 execute one implementation of the KCC, and DC3 executes a different implementation.

DC1 and DC2 determine that the three sites should be connected by a minimum cost spanning tree rooted at site3: both DC1 and DC2 replicate updates from DC3, assuming that DC3 replicates updates from DC1 and DC2.

DC3, because it is running a different implementation, determines that the three sites should be connected by a minimum cost spanning tree rooted at site1: DC3 replicates updates from DC1, assuming that DC2 replicates updates from DC1 and DC1 replicates updates from DC2 and DC3.

The minimum cost spanning trees chosen by all the DCs are equally valid. However, the fact that they did not arrive at the same conclusions results in a violation of the first requirement described in section 6.2.1:

  • DC1 replicates updates from DC3.

  • DC3 replicates updates from DC1.

  • DC2 replicates updates from DC3 (and therefore transitively receives updates from DC1).

  • Neither DC1 nor DC2 replicates updates from DC2.

Slight variations in algorithms might result in similar failures that appear only when given specific, complex combinations of inputs. For this reason, these algorithms are described to a high level of detail, and implementers must carefully analyze any deviations from them.