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

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

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

<Quota name="MyQuotaPolicy">

אבחון

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

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. בודקים כל אחת ממדיניות איפוס המכסה ב-API Proxy שבו התרחשה השגיאה. מזהים את מדיניות ההקצאה הספציפית לאיפוס שבה מדיניות ההקצאה שצוינה ברכיב החובה <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. המדיניות קובעת אם מדיניות הקצאה (Quota) נוצרת ומוגדרת באותו שרת 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. המדיניות הזו קובעת אם משתנה ההפניה מוגדר וזמין בתהליך שבו מופעלת מדיניות Reset Quota.

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

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

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

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

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

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

אבחון

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

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

  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> במדיניות Reset 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"