عیب‌یابی خطای زمان اجرای بازنشانی سهمیه

درحال مشاهده اسناد 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> اجباری است و خط‌مشی «سهمیه» هدف را که شمارنده آن باید ازطریق خط‌مشی «بازنشانی سهمیه» به‌روزرسانی شود شناسایی می‌کند. این خط‌مشی «سهمیه» هدف باید در همان پراکسی میانای برنامه‌سازی کاربردی ایجاد و تعریف شود و درطول جریان دردسترس باشد.

برای مثال، فرض کنید عنصر<Quota> همان‌طور که در زیر می‌بینید تعریف شده است، اما اگر MyQuotaPolicy در «پراکسی API» تعریف نشده باشد، خطای بالا را دریافت می‌کنید.

<Quota name="MyQuotaPolicy">

تشخیص

  1. نام خط‌مشی سهمیه نامعتبر مشخص‌شده در خط‌مشی «بازنشانی سهمیه» را شناسایی کنید. می‌توانید نام خط‌مشی «سهمیه» را از faultstring پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی «سهمیه» MyQuotaPolicy: است

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. هریک از خط‌مشی‌های «بازنشانی سهمیه» را در «پراکسی API» که در آن خرابی رخ داده است بررسی کنید. خط‌مشی «بازنشانی سهمیه» خاصی را که در آن «خط‌مشی سهمیه» مشخص‌شده در عنصر اجباری <Quota> با نام شناسایی‌شده در «مرحله ۱» در بالا مطابقت دارد شناسایی کنید.

    برای مثال، خط‌مشی «بازنشانی سهمیه» زیر خط‌مشی «سهمیه» با نام MyQuotaPolicy را مشخص می‌کند که با محتوای 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. تعیین کنید که آیا این خط‌مشی «سهمیه» در همان پراکسی 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. خط‌مشی «بازنشانی سهمیه» را که خطا در آن رخ داده است و نام متغیر مرجعی را که نمی‌تواند حل‌وفصل شود شناسایی کنید. هر دوی این موارد را می‌توانید در پاسخ خطا پیدا کنید.

    برای مثال، در faultstring زیر، نام خط‌مشی 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 خط‌مشی «بازنشانی سهمیه» ناموفق، تأیید کنید که نام متغیر مرجع استفاده‌شده با نام مرجع شناسایی‌شده در پاسخ خطا مطابقت دارد (مرحله ۱ در بالا).

    برای مثال، خط‌مشی زیر عنصر را با مرجع نام‌گذاری‌شده 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 در عنصر <Quota> روی request.header.quotapolicy تنظیم شده باشد اما در جریان پراکسی 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>
    

    در اینجا یک درخواست نمونه میانای برنامه‌سازی کاربردی آورده شده است که سرایند 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"