Dépannage des erreurs d'exécution de réinitialisation des quotas

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.

InvalidRLPolicy

Code d'erreur

policies.resetquota.InvalidRLPolicy

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "Invalid rate limit policy quota_policy_name",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Exemple de message d'erreur

{
    "fault": {
        "faultstring": "Invalid rate limit policy MyQuotaPolicy",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Cause

Cette erreur se produit si la règle de quota spécifiée dans l'élément <Quota> de la règle de réinitialisation des quotas n'est pas définie dans le proxy d'API. L'élément <Quota> est obligatoire et identifie la règle de quota cible dont le compteur doit être mis à jour par le biais de la règle de réinitialisation des quotas. Cette règle de quota cible doit être créée et définie dans le même proxy d'API et doit être disponible pendant l'exécution du flux.

Par exemple, supposons que l'élément <Quota> soit défini comme indiqué ci-dessous. Si MyQuotaPolicy n'est pas défini dans le proxy d'API, vous obtenez l'erreur ci-dessus.

<Quota name="MyQuotaPolicy">

Diagnostic

  1. Identifiez le nom de règle de quota non valide spécifié dans la règle de réinitialisation des quotas. Vous pouvez trouver le nom de la règle de quota à partir de la chaîne d'erreur. Par exemple, dans la chaîne d'erreur suivante, le nom de la règle de quota est MyQuotaPolicy:.

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Examinez chacune des règles de réinitialisation des quotas dans le proxy d'API où l'échec s'est produit. Identifiez la règle de réinitialisation des quotas spécifique dans laquelle la règle de quota spécifiée dans l'élément obligatoire <Quota> correspond au nom identifié à l'étape 1 ci-dessus.

    Par exemple, la règle de réinitialisation des quotas suivante spécifie une règle de quota nommée MyQuotaPolicy, qui correspond au contenu de la chaîne d'erreur :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
           <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    
    
  3. Déterminez si cette règle de quota est créée et définie dans le même proxy d'API. Si la règle de quota n'existe pas dans le même proxy d'API, alors il s'agit de la cause de l'erreur.

    Dans l'exemple ci-dessus, la règle de quota MyQuotaPolicy doit exister dans le flux avant l'exécution de la règle de réinitialisation des quotas Reset_Quota_Demo.

    Comme la règle de quota MyQuotaPolicy n'existe pas dans le flux, vous recevrez ce code d'erreur :

"errorcode": "policies.resetquota.InvalidRLPolicy"

Solution

Vérifiez que la règle de quota déclarée dans l'élément <Quota> est définie dans le proxy d'API. Cette règle de quota cible doit être disponible lors de l'exécution de la règle de réinitialisation des quotas.

FailedToResolveAllowCountRef

Code d'erreur

policies.resetquota.FailedToResolveAllowCountRef

Corps de la réponse d'erreur

Failed to resolve allow count reference reference_name for identifier identifier_name
in ResetQuotaStepDefinition:policy_name;API Proxy:proxy_name;Revision:
revision_number;Environment:env_name;Organization:org_name

Exemple de message d'erreur

Failed to resolve allow count reference request.header.allowcount for identifier
identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
Revision:10;Environment:test;Organization:demo

Remarque : Le message d'erreur ci-dessus n'est pas envoyé en réponse au client. Il s'affiche seulement dans l'outil Trace en tant qu'erreur de la règle de réinitialisation des quotas. Voici un exemple de capture d'écran :

Sous &quot;Propriétés&quot;, la ligne d&#39;erreur est renseignée avec un message.

L'erreur renvoyée au client sera simplement : policies.ratelimit.QuotaViolation.

Cause

Cette erreur se produit si la référence à la variable contenant le nombre autorisé dans l'élément <Allow> de la règle ne peut pas être transformée en valeur. Cet élément est obligatoire et spécifie la quantité nécessaire pour diminuer le compteur de quotas.

Diagnostic

  1. Identifiez la règle de réinitialisation des quotas où l'erreur s'est produite ainsi que le nom de la variable de référence qui ne peut pas être résolue. Ces deux éléments se trouvent dans la réponse d'erreur.

    Par exemple, dans la chaîne d'erreur suivante, le nom de la règle est ResetQuota et la référence est request.header.allowcount :

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    
  2. Dans le XML de la règle de réinitialisation des quotas ayant échoué, vérifiez que le nom de la variable de référence utilisée correspond au nom de la référence identifiée dans la réponse d'erreur (étape 1 ci-dessus).

    Par exemple, la règle suivante définit l'élément avec la référence nommée request.header.allowcount, qui correspond au contenu de l'erreur :

    <ResetQuota async="false" continueOnError="false" enabled="true" name="ResetQuota">
        <DisplayName>ResetQuota</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
            <Identifier name="identifierName">
                <Allow ref="request.header.allowcount"/>
            </Identifier>
        </Quota>
    </ResetQuota>
    
  3. Déterminez si la variable de référence est définie et disponible dans le flux dans lequel la règle de réinitialisation des quotas est exécutée.

  4. Si la variable est :

    1. hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée) ou
    2. impossible à résoudre (non définie),

    alors il s'agit de la cause de l'erreur.

    Dans l'exemple ci-dessus, la valeur du nombre autorisé dans l'élément <Allow> est censée être extraite de l'en-tête de requête nommé allowcount. Cependant, Apigee ne parvient pas à résoudre request.header.allowcount. Cela se produit si l'en-tête allowcount n'est pas transmis dans la requête API.

    Voici un exemple de requête API qui ne transmet pas l'en-tête allowcount dans la requête :

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez Spécifier des remplacements de configuration.

    Étant donné que l'en-tête allowcount n'est pas transmis dans la requête, la variable request.header.allowcount utilisée dans l'élément <Allow> de la règle de réinitialisation des quotas ci-dessus est indéfinie et ne peut donc pas être résolue. Vous recevrez donc la réponse d'erreur suivante :

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    

Solution

Vérifiez que la variable référencée dans l'élément <Allow> existe/est définie et disponible dans le flux spécifique, où la règle de réinitialisation des quotas s'exécute.

Pour corriger l'exemple présenté ci-dessus, vous pouvez modifier la requête pour inclure l'en-tête allowcount, comme indiqué ci-dessous :

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez Spécifier des remplacements de configuration.

FailedToResolveRLPolicy

Code d'erreur

policies.resetquota.FailedToResolveRLPolicy

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Exemple de message d'erreur

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Cause

Cette erreur se produit si la variable référencée par l'attribut ref dans l'élément <Quota> ne peut pas être résolue.

Par exemple, si l'attribut ref est défini sur request.header.quotapolicy dans l'élément <Quota>, mais n'est pas disponible dans le flux de proxy d'API, alors vous obtenez l'erreur ci-dessus.

<Quota ref="request.header.quotapolicy">

Diagnostic

  1. Examinez chacune des règles de réinitialisation des quotas dans le proxy d'API où l'échec a eu lieu et identifiez la règle de réinitialisation des quotas où le nom de la variable de référence spécifiée dans l'élément <Quota> ne peut pas être résolu correctement.

  2. Déterminez si la variable est définie et disponible dans le flux dans lequel s'exécute la règle de réinitialisation des quotas.

  3. Si la variable est :

    1. hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée) ou
    2. impossible à résoudre (non définie),

    alors il s'agit de la cause de l'erreur.

    Dans l'exemple ci-dessous, le nom de la règle de quota cible doit être récupéré à partir de l'en-tête de requête nommé quotapolicy. Cependant, Apigee ne peut pas résoudre request.header.quotapolicy. Cela se produit si l'en-tête quotapolicy n'est pas transmis dans la requête API.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota ref="request.header.quotapolicy">
            <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    

    Voici un exemple de requête API qui ne transmet pas l'en-tête quotapolicy dans la requête :

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez Spécifier des remplacements de configuration.

    Étant donné que l'en-tête quotapolicy n'est pas transmis dans la requête, la référence request.header.quotapolicy utilisée dans l'élément <Quota> de la règle de réinitialisation des quotas ci-dessus est indéfinie et ne peut pas être résolue. Par conséquent, vous recevez la réponse d'erreur suivante :

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Solution

Vérifiez que l'attribut ref référencé dans l'élément <Quota> se résout au moment de l'exécution et qu'il est disponible dans le flux spécifique où la règle de réinitialisation des quotas s'exécute.

Pour corriger l'exemple ci-dessus, vous pouvez modifier la requête pour inclure l'en-tête quotapolicy, comme indiqué ci-dessous :

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"

your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez Spécifier des remplacements de configuration.