Creazione di un processo waiter

Questa pagina spiega come creare una risorsa Waiter. Per scoprire di più sui checkpoint, consulta la sezione Concetti fondamentali di Runtime Configurator.

Una risorsa Waiter attende una determinata condizione di successo o fallimento prima di rispondere. Sia per il successo che per l'errore, imposti una condizione di cardinalità, in cui il gestore attende che venga creato un determinato numero di variabili sotto un prefisso di percorso specifico. Dopo aver creato le variabili, il gestore viene restituito. Il codice dell'applicazione può quindi rispondere al relativo esito positivo o negativo. Se lo stato corrente delle variabili corrisponde già alle condizioni di fine di esito o fallimento, l'awaiter restituirà immediatamente esito positivo o negativo.

Prima di iniziare

Creazione di una risorsa waiter

Per creare un waiter:

  1. Determina la condizione di successo ed eventualmente di errore per il gestore.

    Ad esempio, il seguente codice campione imposta le condizioni di esito positivo e di errore, dove il gestore restituisce un valore corretto se il numero di percorsi al di sotto di /status/success è tre e non restituisce un valore corretto se il percorso al di sotto di /status/success è due:/status/failure

    {
        'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]',
        'timeout': '360s',
        'success': {
           'cardinality': {
              'path': '/status/success',
              'number': 3
           }
        },
        'failure': {
           'cardinality': {
              'path': '/status/failure',
              'number': 2
           }
         }
    }
    

    Best practice per la definizione di un gestore in attesa:

    • È consentita una sola condizione di successo e una sola condizione di errore per gestore.
    • Devi mantenere un gestore per percorso.
    • Le condizioni di errore vengono sempre valutate prima delle condizioni di successo.
    • Non sovrapporre i prefissi dei percorsi tra le condizioni.
  2. Crea la risorsa waiter.

    Deployment Manager

    Per creare un waiter in Deployment Manager, specifica il tipo di waiter:

    runtimeconfig.v1beta1.waiter
    

    Nelle proprietà del cameriere, fornisci name, location, timeout e le condizioni di fine del cameriere:

    - name: [NAME]
      type: runtimeconfig.v1beta1.waiter
      properties:
        parent: $(ref.[CONFIG_NAME].name)
        waiter: [WAITER_NAME]
        timeout: [TIMEOUT_SECS]
        success:
          cardinality:
            path: [SUCCESS_PATH_PREFIX]
            number: [SUCCESS_NUMBER]
    

    dove:

    • [NAME] è il nome della risorsa.
    • [CONFIG_NAME] è la risorsa Config per questa richiesta.
    • [WAITER_NAME] è il nome del cameriere.
    • [TIMEOUT_SECS] è il numero di secondi da attendere prima che il gestore abbia un timeout. Ad esempio, per 300 secondi, utilizza 300s.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da monitorare per verificare la presenza di una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili esistenti in questo percorso per essere considerato riuscito.

    gcloud

    Con Google Cloud CLI:

    gcloud beta runtime-config configs waiters create [WAITER_NAME] \
        --config-name [CONFIG_NAME] \
        --success-cardinality-path [SUCCESS_PATH_PREFIX] \
        --success-cardinality-number [SUCCESS_NUMBER] --timeout [TIMEOUT_SECS]
    

    dove:

    • [WAITER_NAME] è il nome del cameriere.
    • [CONFIG_NAME] è la risorsa RuntimeConfig per questa richiesta.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da monitorare per verificare la presenza di una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili esistenti in questo percorso per essere considerato riuscito.
    • [TIMEOUT_SECS] il numero di secondi di attesa prima del timeout del gestore.

      Gcloud CLI restituisce una risposta simile alla seguente:

      Creato [https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/example-waiter].

      Dopo aver creato il gestore, lo strumento esegue il polling della risorsa Operations correlata fino a quando il gestore non restituisce una delle risposte applicabili.

      Per una documentazione completa di questo comando gcloud, consulta la documentazione di riferimento di runtime-config configs waiters.

    API

    Nell'API, invia una richiesta POST al seguente URI:

    https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters
    

    dove:

    • [PROJECT_ID] è l'ID progetto per questa richiesta.
    • [CONFIG_NAME] è il nome della configurazione per questa richiesta.

    Il payload della richiesta deve contenere il nome dell'attesa, la condizione di successo e la durata del timeout:

    {
     'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]',
     'timeout': '[TIMEOUT_SEC]',
     'success': {
        'cardinality': {
           'path': '[SUCCESS_PATH_PREFIX]',
           'number': '[SUCCESS_NUMBER]'
        }
      }
    }
    

    dove:

    • [PROJECT_ID] è l'ID progetto per questa richiesta.
    • [CONFIG_NAME] è il nome della configurazione per questa richiesta.
    • [WAITER_NAME] è il nome dell'avvertimento da creare.
    • [TIMEOUT_SECS] il numero di secondi di attesa prima del timeout del gestore.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da monitorare per una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili esistenti in questo percorso per essere considerato riuscito.

    In caso di esito positivo, la richiesta restituisce il nome dell'oggetto operazioni che polli per il completamento:

    {
        "name": "projects/[PROJECT_ID]/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
    }
    

    Poi, polleggia il cameriere per controllare periodicamente quando torna.

    Per scoprire di più sul metodo, consulta la documentazione di waiters().create.

Eseguire il polling di un waiter

Dopo aver creato un gestore, esegui il polling della corrispondente risorsa Operations per verificare se il gestore ha soddisfatto una delle condizioni di fine. Se il gestore di coda ha soddisfatto una condizione di fine o è scaduto il tempo di attesa, l'operazione viene restituita come done e restituisce una risposta in base ai risultati del gestore di coda.

Utilizza gcloud o l'API per eseguire il polling di un gestore.

gcloud

Con lGoogle Cloud CLI, quando effettui una richiesta di creazione di un Waiter, lo strumento esegue automaticamente il polling e attende il ritorno del Waiter. Lo strumento stampa una risposta simile alla seguente durante l'esecuzione di un polling del gestore:

Waiting for waiter [WAITER_NAME] to finish...

Se non vuoi che lo strumento esegua il polling del gestore dopo averlo creato, fornisci il flag --async con la richiesta di creazione.

API

Nell'API REST, invia una richiesta GET al seguente URI per ottenere lo stato dell'operazione di attesa:

https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]

dove:

  • [PROJECT_ID] è l'ID progetto per questa richiesta.
  • [CONFIG_NAME] è il nome della configurazione per questa richiesta.
  • [WAITER_NAME] è il nome dell'awaiter da sottoporre a polling.

Se l'operazione è ancora in corso, l'API restituisce una risposta simile alla seguente, senza uno stato:

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
}

Se l'operazione è completa, viene contrassegnata come done e restituisce una delle risposte descritte nella sezione Risposte del gestore.

Per scoprire di più sul metodo, consulta la documentazione di waiters().create.

Risposte del cameriere

Condizione di fine riuscita

Se il gestore ha soddisfatto una condizione di fine positiva, l'operazione restituisce la risorsa Waiter:

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Waiter",
    "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]",
    "timeout": "360.000s",
    "failure": {
      "cardinality": {
        "path": "[SUCCESS_PATH_PREFIX]",
        "number": "[SUCCESS_NUMBER]"
      }
    },
    "success": {
      "cardinality": {
        "path": "[FAILURE_PATH_PREFIX]",
        "number": [FAILURE_NUMBER]
      }
    },
    "createTime": "2016-04-12T18:02:13.316695490Z",
    "done": true
  }
}

Condizione di errore

Se il gestore attende failure o scade il tempo di attesa, l'operazione restituisce un errore.

Condizione di errore soddisfatta

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "error": {
    "code": 9,
    "message": "Failure condition satisfied."
  }
}

Il gestore della coda ha superato il tempo di attesa

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "error": {
    "code": 4,
    "message": "Timeout expired."
  }
}

Passaggi successivi