[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cifs-protocol
Subject:    [cifs-protocol] detecting failed DCs in the KCC (MS-ADTS 6.2.2.3.4.4)
From:       Douglas Bagnall <douglas.bagnall () catalyst ! net ! nz>
Date:       2015-05-13 22:43:34
Message-ID: 5553D396.1000303 () catalyst ! net ! nz
[Download RAW message or body]


MS-ADTS 6.2.2.3.4.4 (v20140502, page 569) defines BridgeheadDCFailed
thus:

    /***** BridgeheadDCFailed *****/
    /* Determine whether a given DC is known to be in a failed state.
     * IN: objectGUID - objectGUID of the DC's nTDSDSA object.
     * IN: detectFailedDCs - TRUE if and only failed DC detection is
     *     enabled.
     * RETURNS: TRUE if and only if the DC should be considered to be in a
     *          failed state.
     */
    BridgeheadDCFailed(IN GUID objectGUID, IN bool detectFailedDCs) : bool
    {
        IF bit NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED is set in
        the options attribute of the site settings object for the local
        DC's site
            RETURN FALSE
        ELSEIF a tuple z exists in the kCCFailedLinks or
        kCCFailedConnections variables such that z.UUIDDsa =
        objectGUID, z.FailureCount > 1, and the current time -
        z.TimeFirstFailure > 2 hours
            RETURN TRUE
        ELSE
            RETURN detectFailedDCs
        ENDIF

The way the detectFailedDCs parameter is used in the pseudo-code seems
at odds with its description in the comments (which is consistent with
comments elsewhere in the stack). The pseudo-code is using
detectFailedDCs as a default value in the case a failure is not
detected, not as a switch turning detection on or off. As written, you
can only actually detect a failed DC if detectFailedDCs is *false* --
when it is true, the return value merely reflects the
NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED bit.

Shouldn't it look more like this:

        IF detectFailedDCs is FALSE or
           bit NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED is set [...]
            RETURN FALSE
        ELSEIF a tuple z exists [...]
            RETURN TRUE
        ELSE
            RETURN FALSE
        ENDIF


or is it the comments that need fixing?

cheers,
Douglas Bagnall
_______________________________________________
cifs-protocol mailing list
cifs-protocol@lists.samba.org
https://lists.samba.org/mailman/listinfo/cifs-protocol
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic