Đặt lại khắc phục sự cố về hạn mức thời gian chạy

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

InvalidRLPolicy

Mã lỗi

policies.resetquota.InvalidRLPolicy

Nội dung phản hồi lỗi

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

Thông báo lỗi mẫu

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

Nguyên nhân

Lỗi này xảy ra nếu chính sách Hạn mức được chỉ định trong phần tử <Quota> của chính sách Đặt lại hạn mức không được xác định trong proxy API. Phần tử <Quota> là bắt buộc và xác định chính sách Hạn mức mục tiêu có bộ đếm cần được cập nhật thông qua chính sách Đặt lại hạn mức. Bạn phải tạo và xác định chính sách Hạn mức mục tiêu này trong cùng một proxy API và phải có sẵn trong luồng.

Ví dụ: giả sử phần tử <Quota> được xác định như bên dưới, nhưng nếu MyQuotaPolicy không được xác định trong Proxy API, thì bạn sẽ gặp lỗi ở trên.

<Quota name="MyQuotaPolicy">

Chẩn đoán

  1. Hãy xác định tên chính sách Hạn mức không hợp lệ được chỉ định trong chính sách Đặt lại hạn mức. Bạn có thể tìm thấy tên của chính sách Hạn mức trong chuỗi lỗi. Ví dụ: trong chuỗi lỗi sau đây, tên chính sách Hạn mức là MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Kiểm tra từng chính sách Đặt lại hạn mức trong Proxy API nơi xảy ra lỗi. Xác định chính sách Đặt lại hạn mức cụ thể, trong đó chính sách Hạn mức được chỉ định trong phần tử bắt buộc <Quota> khớp với tên đã xác định trong Bước 1 ở trên.

    Ví dụ: chính sách Đặt lại hạn mức sau đây chỉ định một chính sách Hạn mức có tên là MyQuotaPolicy, khớp với chính sách trong chuỗi lỗi:

    <?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. Xác định xem chính sách Hạn mức này có được tạo và xác định trong cùng một proxy API hay không. Nếu chính sách Hạn mức không tồn tại trong cùng một proxy API, thì đó là nguyên nhân gây ra lỗi.

    Trong ví dụ nêu trên, chính sách Hạn mức MyQuotaPolicy sẽ tồn tại trong luồng trước khi chính sách Đặt lại hạn mức Reset_Quota_Demo thực thi.

    Vì Chính sách hạn mức MyQuotaPolicy không tồn tại trong luồng, nên bạn sẽ nhận được mã lỗi:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Độ phân giải

Đảm bảo rằng Chính sách hạn mức được khai báo trong phần tử <Quota> được xác định trong proxy API. Bạn phải có chính sách Hạn mức mục tiêu này khi thực thi chính sách Đặt lại hạn mức.

FailedToResolveAllowCountRef

Mã lỗi

policies.resetquota.FailedToResolveAllowCountRef

Nội dung phản hồi lỗi

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

Thông báo lỗi mẫu

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

Lỗi được trả về ứng dụng khách sẽ chỉ là: policies.ratelimit.QuotaViolation.

Nguyên nhân

Lỗi này xảy ra nếu không thể phân giải tham chiếu đến biến có chứa số lượng cho phép trong phần tử <Allow> của chính sách thành một giá trị. Phần tử này là bắt buộc và chỉ định số lượng để giảm bộ đếm hạn mức.

Chẩn đoán

  1. Xác định chính sách Đặt lại hạn mức đã xảy ra lỗi và tên của biến tham chiếu không thể giải quyết. Bạn có thể tìm thấy cả hai mục này trong phản hồi lỗi.

    Ví dụ: trong chuỗi lỗi sau đây, tên chính sách là ResetQuota và tham chiếu là 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. Trong XML không thành công của Chính sách đặt lại hạn mức, hãy xác minh rằng tên của biến tham chiếu được dùng khớp với tên tệp đối chiếu đã xác định trong phản hồi lỗi (Bước 1 ở trên).

    Ví dụ: chính sách sau đây đặt phần tử có tệp tham chiếu có tên là request.header.allowcount, khớp với nội dung trong lỗi:

    <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. Xác định xem biến tham chiếu có được xác định và có sẵn trong luồng mà chính sách Đặt lại hạn mức hay không.

  4. Nếu biến đó là:

    1. ngoài phạm vi (không có trong quy trình cụ thể đang thực thi chính sách) hoặc
    2. không thể phân giải (không xác định)

    thì đó chính là nguyên nhân gây ra lỗi.

    Trong ví dụ nêu trên, giá trị của số lượng được phép trong phần tử <Allow> phải được truy xuất từ tiêu đề yêu cầu có tên là allowcount. Tuy nhiên, Edge không thể phân giải request.header.allowcount. Điều này xảy ra nếu tiêu đề allowcount không được chuyển trong yêu cầu API.

    Dưới đây là một yêu cầu API mẫu không chuyển tiêu đề allowcount (số lượt cho phép) trong yêu cầu:

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

    Vì tiêu đề allowcount không được chuyển trong yêu cầu, nên biến request.header.allowcount được dùng trong phần tử <Allow> ở chính sách Đặt lại hạn mức ở trên không xác định được và do đó không thể giải quyết được. Vì vậy, bạn sẽ nhận được phản hồi lỗi:

    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
    

Độ phân giải

Đảm bảo rằng biến được tham chiếu trong phần tử <Allow> tồn tại/được xác định và có sẵn trong quy trình cụ thể, nơi chính sách Đặt lại hạn mức sẽ thực thi.

Để sửa ví dụ nêu trên, bạn có thể sửa đổi yêu cầu để thêm tiêu đề allowcount (số lượt cho phép) như minh hoạ dưới đây:

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

FailedToResolveRLPolicy

Mã lỗi

policies.resetquota.FailedToResolveRLPolicy

Nội dung phản hồi lỗi

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

Thông báo lỗi mẫu

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

Nguyên nhân

Lỗi này xảy ra nếu không thể phân giải biến được tham chiếu bởi thuộc tính ref trong phần tử <Quota>.

Ví dụ: nếu thuộc tính ref được đặt thành request.header.quotapolicy trong phần tử <Quota> nhưng không có trong quy trình proxy API, thì bạn sẽ gặp lỗi ở trên.

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

Chẩn đoán

  1. Kiểm tra từng chính sách Đặt lại hạn mức trong Proxy API nơi xảy ra lỗi và xác định chính sách Đặt lại hạn mức trong đó không thể giải quyết đúng cách tên của biến tham chiếu được chỉ định trong phần tử <Quota>.

  2. Xác định xem biến có được xác định và có sẵn trong luồng mà chính sách Đặt lại hạn mức hay không.

  3. Nếu biến đó là:

    1. nằm ngoài phạm vi (không áp dụng trong quy trình cụ thể khi chính sách thực thi) hoặc
    2. không thể phân giải (không xác định)

    thì đó chính là nguyên nhân gây ra lỗi.

    Trong ví dụ bên dưới, tên của chính sách Hạn mức mục tiêu sẽ được truy xuất từ tiêu đề yêu cầu có tên là quotapolicy. Tuy nhiên, Edge không thể phân giải request.header.quotapolicy. Trường hợp này xảy ra nếu tiêu đề hạn mức không được chuyển trong yêu cầu 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>
    

    Dưới đây là một yêu cầu API mẫu không chuyển tiêu đề hạn mức trong yêu cầu:

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

    Do tiêu đề quotapolicy không được truyền trong yêu cầu nên tệp tham chiếu request.header.quotapolicy dùng cho phần tử <Quota> ở chính sách Đặt lại hạn mức ở trên không xác định và không giải quyết được. Do đó, bạn sẽ nhận được phản hồi lỗi:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Độ phân giải

Đảm bảo rằng thuộc tính ref được tham chiếu trong phần tử <Quota> được phân giải trong thời gian chạy và có sẵn trong một quy trình cụ thể, nơi chính sách Đặt lại hạn mức sẽ thực thi.

Để sửa ví dụ nêu trên, bạn có thể sửa đổi yêu cầu để thêm tiêu đề hạn mức như sau:

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