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 quotas spécifiée dans l'élément <Quota> de la règle de réinitialisation des quotas ResetQuota n'est pas définie dans le proxy d'API. L'élément <Quota> est obligatoire et identifie la règle de quotas cible dont le compteur doit être mis à jour par le biais de la règle de réinitialisation des quotas ResetQuota. Cette règle de quotas cible doit être créée et définie dans le même proxy d'API et doit être disponible pendant le 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 quotas non valide spécifié dans la règle de réinitialisation des quotas ResetQuota. Vous pouvez trouver le nom de la règle de quotas à partir de la chaîne d'erreur. Par exemple, dans la chaîne d'erreur suivante, le nom de la règle de quotas est MyQuotaPolicy:.

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Examinez chacune des règles de réinitialisation des quotas ResetQuota dans le proxy d'API où l'échec s'est produit. Identifiez la règle de réinitialisation des quotas ResetQuota spécifique dans laquelle la règle de quotas 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 ResetQuota suivante spécifie une règle de quotas 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 quotas est créée et définie dans le même proxy d'API. Si la règle de quotas n'existe pas dans le même proxy d'API, alors il s'agit de la cause de l'erreur.

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

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

"errorcode": "policies.resetquota.InvalidRLPolicy"

Solution

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

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 ne s'affiche dans l'outil Trace qu'en tant qu'erreur de la règle de réinitialisation des quotas ResetQuota. Voici un exemple de capture d'écran :

Sous &quot;Properties&quot; (Propriétés), 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 le montant nécessaire pour diminuer le compteur de quotas.

Diagnostic

  1. Identifiez la règle de réinitialisation des quotas ResetQuota où l'erreur s'est produite et 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 ResetQuota 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 ResetQuota 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 le cadre de la requête API.

    Voici un exemple de requête API qui ne transmet pas l'en-tête allowcount dans le cadre de 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 la section Spécifier des remplacements de configuration.

    Étant donné que l'en-tête allowcount n'est pas transmis dans le cadre de la requête, la variable allowcount utilisée dans l'élément <Allow> de la règle de réinitialisation des quotas ResetQuota 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 ResetQuota s'exécute.

Pour corriger l'exemple 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 la section 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, vous obtenez alors l'erreur ci-dessus.

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

Diagnostic

  1. Examinez chacune des règles de réinitialisation des quotas ResetQuota dans le proxy d'API où la défaillance a eu lieu et identifiez la règle de réinitialisation des quotas ResetQuota 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 ResetQuota.

  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 quotas cible doit être récupérée à 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 le cadre de 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 le cadre de 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 la section Spécifier des remplacements de configuration.

    Étant donné que l'en-tête quotapolicy n'est pas transmis dans le cadre de 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 ResetQuota 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 ResetQuota 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 la section Spécifier des remplacements de configuration.