Поделиться через


Функция OfflineClusterGroupEx (clusapi.h)

Расширяет метод OfflineClusterGroup . Клиент может использовать флаги для управления политиками отработки отказа группы, а входной буфер — для отправки конкретных инструкций по автономной операции ресурсам в целевой группе. Например, входной буфер можно использовать для указания виртуальной машине перейти в автономный режим путем сохранения ее состояния, а не завершения работы.

Синтаксис

DWORD OfflineClusterGroupEx(
  [in] HGROUP hGroup,
  [in] DWORD  dwOfflineFlags,
       PBYTE  lpInBuffer,
  [in] DWORD  cbInBufferSize
);

Параметры

[in] hGroup

Дескриптор группы кластера.

[in] dwOfflineFlags

Флаги, влияющие на автономную политику. Наряду с 0x0 приемлемое значение: CLUSAPI_GROUP_OFFLINE_IGNORE_RESOURCE_LOCKED_STATUS (0x00000001): игнорирование, если ресурс должен быть заблокирован в текущем состоянии.

lpInBuffer

Содержит инструкции для автономной операции, предназначенной для определенных ресурсов в группе. lpInBuffer форматируется как список свойств, что означает, что инструкции содержатся в значениях свойств. Ресурсы в группе ищут в списке свойств имена свойств, которые поддерживаются для автономных операций, а затем интерпретируют инструкции в соответствующем значении свойства. Обратите внимание, что свойства, поддерживаемые ресурсом в операции OfflineClusterGroupEx , не связаны с частными свойствами, связанными с ресурсом.

[in] cbInBufferSize

Размер lpInBuffer в байтах.

Возвращаемое значение

OfflineClusterGroupEx возвращает ERROR_IO_PENDING , если автономная команда была принята и выполняется. OfflineClusterGroupEx возвращает ненулевой код ошибки, если автономная команда была немедленно отклонена без изменения состояния группы.

Комментарии

OfflineClusterGroupEx немедленно завершается сбоем с ошибкой ERROR_CLUSTER_RESOURCE_LOCKED_STATUS , если флаг CLUSAPI_OFFLINE_GROUP_IGNORE_RESOURCE_LOCKED_STATUS не задан и какой-либо ресурс в группе указал, что он заблокирован в текущем состоянии.

Как и в случае с MoveClusterGroupEx, если OfflineClusterGroupEx возвращает ERROR_IO_PENDING, служба кластера попытается перевести группу в автономное состояние.

OfflineClusterGroupEx требует, чтобы клиенту был предоставлен полный доступ к дескриптору безопасности кластера.

Примеры

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <ClusAPI.h>


#define DemoResDllTypeName L"dummy"
#define DemoGroupName L"DemoGroup"


BOOL WaitForGroupToGoOffline(__in HGROUP hGroup)
{
    for(;;)
    {
        CLUSTER_GROUP_STATE state = GetClusterGroupState( hGroup, NULL, NULL );
        if( state == ClusterGroupFailed || state == ClusterGroupPartialOnline || state == ClusterGroupOnline)
        {
            return false;
        }
        else if ( state == ClusterGroupOffline )
        {
            return true;
        }

        Sleep(100);
    }
}

int __cdecl main( void )
{
    HCLUSTER hCluster= NULL;
    HGROUP hGroup = NULL;
    DWORD error = 0;
    
    hCluster = OpenCluster( NULL );
    if ( hCluster == NULL )
    {
        error = GetLastError();
        wprintf( L"Failed to open cluster: 0x%x\n", error );
        goto Cleanup;
    }

    hGroup = OpenClusterGroup( hCluster, DemoGroupName );
    if ( hGroup == NULL )
    {
        error = GetLastError();
        wprintf( L"Failed to open cluster group " DemoGroupName L": 0x%x\n", error );
        goto Cleanup;
    }

    // Offlining Group example
    error = OfflineClusterGroupEx(hGroup, CLUSAPI_GROUP_OFFLINE_IGNORE_RESOURCE_STATUS, NULL, 0);
    if ( error == ERROR_IO_PENDING  )
    {
        if (WaitForGroupToGoOffline(hGroup))
        {
            error = ERROR_SUCCESS;
        }
    }
    if ( error )
    {
        wprintf( L"Failed to offline the group" DemoGroupName L": 0x%x\n", error );
        goto Cleanup;
    }
    else
    {
        wprintf( L"Offlined the group" DemoGroupName);
    }


Cleanup:

    if ( hGroup != NULL )
    {
        CloseClusterGroup( hGroup );
        hGroup = NULL;
    }
    if ( hCluster != NULL )
    {
        CloseCluster( hCluster );
        hCluster = NULL;
    }

    return (int)error;
}

Требования

   
Минимальная версия клиента Ни одна версия не поддерживается
Минимальная версия сервера Windows Server 2012
Целевая платформа Windows
Header clusapi.h
Библиотека ClusAPI.lib
DLL ClusAPI.dll