6.2.2.3.2 Merge of kCCFailedLinks and kCCFailedLinks from Bridgeheads

The KCC on a writable DC attempts to merge the link and connection failure information from bridgehead DCs in its own site to help it identify failed bridgehead DCs.

For each nTDSDSA object bh with objectCategory nTDSDSA other than the local DC but in the local DC's site, if bh has a child nTDSConnection object cn such that cn!fromServer is a reference to an nTDSDSA object in a site other than the local DC's site, and cn! options does not contain NTDSCONN_OPT_RODC_TOPOLOGY, the KCC adds the tuples from bh's kCCFailedConnections and kCCFailedLinks to the tuples in those same variables on the local DC. It does so by calling in the sequence IDL_DRSBind, IDL_DRSGetReplInfo for DS_REPL_INFO_KCC_DSA_CONNECT_FAILURES, IDL_DRSGetReplInfo for DS_REPL_INFO_KCC_DSA_LINK_FAILURES, and IDL_DRSUnbind.

If any of these calls fails, the KCC adds a tuple for bh!objectGUID to kCCFailedConnections.

For each DS_REPL_KCC_DSA_FAILUREW d it receives, the KCC updates its corresponding variable v (kCCFailedLinks for DS_REPL_INFO_KCC_DSA_LINK_FAILURES, kCCFailedConnections for DS_REPL_INFO_KCC_DSA_CONNECT_FAILURES) as follows:

  • If a tuple f exists in v such that f.UUIDDsa = d.uuidDsaObjGuid and f.FailureCount ≠ 0:

    • Set f.FailureCount to MAX(f.FailureCount, d.cNumFailures)

    • Set f.TimeFirstFailure to MIN(f.TimeFirstFailure, d.ftimeFirstFailure)

    • Set f.LastResult to d.dwLastResult

  • If a tuple f exists in v such that f.UUIDDsa = d.uuidDsaObjGuid and f.FailureCount = 0:

    • Set f.FailureCount to d.cNumFailures

    • Set f.TimeFirstFailure to d.ftimeFirstFailure

    • Set f.LastResult to d.dwLastResult

  • If no tuple f exists in v such that f.UUIDDsa = d.uuidDsaObjGuid, add tuple g to v such that

    • g.UUIDDsa = d.uuidDsaObjGuid

    • g.FailureCount = d.cNumFailures

    • g.TimeFirstFailure = d.ftimeFirstFailure

    • g.LastResult = d.dwLastResult