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

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

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

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

<Quota name="MyQuotaPolicy">

אבחון

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

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

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

הערה: הודעת השגיאה שלמעלה לא נשלחת כתגובה ללקוח. היא מוצגת רק בכלי Trace כשגיאה ממדיניות איפוס המכסה. למטה מוצגת דוגמה בצילום מסך.

בקטע Properties (מאפיינים), בשורת השגיאה מופיעה הודעה.

השגיאה שמוחזרת ללקוח היא פשוט: policies.ratelimit.QuotaViolation.

מטרה

השגיאה הזו מתרחשת אם אי אפשר לפתור את ההפניה למשתנה שמכיל את מספר ההיתרים ברכיב <Allow> של המדיניות. זהו רכיב חובה שמציין את הסכום להפחתה ממונה המכסות.

אבחון

  1. מזהים את מדיניות Reset Quota (איפוס מכסת השימוש) שבה אירעה השגיאה ואת השם של משתנה ההפניה שלא ניתן לפתור. אפשר למצוא את שני הפריטים האלה בתגובה לשגיאה.

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

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

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

    אז זה הגורם לשגיאה.

    בדוגמה שמוצגת למעלה, הערך של המונה המותר ברכיב <Allow> אמור להישלף מכותרת הבקשה שנקראת allowcount. עם זאת, מערכת Apigee לא מצליחה לפתור את request.header.allowcount. המצב הזה קורה אם הכותרת allowcount לא מועברת כחלק מבקשת ה-API.

    זו דוגמה לבקשת API שלא כוללת את הכותרת allowcount כחלק מהבקשה:

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    כאשר your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. איך מציינים שינויים בהגדרות

    הסיבה לכך היא שהכותרת allowcount לא מועברת כחלק מהבקשה, ולכן המשתנה request.header.allowcount שמשמש ברכיב <Allow> במדיניות Reset Quota שלמעלה לא מוגדר, ולכן אי אפשר לפתור אותו. לכן תקבלו את תגובת השגיאה:

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

כדי לתקן את הדוגמה שמוצגת למעלה, אפשר לשנות את הבקשה כך שתכלול את הכותרת allowcount כמו שמוצג בהמשך:

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

כאשר your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. איך מציינים שינויים בהגדרות

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> אבל הוא לא זמין בתהליך של ה-proxy ל-API, תוצג השגיאה שלמעלה.

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

אבחון

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

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

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

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

    אז זה הגורם לשגיאה.

    בדוגמה שמוצגת בהמשך, השם של מדיניות המכסה שאליה מתבצעת הפנייה אמור להישלף מכותרת הבקשה שנקראת quotapolicy. עם זאת, Apigee לא יכול לפתור את 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://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    כאשר your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. איך מציינים שינויים בהגדרות

    הסיבה לכך היא שהכותרת quotapolicy לא מועברת כחלק מהבקשה, ולכן ההפניה request.header.quotapolicy שמשמשת ברכיב <Quota> בהגדרה Reset Quota policy שלמעלה לא מוגדרת ולא ניתן לפתור אותה. כתוצאה מכך, מתקבלת תגובת השגיאה:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

רזולוציה

מוודאים שהמאפיין ref שאליו מתייחס הרכיב <Quota> נפתר בזמן הריצה וזמין בתהליך הספציפי שבו מופעלת מדיניות איפוס המכסה.

כדי לתקן את הדוגמה שמוצגת למעלה, אפשר לשנות את הבקשה כך שתכלול את הכותרת quotapolicy כמו שמוצג למטה:

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"

כאשר your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. איך מציינים שינויים בהגדרות