Gestión de la disponibilidad del ObjectGrid

El estado de disponibilidad de una instancia de ObjectGrid determina qué peticiones se pueden procesar en un momento dado. Puede utilizar la interfaz StateManager para establecer y recuperar el estado de una instancia de ObjectGrid.

Acerca de esta tarea

Existen cuatro estados de disponibilidad para una instancia determinada de ObjectGrid.

Figura 1. Estados de disponibilidad de una instancia de ObjectGrid
Los estados de disponibilidad incluyen en línea, inmovilizado, fuera de línea y precarga
ONLINE
El estado ONLINE es el estado de disponibilidad predeterminado de un ObjectGrid. Un ObjectGrid ONLINE puede procesar las peticiones de un cliente típico de eXtreme Scale. Sin embargo, las solicitudes de un cliente de precarga se rechazan mientras el ObjectGrid está ONLINE.
QUIESCE
El estado QUIESCE es de transición. Un ObjectGrid que está en QUIESCE pronto pasará al estado OFFLINE. Mientras está en el estado QUIESCE, un ObjectGrid puede procesar transacciones pendientes. Sin embargo, las nuevas transacciones se rechazan. un ObjectGrid puede permanecer en QUIESCE hasta 30 segundos. Una vez transcurrido este intervalo, el estado de disponibilidad pasa a ser OFFLINE.
OFFLINE
El estado OFFLINE produce el rechazo de todas las transacciones que se envían al ObjectGrid.
PRELOAD
El estado PRELOAD se puede utilizar para cargar datos en ObjectGrid desde un cliente de precarga. Mientras ObjectGrid está en estado PRELOAD, sólo un cliente de precarga puede confirmar transacciones respecto a ObjectGrid. Todas las demás transacciones se rechazan.

Se rechaza una solicitud si un ObjectGrid no está en el estado de disponibilidad adecuado para dar soporte a esta solicitud. Se genera una excepción AvailabilityException siempre que se rechaza una solicitud.

Procedimiento

  1. Establezca el estado inicial de un ObjectGrid con el archivo XML de configuración de ObjectGrid.

    Puede utilizar el atributo initialState en un ObjectGrid para indicar su estado inicial. Normalmente, cuando un ObjectGrid finaliza su inicialización, está disponible para el direccionamiento. El estado podrá cambiarse más adelante para impedir que el tráfico se direccione a un ObjectGrid. Si es necesario inicializar el ObjectGrid, pero no está inmediatamente disponible, puede utilizar el atributo initialState.

    El atributo initialState se establece en el archivo XML de configuración de ObjectGrid. El estado predeterminado es ONLINE. Los valores válidos son:
    • ONLINE (valor predeterminado)
    • PRELOAD
    • OFFLINE
    Consulte Archivo XML de descriptor ObjectGrid para obtener más información sobre el atributo initialState.

    Si el atributo initialState se establece en un ObjectGrid, el estado se debe establecer explícitamente de nuevo en línea o el ObjectGrid continuará estando no disponible. Se genera una excepción AvailabilityException si el ObjectGrid no está en el estado ONLINE.

    Consulte la documentación de la API AvailabilityState para obtener más información.

    Utilización del atributo initialState para la precarga

    Si el ObjectGrid se precarga con datos, puede haber un periodo de tiempo entre el momento en que el ObjectGrid está disponible y el cambio a un estado de precarga para bloquear el tráfico del cliente. Para evitar este periodo de tiempo, el estado inicial en un ObjectGrid se puede establecer en PRELOAD. El ObjectGrid finalizará toda la inicialización necesaria, pero bloqueará el tráfico hasta que el estado cambie y permita que se produzca la precarga.

    Los estados PRELOAD y OFFLINE bloquean el tráfico, pero debe utilizarse el estado PRELOAD si desea iniciar una precarga.

    Migración tras error y equilibrio

    Si una cuadrícula de datos de réplica pasa a ser una cuadrícula de datos primaria, la réplica no utiliza el valor initialState. Si la cuadrícula de datos primaria se traslada para realizar un reequilibrado, el valor initialState no se utiliza porque los datos se copian en la nueva ubicación primaria antes de que se complete el traslado. Si la réplica no se configura, la cuadrícula primaria pasa al valor initialState si se produce una migración tras error y se debe colocar una nueva cuadrícula primaria.

  2. Cambie el estado de disponibilidad con la interfaz StateManager.

    Utilice la interfaz StateManager para establecer el estado de disponibilidad de un ObjectGrid. Para definir el estado de disponibilidad de un ObjectGrid que se ejecuta en los servidores, pase un cliente ObjectGrid correspondiente a la interfaz StateManager. El siguiente código demuestra cómo cambiar el estado de disponibilidad de un 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 fragmento del ObjectGrid realiza la transición del estado deseado cuando se llama al método setObjectGridState en la interfaz StateManager. Cuando se devuelve el método, todos los fragmentos del ObjectGrid deben estar en el estado adecuado.

    Utilice un plug-in ObjectGridEventListener para cambiar el estado de disponibilidad de un ObjectGrid del lado del servidor. Cambie sólo el estado de disponibilidad de un ObjectGrid del lado del servidor, si ObjectGrid tiene una única partición. Si el ObjectGrid tiene varias particiones, se llama al método shardActivated en cada fragmento primario, que genera llamadas superfluas para cambiar el estado del ObjectGrid

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

    Puesto que QUIESCE es un estado de transición, no puede utilizar la interfaz StateManager para colocar un ObjectGrid en el estado QUIESCE. Un ObjectGrid pasa a través de este estado al estado OFFLINE.

  3. Recupere el estado de disponibilidad.

    Utilice el método getObjectGridState de la interfaz StateManager para recuperar el estado de disponibilidad de un ObjectGrid determinado.

    StateManager stateManager = StateManagerFactory.getStateManager();
    AvailabilityState state = stateManager.getObjectGridState(inventoryGrid);
    El método getObjectGridState elige un primario aleatorio dentro de ObjectGrid y devuelve su AvailabilityState. Como todos los fragmentos de ObjectGrid deben estar en el mismo estado de disponibilidad o en transición al mismo estado de disponibilidad, este método proporciona un resultado aceptable para el estado de disponibilidad actual de ObjectGrid.