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

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

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. בודקים כל אחת מהמדיניות של איפוס המכסות בשרת ה-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"