Устранение неполадок при сбросе квоты, Устранение неполадок при сбросе квоты

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

ИнвалидRLPolicy

Код ошибки

policies.resetquota.InvalidRLPolicy

Тело ответа об ошибке

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

Пример сообщения об ошибке

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

Причина

Эта ошибка возникает, если политика квот, указанная в элементе <Quota> политики сброса квоты, не определена в прокси-сервере API. Элемент <Quota> является обязательным и определяет целевую политику квот, счетчик которой должен быть обновлен с помощью политики сброса квоты. Эта целевая политика квот должна быть создана и определена в одном прокси-сервере API и должна быть доступна во время потока.

Например, предположим, что элемент <Quota> определен, как показано ниже, но если MyQuotaPolicy не определен в прокси-сервере API, вы получите вышеуказанную ошибку.

<Quota name="MyQuotaPolicy">

Диагностика

  1. Определите недопустимое имя политики квот, указанное в политике сброса квоты. Имя политики квот можно найти в строке ошибки. Например, в следующей строке ошибки имя политики квот — MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Проверьте каждую политику сброса квоты в прокси-сервере API, где произошел сбой. Определите конкретную политику сброса квоты, в которой политика квот, указанная в обязательном элементе <Quota> соответствует имени, указанному на шаге 1 выше.

    Например, следующая политика сброса квоты определяет политику квот с именем MyQuotaPolicy , которая соответствует тому, что указано в строке ошибки:

    <?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. Определите, создана ли эта политика квот и определена в том же прокси-сервере API. Если политика квот не существует в том же прокси-сервере API, это и есть причина ошибки.

    В приведенном выше примере предполагается, что политика квот MyQuotaPolicy существует в потоке до выполнения политики сброса квоты Reset_Quota_Demo .

    Поскольку политика квот MyQuotaPolicy не существует в потоке, вы получите код ошибки:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Разрешение

Убедитесь, что политика квот, объявленная в элементе <Quota> , определена в прокси-сервере API. Эта целевая политика квот должна быть доступна при выполнении политики сброса квот.

FailedToResolveAllowCountRef

Код ошибки

policies.resetquota.FailedToResolveAllowCountRef

Тело ответа об ошибке

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

Пример сообщения об ошибке

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

Клиенту будет возвращена ошибка: policies.ratelimit.QuotaViolation .

Причина

Эта ошибка возникает, если ссылку на переменную, содержащую счетчик разрешений, в элементе <Allow> политики не удается преобразовать в значение. Этот элемент является обязательным и определяет величину уменьшения счетчика квоты.

Диагностика

  1. Определите политику сброса квоты, в которой произошла ошибка, и имя ссылочной переменной, которую невозможно разрешить. Оба эти элемента можно найти в ответе об ошибке.

    Например, в следующей строке ошибки имя политики — ResetQuota , а ссылка — 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. В неудавшемся XML-коде политики сброса квоты убедитесь, что имя используемой ссылочной переменной соответствует ссылочному имени, указанному в ответе об ошибке (шаг 1 выше).

    Например, следующая политика устанавливает элемент со ссылкой с именем request.header.allowcount , которая соответствует тому, что указано в ошибке:

    <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. Определите, определена ли ссылочная переменная и доступна ли она в потоке, в котором выполняется политика сброса квоты.

  4. Если переменная:

    1. вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
    2. не может быть решено (не определено)

    тогда это причина ошибки.

    В примере, показанном выше, значение разрешенного счетчика в элементе <Allow> должно быть получено из заголовка запроса с именемallowcount . Однако Edge не может разрешить request.header.allowcount . Это происходит, если заголовокallowcount не передается как часть запроса API.

    Вот пример запроса API, который не передает заголовокallowcount как часть запроса:

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

    Поскольку заголовокallowcount не передается как часть запроса, переменная request.header.allowcount , используемая в элементе <Allow> в приведенной выше политике сброса квоты, не определена и поэтому не может быть разрешена. Таким образом, вы получите ответ об ошибке:

    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
    

Разрешение

Убедитесь, что переменная, на которую ссылается элемент <Allow> , существует/определена и доступна в конкретном потоке, где выполняется политика сброса квоты.

Чтобы исправить приведенный выше пример, вы можете изменить запрос, включив в него заголовокallowcount , как показано ниже:

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

FailedToResolveRLPolicy

Код ошибки

policies.resetquota.FailedToResolveRLPolicy

Тело ответа об ошибке

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

Пример сообщения об ошибке

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

Причина

Эта ошибка возникает, если переменную, на которую ссылается атрибут ref в элементе <Quota> , невозможно разрешить.

Например, если атрибут ref установлен как request.header.quotapolicy в элементе <Quota> , но недоступен в потоке прокси-сервера API, вы получите указанную выше ошибку.

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

Диагностика

  1. Изучите каждую политику сброса квоты в прокси-сервере API, где произошел сбой, и определите политику сброса квоты, в которой имя ссылочной переменной, указанное в элементе <Quota> , не может быть разрешено должным образом.

  2. Определите, определена ли и доступна ли переменная в потоке, в котором выполняется политика сброса квоты.

  3. Если переменная:

    1. вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
    2. не может быть решено (не определено)

    тогда это причина ошибки.

    В примере, показанном ниже, имя целевой политики квот должно быть получено из заголовка запроса с именем quotapolicy . Однако Edge не может разрешить request.header.quotapolicy . Это происходит, если политика квотирования заголовка не передается как часть запроса 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>
    

    Вот пример запроса API, который не передает квоту заголовка как часть запроса:

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

    Поскольку заголовок quotapolicy не передается как часть запроса, ссылка request.header.quotapolicy , используемая в элементе <Quota> в приведенной выше политике сброса квоты, не определена и не может быть разрешена. В результате вы получаете ответ об ошибке:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Разрешение

Убедитесь, что ссылка на атрибут ref , указанная в элементе <Quota> , разрешается во время выполнения и доступна в конкретном потоке, где выполняется политика сброса квоты.

Чтобы исправить приведенный выше пример, вы можете изменить запрос, включив в него заголовок quotapolicy , как показано ниже:

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