Ejemplo n.º 1
0
DWORD
CdcSrvInitDefaultHAMode(
    PCDC_CONTEXT pCdcContext
    )
{
    DWORD dwError = 0;
    CDC_DB_ENUM_HA_MODE cdcHAMode = CDC_DB_ENUM_HA_MODE_UNDEFINED;

    if (!pCdcContext)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMAFD_ERROR(dwError);
    }

    dwError = CdcRegDbGetHAMode(&cdcHAMode);
    BAIL_ON_VMAFD_ERROR(dwError);

    if (cdcHAMode == CDC_DB_ENUM_HA_MODE_DEFAULT)
    {
        (DWORD)CdcWakeupCdcCacheUpdate(
                                pCdcContext->pCdcCacheUpdateContext,
                                TRUE
                                );
        (DWORD)CdcWakeupStateMachine(
                                pCdcContext->pCdcStateMachineContext
                                );
    }

cleanup:

    return dwError;
error:

    goto cleanup;
}
Ejemplo n.º 2
0
DWORD
CdcEnableClientAffinity(
    VOID
    )
{
    DWORD dwError = 0;
    BOOL bIsLocked = 0;
    BOOL bEnabledHA = FALSE;

    dwError = CdcRegDbGetHAMode(&bEnabledHA);
    BAIL_ON_VMAFD_ERROR(dwError);

    if (!bEnabledHA)
    {
        VMAFD_LOCK_MUTEX(bIsLocked,&mutexStateChange);

        dwError = CdcDbSetHAClientState(CDC_DC_STATE_NO_DC_LIST);
        BAIL_ON_VMAFD_ERROR(dwError);

        dwError = CdcRegDbSetHAMode(TRUE);
        BAIL_ON_VMAFD_ERROR(dwError);

        VMAFD_UNLOCK_MUTEX(bIsLocked,&mutexStateChange);
    }

    dwError = CdcWakeupDCCachingThread(
                                  gVmafdGlobals.pDCCacheThr,
                                  TRUE
                                  );
    if (dwError)
    {
        VmAfdLog (VMAFD_DEBUG_ANY,
                  "Failed to wake up DC Caching thread: %d",
                  dwError
                 );
        dwError = 0;
    }

cleanup:

    VMAFD_UNLOCK_MUTEX(bIsLocked,&mutexStateChange);
    return dwError;

error:
    goto cleanup;
}
Ejemplo n.º 3
0
DWORD
CdcSrvEnableDefaultHA(
    PCDC_CONTEXT pCdcContext
    )
{
    DWORD dwError = 0;
    CDC_DB_ENUM_HA_MODE cdcHAMode = CDC_DB_ENUM_HA_MODE_UNDEFINED;
    BOOL bIsLocked  = FALSE;

    if (!pCdcContext)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMAFD_ERROR(dwError);
    }

    dwError = CdcRegDbGetHAMode(&cdcHAMode);
    BAIL_ON_VMAFD_ERROR(dwError);

    if (cdcHAMode != CDC_DB_ENUM_HA_MODE_DEFAULT)
    {
        VMAFD_LOCK_MUTEX(bIsLocked, &pCdcContext->context_mutex);

        dwError = CdcRegDbSetHAMode(CDC_DB_ENUM_HA_MODE_DEFAULT);
        BAIL_ON_VMAFD_ERROR(dwError);

        VMAFD_UNLOCK_MUTEX(bIsLocked, &pCdcContext->context_mutex);
    }

    dwError = CdcSrvInitDefaultHAMode(pCdcContext);
    BAIL_ON_VMAFD_ERROR(dwError);


cleanup:

    if (pCdcContext)
    {
        VMAFD_UNLOCK_MUTEX(bIsLocked, &pCdcContext->context_mutex);
    }
    return dwError;

error:
    goto cleanup;
}
Ejemplo n.º 4
0
static
PVOID
CdcHandleDCCaching(
    PVOID pData
    )
{
    DWORD dwError = 0;
    DWORD dwRefreshInterval = 0;
    DWORD dwHeartBeat = 0;
    BOOL  bHAState = FALSE;
    PVMAFD_CERT_THR_DATA pThrArgs = (PVMAFD_CERT_THR_DATA)pData;

    pThrArgs->forceFlush = TRUE;

    while (TRUE)
    {
        BOOLEAN bShutdown = FALSE;
        dwError = CdcRegDbGetRefreshInterval(&dwRefreshInterval);
        if (dwError)
        {
            dwRefreshInterval = DCCA_DEFAULT_SYNC_INTERVAL;
        }

        dwError = CdcRegDbGetHeartBeatInterval(&dwHeartBeat);
        if (dwError)
        {
            dwHeartBeat = DCCA_DEFAULT_HEARTBEAT;
        }

        bShutdown = CdcToShutdownDCCacheThread(pThrArgs);
        if (bShutdown)
        {
            break;
        }

        dwError = CdcRegDbGetHAMode(&bHAState);
        if (dwError)
        {
            bHAState = FALSE;
            dwError = 0;
        }

        if (bHAState)
        {
            dwError = CdcRunStateMachine(pThrArgs->forceFlush);
            if (dwError)
            {
                VmAfdLog(
                      VMAFD_DEBUG_ANY,
                      "Failed to populate the DC Cache. Error [%u]",
                      dwError);
            }
        }

        dwError = CdcDCCacheThreadSleep(
                                pThrArgs,
                                dwRefreshInterval,
                                dwHeartBeat
                                );
        if (dwError == ETIMEDOUT)
        {
           dwError = 0;
        }
        BAIL_ON_VMAFD_ERROR(dwError);
    }

cleanup:

    return NULL;
error:

    goto cleanup;
}
Ejemplo n.º 5
0
DWORD
CdcSrvGetCurrentState(
    PCDC_DC_STATE pCdcState
    )
{
    DWORD dwError = 0;
    DWORD dwCdcState = 0;
    BOOL bIsHAEnabled = FALSE;
    CDC_DC_STATE cdcState = CDC_DC_STATE_UNDEFINED;

    if (!pCdcState)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMAFD_ERROR(dwError);
    }

    dwError = CdcRegDbGetHAMode(&bIsHAEnabled);
    BAIL_ON_VMAFD_ERROR(dwError);

    dwError = CdcDbGetHAClientState(&dwCdcState);

    if (!bIsHAEnabled && dwError == ERROR_OBJECT_NOT_FOUND)
    {
        cdcState = CDC_DC_STATE_DISABLED;
        dwError = 0;
    }

    else
    {
        BAIL_ON_VMAFD_ERROR(dwError);
        switch (dwCdcState)
        {
            case CDC_DC_STATE_NO_DC_LIST:
              cdcState = CDC_DC_STATE_NO_DC_LIST;
              break;

            case CDC_DC_STATE_SITE_AFFINITIZED:
              cdcState = CDC_DC_STATE_SITE_AFFINITIZED;
              break;

            case CDC_DC_STATE_OFF_SITE:
              cdcState = CDC_DC_STATE_OFF_SITE;
              break;

            case CDC_DC_STATE_NO_DCS_ALIVE:
              cdcState = CDC_DC_STATE_NO_DCS_ALIVE;
              break;

            case CDC_DC_STATE_DISABLED:
              cdcState = CDC_DC_STATE_DISABLED;
              break;

            default:
              dwError = ERROR_INVALID_STATE;
              break;
        }
    }
    BAIL_ON_VMAFD_ERROR(dwError);

    *pCdcState = cdcState;

cleanup:

    return dwError;
error:

    if (pCdcState)
    {
        *pCdcState = CDC_DC_STATE_UNDEFINED;
    }
    goto cleanup;
}
Ejemplo n.º 6
0
DWORD
CdcSrvGetDCName(
    PCWSTR pszDomainName,
    PCDC_DC_INFO_W *ppAffinitizedDC
    )
{
    DWORD dwError = 0;
    PCDC_DC_INFO_W pAffinitizedDC = NULL;
    DWORD dwAffinitizedSince = 0;
    BOOL bHAState = FALSE;
    PWSTR pszDomainToUse = NULL;

    if (!ppAffinitizedDC)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMAFD_ERROR(dwError);
    }

    dwError = VmAfSrvGetDomainName(&pszDomainToUse);
    BAIL_ON_VMAFD_ERROR(dwError);

    if (!IsNullOrEmptyString(pszDomainName))
    {
        if (!VmAfdStringIsEqualW(
                            pszDomainName,
                            pszDomainToUse,
                            FALSE
                            )
           )
        {
            dwError = ERROR_INVALID_DOMAINNAME;
            BAIL_ON_VMAFD_ERROR(dwError);
        }
    }

    dwError = CdcRegDbGetHAMode(&bHAState);
    BAIL_ON_VMAFD_ERROR(dwError);

    dwError = CdcDbGetAffinitizedDC(
                          pszDomainToUse,
                          &dwAffinitizedSince,
                          &pAffinitizedDC
                          );
    if (!bHAState || dwError)
    {
        dwError = VmAfdAllocateMemory(
                                sizeof(CDC_DC_INFO_W),
                                (PVOID *)&pAffinitizedDC
                                );
        BAIL_ON_VMAFD_ERROR(dwError);

        dwError = VmAfSrvGetDCName(&pAffinitizedDC->pszDCName);
        BAIL_ON_VMAFD_ERROR(dwError);

        dwError = VmAfSrvGetDomainName(&pAffinitizedDC->pszDomainName);
        BAIL_ON_VMAFD_ERROR(dwError);

        dwError = CdcGetClientSiteName(&pAffinitizedDC->pszDcSiteName);
        BAIL_ON_VMAFD_ERROR(dwError);
    }

    *ppAffinitizedDC = pAffinitizedDC;

cleanup:

    VMAFD_SAFE_FREE_MEMORY(pszDomainToUse);
    return dwError;
error:

    if (ppAffinitizedDC)
    {
        *ppAffinitizedDC = NULL;
    }
    if (pAffinitizedDC)
    {
        VmAfdFreeDomainControllerInfoW(pAffinitizedDC);
    }

    goto cleanup;
}
Ejemplo n.º 7
0
DWORD
CdcSrvGetDCName(
    PCWSTR pszDomainName,
    PCDC_DC_INFO_W *ppAffinitizedDC
    )
{
    DWORD dwError = 0;
    PCDC_DC_INFO_W pAffinitizedDC = NULL;
    PCDC_DC_INFO_W pAffinitizedDCToFree = NULL;
    DWORD dwAffinitizedSince = 0;
    CDC_DB_ENUM_HA_MODE cdcHAMode = CDC_DB_ENUM_HA_MODE_UNDEFINED;
    PWSTR pszDomainToUse = NULL;
    UINT64 iStart = 0;
    UINT64 iEnd = 0;

    if (!ppAffinitizedDC)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMAFD_ERROR(dwError);
    }

    iStart = VmAfdGetTimeInMilliSec();
    dwError = VmAfSrvGetDomainName(&pszDomainToUse);
    BAIL_ON_VMAFD_ERROR(dwError);

    if (!IsNullOrEmptyString(pszDomainName))
    {
        if (!VmAfdStringIsEqualW(
                            pszDomainName,
                            pszDomainToUse,
                            FALSE
                            )
           )
        {
            dwError = ERROR_INVALID_DOMAINNAME;
            BAIL_ON_VMAFD_ERROR(dwError);
        }
    }

    dwError = CdcRegDbGetHAMode(&cdcHAMode);
    BAIL_ON_VMAFD_ERROR(dwError);

    dwError = CdcDbGetAffinitizedDC(
                          pszDomainToUse,
                          &dwAffinitizedSince,
                          &pAffinitizedDC
                          );
    if (cdcHAMode == CDC_DB_ENUM_HA_MODE_LEGACY || dwError)
    {
        pAffinitizedDCToFree = pAffinitizedDC;
        dwError = VmAfdAllocateMemory(
                                sizeof(CDC_DC_INFO_W),
                                (PVOID *)&pAffinitizedDC
                                );
        BAIL_ON_VMAFD_ERROR(dwError);

        dwError = VmAfSrvGetDCName(&pAffinitizedDC->pszDCName);
        BAIL_ON_VMAFD_ERROR(dwError);

        dwError = VmAfdTrimFQDNTrailingDot(pAffinitizedDC->pszDCName);
        BAIL_ON_VMAFD_ERROR(dwError);

        dwError = VmAfSrvGetDomainName(&pAffinitizedDC->pszDomainName);
        BAIL_ON_VMAFD_ERROR(dwError);

        dwError = CdcRegDbGetSiteName(&pAffinitizedDC->pszDcSiteName);
        BAIL_ON_VMAFD_ERROR(dwError);
    }

    iEnd = VmAfdGetTimeInMilliSec();
    *ppAffinitizedDC = pAffinitizedDC;

cleanup:

    VMAFD_SAFE_FREE_MEMORY(pszDomainToUse);
    if (pAffinitizedDCToFree)
    {
        VmAfdFreeDomainControllerInfoW(pAffinitizedDCToFree);
    }
    return dwError;
error:

    (DWORD)VmAfdAddDCSuperLogEntry(
                            gVmafdGlobals.pLogger,
                            iStart,
                            iEnd,
                            pAffinitizedDC,
                            dwError);

    if (ppAffinitizedDC)
    {
        *ppAffinitizedDC = NULL;
    }
    if (pAffinitizedDC)
    {
        VmAfdFreeDomainControllerInfoW(pAffinitizedDC);
    }

    goto cleanup;
}