פתרון בעיות הקשורות לשגיאת זמן ריצה של מכסה

כרגע מוצג התיעוד של 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> של המדיניותReset Quota לא מוגדרת בשרת ה-proxy של ה-API. הרכיב <Quota> הוא שדה חובה, ומזהה את המדיניות בנושא מכסות יעד שצריך לעדכן את המונה שלה באמצעות המדיניות איפוס המכסה. צריך ליצור ולהגדיר את המדיניות הזו בנושא מכסת היעד באותו שרת proxy ל-API, והיא צריכה להיות זמינה לאורך הזרימה.

לדוגמה, נניח שהרכיב <Quota> מוגדר כפי שמוצג בהמשך, אבל אם MyQuotaPolicy לא מוגדר בשרת ה-Proxy של API, תתקבל הודעת השגיאה שלמעלה.

<Quota name="MyQuotaPolicy">

אבחון

  1. זיהוי השם הלא חוקי של מדיניות המכסה שמצוין במדיניות 'איפוס המכסה'. אפשר למצוא את השם של מדיניות המכסה ב-faultstring. לדוגמה, במחרוזת השבר הבאה, השם של מדיניות המכסה הוא MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. חשוב לבדוק כל אחד מכללי המדיניות לאיפוס המכסה בשרת ה-proxy של ה-API, שבהם אירעה הכשל. עליכם לזהות את המדיניות הספציפית לאיפוס המכסה, שבה מדיניות המכסה שמצוינת ברכיב החובה <Quota> תואמת לשם שצוין בשלב 1 למעלה.

    לדוגמה, במדיניות הבאה לאיפוס מכסה מצוינת מדיניות מכסה בשם 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. יש לקבוע אם מדיניות המכסה הזו נוצרת ומוגדרת באותו שרת proxy ל-API. אם מדיניות המכסה לא קיימת באותו שרת proxy ל-API, זו הסיבה לשגיאה.

    בדוגמה שלמעלה, מדיניות המכסה MyQuotaPolicy אמורה להתקיים בתהליך לפני היישום של מדיניות איפוס המכסה Reset_Quota_Demo.

    מאחר שמדיניות המכסה MyQuotaPolicy לא קיימת בתהליך, תקבלו את קוד השגיאה:

"errorcode": "policies.resetquota.InvalidRLPolicy"

רזולוציה

צריך לוודא שמדיניות המכסה שהוצהרה באלמנט <Quota> מוגדרת בשרת ה-proxy של ה-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 של שרת ה-proxy, תתקבל השגיאה שצוינה למעלה.

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

אבחון

  1. יש לבדוק כל אחד מכללי המדיניות לאיפוס המכסה בשרת ה-API של ה-API שבהם התרחש הכשל, ולזהות את המדיניות איפוס המכסה, שבה לא ניתן לפענח כראוי את שם משתנה ההפניה שצוין ברכיב <Quota>.

  2. לקבוע אם המשתנה מוגדר וזמין בתהליך שבו מופעלת המדיניותReset Quota.

  3. אם המשתנה הוא:

    1. לא חלה עליהם (לא זמינה בתהליך הספציפי שבו המדיניות חלה) או
    2. לא ניתן לפענח (אינו מוגדר)

    זאת הסיבה לשגיאה.

    בדוגמה הבאה, השם של המדיניות בנושא מכסת היעד אמור להתאחזר מכותרת הבקשה בשם quotapolicy. עם זאת, Edge לא יכול לפתור את הבעיה request.header.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 שלא מעבירה את המכסה של הכותרת כחלק מהבקשה:

    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"