Solução de problemas de erro de ambiente de execução de redefinição de cota

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

InvalidRLPolicy

Código do erro

policies.resetquota.InvalidRLPolicy

Corpo da resposta de erro

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

Exemplo de mensagem de erro

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

Causa

Esse erro ocorrerá se a política de cota especificada no elemento <Quota> da política de redefinição de cota não estiver definida no proxy de API. O elemento <Quota> é obrigatório e identifica a política de cota de destino com o contador que precisa ser atualizado por meio da política de redefinição de cota. Essa política de cota de destino precisa ser criada e definida no mesmo proxy de API e precisa estar disponível durante o fluxo.

Por exemplo, digamos que o elemento <Quota> esteja definido como visto abaixo, mas se MyQuotaPolicy não estiver definido no proxy de API, você receberá o erro acima.

<Quota name="MyQuotaPolicy">

Diagnóstico

  1. Identifique o nome da política de cota inválido especificado na política de redefinição de cota. Encontre o nome da política de cota na string de falha. Por exemplo, na string de falha a seguir, o nome da política de cota é MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Examine cada uma das políticas de redefinição de cota no proxy de API em que a falha ocorreu. Identifique a política de redefinição de cota específica, em que a política de cota especificada no elemento obrigatório <Quota> corresponde ao nome identificado na Etapa 1 acima.

    Por exemplo, a seguinte política de redefinição de cota especifica uma política de cota chamada MyQuotaPolicy, que corresponde ao que está na string de falha:

    <?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. Determine se essa política de cota foi criada e definida no mesmo proxy de API. Se a política de cota não existir no mesmo proxy de API, essa será a causa do erro.

    No exemplo mostrado acima, a política de cota MyQuotaPolicy precisa existir no fluxo antes da execução da política de redefinição de cota Reset_Quota_Demo.

    Como a política de cota MyQuotaPolicy não existe no fluxo, você receberá o código de erro:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Resolução

Certifique-se de que a política de cota declarada no elemento <Quota> esteja definida no proxy de API. Essa política de cota de destino precisa estar disponível quando a política de redefinição de cota é executada.

FailedToResolveAllowCountRef

Código do erro

policies.resetquota.FailedToResolveAllowCountRef

Corpo da resposta de erro

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

Exemplo de mensagem de erro

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

O erro retornado ao cliente será simplesmente: policies.ratelimit.QuotaViolation.

Causa

Esse erro ocorrerá se a referência à variável que contém a contagem de permissões no elemento <Allow> da política não puder ser resolvida como um valor. Esse elemento é obrigatório e especifica o valor para diminuir o contador de cotas.

Diagnóstico

  1. Identifique a política de redefinição de cota em que o erro ocorreu e o nome da variável de referência que não pode ser resolvida. Você pode encontrar esses dois itens na resposta de erro.

    Por exemplo, na seguinte string de falha, o nome da política é ResetQuota e a referência é 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. No XML de política de redefinição de cota com falha, verifique se o nome da variável de referência usada corresponde ao nome identificado na resposta de erro (Etapa 1 acima).

    Por exemplo, a política a seguir define o elemento com a referência chamada request.header.allowcount, que corresponde ao que está no erro:

    <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. Determine se a variável de referência está definida e disponível no fluxo em que a política de redefinição de cota é executada.

  4. Se a variável for:

    1. fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
    2. não é possível resolver (não está definida)

    essa é a causa do erro.

    No exemplo mostrado acima, o valor da contagem permitida no elemento <Allow> precisa ser recuperado do cabeçalho da solicitação chamado allowcount. No entanto, O Edge não conseguiu resolver o request.header.allowcount. Isso acontece quando o cabeçalho allowcount não é transmitido como parte da solicitação de API.

    Veja um exemplo de solicitação de API que não transmite o cabeçalho allowcount como parte da solicitação:

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    Como o cabeçalho allowcount não é transmitido como parte da solicitação, a variável request.header.allowcount usada no elemento <Allow> na política de redefinição de cota acima é indefinida e, portanto, não pode ser resolvida. Portanto, você receberá a resposta de erro:

    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
    

Resolução

Verifique se a variável mencionada no elemento <Allow> existe/está definida e disponível no fluxo específico, em que a política de redefinição de cota é executada.

Para corrigir o exemplo mostrado acima, você pode modificar a solicitação para incluir o cabeçalho allowcount como mostrado abaixo:

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

FailedToResolveRLPolicy

Código do erro

policies.resetquota.FailedToResolveRLPolicy

Corpo da resposta de erro

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

Exemplo de mensagem de erro

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

Causa

Esse erro ocorrerá se a variável mencionada pelo atributo ref no elemento <Quota> não puder ser resolvida.

Por exemplo, se o atributo ref estiver definido como request.header.quotapolicy no elemento <Quota>, mas não estiver disponível no fluxo de proxy de API, você receberá o erro acima.

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

Diagnóstico

  1. Examine cada uma das políticas de redefinição de cota no proxy de API em que a falha ocorreu e identifique a política de redefinição de cota em que o nome da variável de referência especificada no elemento <Quota> não pode ser resolvido corretamente.

  2. Determine se a variável está definida e disponível no fluxo em que a política de redefinição de cota é executada.

  3. Se a variável for:

    1. fora do escopo (não disponível no fluxo específico em que a política é executada) ou
    2. não é possível resolver (não está definida)

    essa é a causa do erro.

    No exemplo mostrado abaixo, o nome da política de cota de destino deve ser recuperado do cabeçalho da solicitação chamado quotapolicy. No entanto, o Edge não consegue para resolver a request.header.quotapolicy. Isso acontecerá se o cabeçalho quotapolicy não for transmitido como parte da solicitação de 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>
    

    Veja um exemplo de solicitação de API que não transmite o cabeçalho quotapolicy como parte da solicitação:

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    Como o cabeçalho quotapolicy não foi passado como parte da solicitação, a referência request.header.quotapolicy usada no elemento <Quota> na política de redefinição de cota acima é indefinida e não pode ser resolvida. Como resultado, você recebe a resposta de erro:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Resolução

Verifique se o atributo ref mencionado no elemento <Quota> é resolvido no ambiente de execução e está disponível no fluxo específico, em que a política de redefinição de cota é executada.

Para corrigir o exemplo mostrado acima, você pode modificar a solicitação para incluir o cabeçalho quotapolicy conforme mostrado abaixo:

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"