รีเซ็ตการแก้ปัญหาข้อผิดพลาดเกี่ยวกับรันไทม์ของโควต้า

คุณกําลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบเกี่ยวกับ Apigee X
ข้อมูล

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 คุณจะได้รับข้อผิดพลาดข้างต้น

<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. ระบุนโยบายการรีเซ็ตโควต้าที่เกิดข้อผิดพลาดและชื่อตัวแปรอ้างอิงที่แก้ไขไม่ได้ คุณจะเห็นทั้ง 2 รายการนี้ในการตอบกลับข้อผิดพลาด

    เช่น ในสตริงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ 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>element ควรจะดึงมาจากส่วนหัวคําขอชื่อ 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"