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

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

InvalidRLPolicy

Код ошибки

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 Proxy, то вы получите указанную выше ошибку.

<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 . Это происходит, если заголовок 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-запроса, в котором заголовок quotapolicy не передается в составе запроса:

    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"