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

אתם צופים במסמכי התיעוד של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

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

<Quota name="MyQuotaPolicy">

אבחון

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

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

אבחון

  1. לבדוק כל אחד מכללי המדיניות לאיפוס מכסה בשרת ה-proxy ל-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"