Gestion de la disponibilité ObjectGrid

L'état de disponibilité d'une instance ObjectGrid détermine les requêtes pouvant être traitées à tout moment. Vous pouvez utiliser l'interface de StateManager pour définir et extraire l'état d'une instance ObjectGrid.

Pourquoi et quand exécuter cette tâche

Il existe quatre états de disponibilité pour une instance ObjectGrid.

Figure 1. Etats de disponibilité d'une instance ObjectGrid
Les états de disponibilité sont : en ligne, au repos, hors ligne et préchargement
ONLINE
L'état ONLINE est l'état de disponibilité par défaut d'un ObjectGrid. Un ObjectGrid en ligne est capable de traiter n'importe quelle requête d'un client eXtreme Scale typique. Toutefois, les requêtes d'un client de préchargement sont rejetées lorsque l'ObjectGrid est en ligne.
QUIESCE
L'état QUIESCE est transitionnel. Un ObjectGrid qui a l'état QUIESCE passe rapidement à l'état OFFLINE. Lorsqu'un ObjectGrid a l'état QUIESCE, il peut traiter les transactions en attente. Toutefois, les nouvelles transactions sont rejetées. Un ObjectGrid peut rester au repos jusqu'à 30 secondes, Ensuite, l'état de disponibilité devient OFFLINE.
OFFLINE
L'état OFFLINE provoque le rejet de toutes les transactions envoyées à ObjectGrid.
PRELOAD
L'état PRELOAD (préchargement) peut servir à charger des données dans un ObjectGrid à partir d'un client de préchargement. Lorsque l'ObjectGrid est à l'état de préchargement, seul un client de préchargement peut valider des transactions par rapport à cet ObjectGrid. Toutes les autres transactions sont rejetées.

Une demande est rejetée si un ObjectGrid n'a pas l'état de disponibilité approprié pour la demande. Dans ce cas, une exception AvailabilityException est générée.

Procédure

  1. Définissez l'état initial d'un ObjectGrid avec le fichier XML de configuration de l'ObjectGrid.

    Vous pouvez utiliser l'attribut initialState sur ObjectGrid pour indiquer son état au démarrage. Normalement, lorsqu'un ObjectGrid termine son initialisation, il devient disponible pour le routage. L'état peut ensuite être changé de manière à empêcher l'acheminement du trafic vers l'ObjectGrid. Si l'ObjectGrid doit être initialisé, mais pas immédiatement disponible, vous pouvez utiliser l'attribut initialState.

    L'attribut initialState est défini dans le fichier XML de configuration de l'ObjectGrid. L'état par défaut est ONLINE. Les valeurs admises sont les suivantes :
    • ONLINE (par défaut)
    • PRELOAD
    • OFFLINE
    Voir Fichier XML du descripteur d'ObjectGrid pour plus d'informations sur l'attribut initialState.

    Si l'attribut initialState est défini dans un ObjectGrid, l'état doit être explicitement ramené à Online, car sinon l'ObjectGrid reste indisponible. Une exception AvailabilityException se produit si l'ObjectGrid n'a pas l'état.

    Voir la AvailabilityState documentation d'API pour plus d'informations.

    Utilisation de l'attribut initialState pour le préchargement

    Si l'ObjectGrid est préchargé avec des données, un laps de temps est susceptible de s'écouler entre le moment où il est disponible et le moment où il passe à l'état de préchargement permettant de bloquer le trafic client. Pour éviter ce laps de temps, l'état initial d'un ObjectGrid peut être défini comme PRELOAD. L'ObjectGrid effectue toujours l'initialisation requise, mais bloque le trafic jusqu'au changement d'état et permet au préchargement d'avoir lieu.

    Les états PRELOAD et OFFLINE bloquent le trafic, mais seul l'état PRELOAD permet de lancer un préchargement.

    Basculement et équilibrage

    Si une grille de données de réplique est promue pour être une grille de données primaire, la réplique n'utilise pas le paramètre initialState. Si la grille de données primaire est déplacée pour cause de rééquilibrage, le paramètre initialState n'est pas utilisé, car les données sont copiées vers le nouvel emplacement primaire avant la fin du transfert Si la réplication n'est pas configurée, le fragment primaire passe à l'état initialState en cas de basculement et un nouveau fragment primaire doit être placé.

  2. Changez l'état de disponibilité avec l'interface StateManager.

    Utilisez l'interface de StateManager pour définir l'état de disponibilité d'un ObjectGrid. Pour définir l'état de disponibilité d'un ObjectGrid exécuté sur les serveurs, transmettez un client ObjectGrid correspondant à l'interface de StateManager. Le code suivant démontre comment changer l'état de disponibilité d'un ObjectGrid.

    Client ClientClusterContext = ogManager.connect("localhost:2809", null, null);
    ObjectGrid myObjectGrid = ogManager.getObjectGrid(client, "myObjectGrid");
    StateManager stateManager = StateManagerFactory.getStateManager();
    stateManager.setObjectGridState(AvailabilityState.OFFLINE, myObjectGrid);
    Chaque fragment de l'ObjectGrid passe à l'état à appliquer lorsque la méthode setObjectGridState est appelée sur l'interface de StateManager. Lorsque la méthode est renvoyée, tous les fragments de l'ObjectGrid doivent être définis sur l'état adéquat.

    Utilisez un plug-in ObjectGridEventListener pour changer l'état de disponibilité d'un ObjectGrid côté serveur. Changez l'état de disponibilité d'un ObjectGrid côté serveur seulement lorsque ce dernier présente une partition unique. Si l'ObjectGrid présente plusieurs partitions, la méthode shardActivated est appelée sur chaque partition principale, ce qui entraîne des appels superflus pour le changement d'état de l'ObjectGrid

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

    L'état QUIESCE étant transitionnel, vous ne pouvez pas utiliser l'interface de StateManager pour définir l'état d'un ObjectGrid sur QUIESCE. L'ObjectGrid passe par cet état avant d'être défini sur l'état OFFLINE.

  3. Extrayez l'état de disponibilité.

    Utilisez la méthode getObjectGridState de l'interface de StateManager pour récupérer l'état de disponibilité d'un ObjectGrid.

    StateManager stateManager = StateManagerFactory.getStateManager();
    AvailabilityState state = stateManager.getObjectGridState(inventoryGrid);
    La méthode getObjectGridState choisit une partition principale de l'ObjectGrid au hasard et renvoie son état de disponibilité. Tous les fragments ObjectGrid doivent présenter le même état ou être en transition vers le même état. C'est pour cela que cette méthode propose un résultat acceptable pour l'état de disponibilité actuel de l'ObjectGrid.