Đặ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.
Truy cập vào tài liệu 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 mà bộ đếm của chính sách đó sẽ đượ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à chính sách này phải có sẵn trong suốt quy trình.

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 API Proxy thì bạn sẽ gặp lỗi nêu trên.

<Quota name="MyQuotaPolicy">

Chẩn đoán

  1. 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 faultstring. Ví dụ: trong faultstring sau, 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 API Proxy nơi xảy ra lỗi. Xác định Chính sách đặt lại hạn mức cụ thể mà 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 được xác định ở 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 nội dung trong faultstring:

    <?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ụ minh hoạ ở trên, chính sách Hạn mức MyQuotaPolicy phải có 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. Chính sách Hạn mức mục tiêu này phải có sẵn khi chính sách Đặt lại hạn mức thực thi.

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 trả về cho ứng dụng 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 giá trị tham chiếu đến biến chứa số lượng cho phép trong phần tử <Allow> của chính sách. Phần tử này là phần tử bắt buộc và chỉ định số tiền để 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 nơi xảy ra lỗi và tên của biến tham chiếu không thể phân giải. Bạn có thể tìm thấy cả hai mục này trong phản hồi lỗi.

    Ví dụ: trong faultstring sau đây, tên chính sách là ResetQuota và giá trị 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 tệp XML chính sách Đặt lại hạn mức không thành công, 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 tham chiếu được 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ên tham chiếu 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 thực thi hay không.

  4. Nếu biến là một trong hai trường hợp sau:

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

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

    Trong ví dụ minh hoạ ở trên, giá trị của số lượng được phép trong phần tử <Allow> được giả định là được truy xuất từ tiêu đề của 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 truyền dưới dạng một phần của yêu cầu API.

    Sau đây là một yêu cầu API mẫu không truyền tiêu đề allowcount 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 truyền trong yêu cầu, nên biến request.header.allowcount được dùng trong phần tử <Allow> trong chính sách Đặt lại hạn mức ở trên là không xác định và do đó không thể phân giải. 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 được 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 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 phân giải được biến mà thuộc tính ref tham chiếu 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 nêu 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 nơi tên của biến tham chiếu được chỉ định trong phần tử <Quota> không thể phân giải đúng cách.

  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 thực thi hay không.

  3. Nếu biến là một trong hai trường hợp sau:

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

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

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

    Sau đây là một yêu cầu API mẫu không truyền tiêu đề quotapolicy làm một phần của yêu cầu:

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

    Vì tiêu đề quotapolicy không được truyền trong yêu cầu, nên request.header.quotapolicy được dùng trong phần tử <Quota> trong chính sách Đặt lại hạn mức ở trên là không xác định và không thể phân giải. 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> sẽ phân giải tại thời gian chạy và có sẵn trong quy trình cụ thể, nơi chính sách Đặt lại hạn mức 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 đề quotapolicy như minh hoạ dưới đây:

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