Gerenciando a Disponibilidade do ObjectGrid

O estado de disponibilidade de uma instância do ObjectGrid determina quais pedidos podem ser processados em qualquer momento específico. É possível usar a interface StateManager para configurar e recuperar o estado de uma instância do ObjectGrid.

Sobre Esta Tarefa

Quatro estados de disponibilidade existem para uma determinada instância do ObjectGrid.

Figura 1. Estados de Disponibilidade de uma Instância do ObjectGrid
Os estados de disponibilidade incluem online, quiesce, offline e preload
ONLINE
O estado ONLINE é o estado padrão de disponibilidade padrão de um ObjectGrid. Um ObjectGrid ONLINE é capaz de processar qualquer pedido de um cliente típico do eXtreme Scale. Entretanto, os pedidos de um cliente de pré-carregamento são rejeitados enquanto o ObjectGrid está ONLINE.
QUIESCE
O estado QUIESCE é temporário. Um ObjectGrid que está em QUIESCE logo é movido para o estado OFFLINE. Enquanto estiver no estado QUIESCE, um ObjectGrid tem permissão para processar transações pendentes. Entretanto, qualquer nova transação será rejeitada. Um ObjectGrid pode permanecer em QUIESCE por até 30 segundos. Após este tempo, o estado de disponibilidade é movido para OFFLINE.
OFFLINE
O estado OFFLINE resulta na rejeição de todas as transações que são enviadas para o ObjectGrid.
PRELOAD
O estado PRELOAD pode ser utilizado para carregar dados em um ObjectGrid a partir de um cliente de pré-carregamento. Enquanto o ObjectGrid está em um estado PRELOAD, apenas um cliente de pré-carregamento poderá executar o commit em transações junto ao ObjectGrid. Todas as outras transações são rejeitadas.

Uma solicitação é rejeitada se um ObjectGrid não estiver no estado de disponibilidade apropriado para suportar essa solicitação. Uma exceção AvailabilityException resulta sempre na rejeição de um pedido.

Procedimento

  1. Configure o estado inicial de um ObjectGrid com o arquivo XML de configuração do ObjectGrid.

    O atributo initialState pode ser usado em um ObjectGrid para indicar seu estado de inicialização. Normalmente, quando um ObjectGrid conclui sua inicialização, ele está disponível para roteamento. O estado pode ser posteriormente alterado para evitar o tráfego de roteamento para um ObjectGrid. Se o ObjectGrid precisar ser inicializado, mas não ficar imediatamente disponível, será possível usar o atributo initialState.

    O atributo initialState é configurado no arquivo XML de configuração do ObjectGrid. O estado padrão é ONLINE. Os valores válidos incluem:
    • ONLINE (padrão)
    • PRELOAD
    • OFFLINE
    Consulte Arquivo XML descritor do ObjectGrid para obter informações adicionais sobre o atributo initialState.

    Se o atributo initialState estiver configurado em um ObjectGrid, o estado deverá ser explicitamente configurado de volta como on-line ou o ObjectGrid permanecerá indisponível. Uma exceção AvailabilityException resultará se o ObjectGrid não estiver no estado ON-LINE.

    Consulte AvailabilityState Documentação da API para obter mais informações.

    Utilizando o atributo initialState para pré-carregamento

    Se o ObjectGrid for pré-carregado com dados, pode haver um período de tempo entre quando o ObjectGrid está disponível e a mudança para um estado pré-carregado para bloquear o tráfego do cliente. Para evitar este período de tempo, o estado inicial em um ObjectGrid pode ser configurado como PRELOAD. O ObjectGrid ainda conclui todas as inicializações necessárias, mas ele bloqueia o tráfego até que o estado mude e permite que o pré-carregamento ocorra.

    Ambos os estados PRELOAD e OFFLINE bloqueiam o tráfego, mas você deve utilizar o estado PRELOAD se deseja iniciar um pré-carregamento.

    Comportamento de failover e equilíbrio

    Se uma grade de dados de réplica for promovida para ser uma grade de dados primária, a réplica não usará a configuração initialState. Se a grade de dados primária for movida para um re-equilíbrio, a configuração initialState não será usada porque os dados são copiados para o novo local do shard primário antes de a movimentação ser concluída. Se a replicação não for configurada, o primário irá para a configuração initialState se ocorrer failover e um novo primário deverá ser colocado.

  2. Altere o estado da disponibilidade com a interface StateManager.

    Use a interface StateManager para configurar o estado de disponibilidade de um ObjectGrid. Para configurar o estado de disponibilidade de um ObjectGrid em execução nos servidores, transmita um cliente ObjectGrid correspondente para a interface StateManager. O código a seguir demonstra como alterar o estado de disponibilidade de um ObjectGrid.

    ClientClusterContext client = ogManager.connect("localhost:2809", null, null);
    ObjectGrid myObjectGrid = ogManager.getObjectGrid(client, "myObjectGrid");
    StateManager stateManager = StateManagerFactory.getStateManager();
    stateManager.setObjectGridState(AvailabilityState.OFFLINE, myObjectGrid);
    Cada shard de ObjectGrid muda para o estado desejado quando o método setObjectGridState é chamado na interface StateManager. Quando o método retornar, todos os shards no ObjectGrid deverão estar no estado adequado.

    Use um plug-in ObjectGridEventListener para alterar o estado de disponibilidade de um ObjectGrid do lado do servidor. Altere o estado de disponibilidade de um ObjectGrid do lado do servidor apenas quando o ObjectGrid tiver uma única partição. Se o ObjectGrid tiver múltiplas partições, o método shardActivated será chamado em cada primário, o que resultará em chamadas desnecessárias para alterar o estado do ObjectGrid

    public class OGListener implements 
    ObjectGridEventListener, ObjectGridEventGroup.ShardEvents {
        public void shardActivated(ObjectGrid grid) {        
                StateManager stateManager = StateManagerFactory.getStateManager();
                stateManager.setObjectGridState(AvailabilityState.PRELOAD, grid);        
        }
    }

    Como QUIESCE é o estado transicional, você não pode usar a interface StateManager para colocar um ObjectGrid em um estado QUIESCE. Um ObjectGrid transmite passa por este estado em seu caminho para o estado OFFLINE.

  3. Recupere o estado da disponibilidade.

    Use o método getObjectGridState da interface StateManager para recuperar o estado de disponibilidade de um ObjectGrid específico.

    StateManager stateManager = StateManagerFactory.getStateManager();
    AvailabilityState state = stateManager.getObjectGridState(inventoryGrid);
    O método getObjectGridState escolhe um shard primário aleatório no ObjectGrid e retorna seu AvailabilityState. Como todos os shards de um ObjectGrid devem estar no mesmo estado de disponibilidade ou em transição para o mesmo estado de disponibilidade, este método fornece um resultado aceitável para o estado de disponibilidade atual do ObjectGrid.