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