פתרון בעיות של שגיאת פריסה של מדיניות מטמון תגובה

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

InvalidTimeout

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision revision_number
CacheLookupTimeoutInSeconds value value should be greater than zero.

הודעת שגיאה לדוגמה

Error Saving Revision 2
CacheLookupTimeoutInSeconds -1 value should be greater than zero.

צילום מסך של שגיאה לדוגמה

סיבה

אם הרכיב <CacheLookupTimeoutInSeconds> במדיניות ResponseCache מוגדר כמספר שלילי, הפריסה של שרת ה-proxy ל-API תיכשל.

לדוגמה, אם הערך של <CacheLookupTimeoutInSeconds> הוא -1, הפריסה של שרת ה-proxy ל-API תיכשל.

אבחון

  1. צריך לזהות את הערך הלא חוקי שנעשה בו שימוש לרכיב <CacheLookupTimeoutInSeconds> במדיניות ResponseCache. המידע הזה מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה, הערך הלא חוקי שמשמש לרכיב <CacheLookupTimeoutInSeconds> הוא -1:

    CacheLookupTimeoutInSeconds -1 value should be greater than zero.
    
  2. לבדוק את כל כללי המדיניות של ResponseCache בשרת ה-Proxy הספציפי ל-API שבו התרחש הכשל. יכול להיות שיש מדיניות אחת או יותר של ResponseCache שבה צוין הרכיב <CacheLookupTimeoutInSeconds>.

    לדוגמה, הגדרת המדיניות הבאה מגדירה את <CacheLookupTimeoutInSeconds> ל--1, שתואם למה שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
        <DisplayName>Response Cache-1</DisplayName>
        <Properties/>
        <CacheKey>
            <Prefix/>
            <KeyFragment ref="request.uri" type="string"/>
        </CacheKey>
        <Scope>Exclusive</Scope>
        <ExpirySettings>
            <ExpiryDate/>
            <TimeOfDay/>
            <TimeoutInSec ref="">3600</TimeoutInSec>
        </ExpirySettings>
        <CacheLookupTimeoutInSeconds>-1</CacheLookupTimeoutInSeconds>
    </ResponseCache>
    
  3. אם ה-<CacheLookupTimeoutInSeconds> מצוין כמספר שלם שלילי, זו הסיבה לשגיאה.

רזולוציה

יש לוודא שהערך של הרכיב <CacheLookupTimeoutInSeconds> של מדיניות ResponseCache מצוין תמיד כמספר שלם שאינו שלילי.

כדי לתקן את המדיניות לדוגמה של ResponseCache שמוצגת למעלה, אפשר לשנות את <CacheLookupTimeoutInSeconds> element ל-30.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
    <DisplayName>Response Cache-1</DisplayName>
    <Properties/>
    <CacheKey>
        <Prefix/>
        <KeyFragment ref="request.uri" type="string"/>
    </CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <ExpiryDate/>
        <TimeOfDay/>
        <TimeoutInSec ref="">3600</TimeoutInSec>
    </ExpirySettings>
    <CacheLookupTimeoutInSeconds>30</CacheLookupTimeoutInSeconds>
</ResponseCache>

InvalidCacheResourceReference

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Deploying Revision revision_number to environment
Invalid cache resource reference cache_resource in Step definition response_cache_policy_name. Context Revision:revision_number;APIProxy:ResponseCache;Organization:organization;Environment:environment

הודעת שגיאה לדוגמה

Error Deploying Revision 2 to prod
Invalid cache resource reference itemscache in Step definition ItemsResponseCache. Context Revision:2;APIProxy:StoresInventory;Organization:kkalckstein-eval;Environment:prod

צילום מסך של שגיאה לדוגמה

סיבה

השגיאה הזו מתקבלת אם הרכיב <CacheResource> במדיניות ResponseCache מוגדר לשם שאינו קיים בסביבה שבה נפרס שרת ה-proxy ל-API.

אבחון

  1. צריך לזהות את המטמון הלא חוקי שנעשה בו שימוש ברכיב <CacheResource> של המדיניות 'מטמון תגובה' ואת הסביבה שבה אירעה השגיאה. שני הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה, השם של המטמון הלא חוקי הוא itemscache ושם הסביבה הוא prod.

    Invalid cache resource reference itemscache in Step definition ItemsResponseCache. Context Revision:2;APIProxy:StoresInventory;Organization:kkalckstein-eval;Environment:prod
    
  2. לבדוק את כל כללי המדיניות של ResponseCache בשרת ה-Proxy הספציפי ל-API שבו נכשלה הבעיה התרחשה. זיהוי המדיניות הספציפית של ResponseCache שבה המטמון הלא חוקי (זוהה בשלב 1) ברכיב <CacheResource>.

    לדוגמה, המדיניות הבאה מציינת את הערך של <CacheResource> בתור itemscache, שתואם למה שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="ItemsResponseCache">
      <DisplayName>ItemsResponseCache</DisplayName>
      <Properties/>
      <CacheKey>
          <Prefix/>
          <KeyFragment ref="request.uri" type="string"/>
      </CacheKey>
      <CacheResource>itemscache</CacheResource>
      <Scope>Exclusive</Scope>
      <ExpirySettings>
          <ExpiryDate/>
          <TimeOfDay/>
          <TimeoutInSec ref="">3600</TimeoutInSec>
      </ExpirySettings>
      <SkipCacheLookup/>
      <SkipCachePopulation/>
    </ResponseCache>
    
  3. בודקים אם המטמון (שנקבע בשלב 2) הוגדר בסביבה הספציפית (זוהתה בשלב 1).

    בממשק המשתמש של Edge, עוברים אל APIs > Environment Configuration (הגדרת סביבה) ובודקים אם המטמון קיים בכרטיסייה Caches (מטמון) בסביבה הספציפית. אם המטמון לא קיים, זו הסיבה לשגיאה.

    לדוגמה, אפשר לראות בצילום המסך שלמטה שהמטמון בשם itemscache לא קיים.

    בגלל שהמטמון בשם itemscache לא מוגדר בסביבת prod, תקבלו את השגיאה:

    Invalid cache resource reference does_not_exist in Step definition Response-Cache-1. Context Revision:2;APIProxy:ResponseCache;Organization:kkalckstein-eval;Environment:prod
    

רזולוציה

יש לוודא ששם המטמון שצוין ברכיב <CacheResource> נוצר בסביבה שבה רוצים לפרוס את שרת ה-proxy ל-API.

עיינו במאמר יצירה ועריכה של מטמון של סביבה למידע על יצירת המטמון.

ResponseCacheStepAttachmentNotAllowedReq

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Deploying Revision revision_number to environment
Response cache step definition response_cache_policy_name can not be attached more than once in the request path.

הודעת שגיאה לדוגמה

Error Deploying Revision 2 to test
Response cache step definition Response-Cache-1 can not be attached more than once in the request path.

צילום מסך של שגיאה לדוגמה

סיבה

שגיאה זו מתרחשת אם אותה מדיניותResponseCache מצורפת למספר נתיבי בקשות בתוך תהליכים כלשהם של שרת proxy ל-API.

לדוגמה, אם מצורפת אותה מדיניות ResponseCache בבקשה מראש (preflow) גם בשרת ה-Proxy וגם בנקודת הקצה (endpoints) של היעד, השגיאה הזו תתרחש.

אבחון

  1. מזהים את השם של מדיניות ResponseCache שמצורפת יותר מפעם אחת. המידע הזה מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה, השם של מדיניות ResponseCache הוא Response-Cache‐1.

    Error Deploying Revision 2 to test
    Response cache step definition Response-Cache-1 can not be attached more than once in the request path.
    
  2. לבדוק את כל זרמי הבקשות בשרת ה-Proxy ובנקודות הקצה (endpoints) של ה-API ל-API שבו אירעה השגיאה. אם אותה מדיניות ResponseCache מצורפת בשתי תהליכי בקשה או יותר, זו הסיבה לשגיאה.

    בדוגמה הבאה אותה מדיניות ResponseCache Response-Cache-1 מוגדרת בנתיב הבקשה של PreFlow ברירת המחדל של נקודת הקצה של שרת proxy, וב-PreFlow של נקודת הקצה המוגדרת כברירת מחדל:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ProxyEndpoint name="default">
        <Description/>
        <FaultRules/>
        <PreFlow name="PreFlow">
            <Request>
                <Step>
                    <Name>Response-Cache-1</Name>
                </Step>
            </Request>
        ...
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TargetEndpoint name="default">
        <Description/>
        <FaultRules/>
        <PreFlow name="PreFlow">
            <Request/>
            <Response/>
        </PreFlow>
        <PostFlow name="PostFlow">
            <Request>
                <Step>
                    <Name>Response-Cache-1</Name>
                </Step>
            </Request>
        ...
    

רזולוציה

מוודאים שמדיניות ResponseCache מצורפת לנתיב בקשה אחד בלבד בכל התהליכים בשרת proxy ל-API.

כדי לתקן את הדוגמה שלמעלה, צריך להסיר את המדיניות ResponseCache Response-Cache-1 מאחד מתהליכי הבקשות.

ResponseCacheStepAttachmentNotAllowedResp

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Deploying Revision revision_number to environment
Response cache step definition response_cache_policy_name can not be attached more than once in the response path.

הודעת שגיאה לדוגמה

Error Deploying Revision 2 to test
Response cache step definition Response-Cache-1 can not be attached more than once in the response path.

צילום מסך של שגיאה לדוגמה

סיבה

שגיאה זו מתרחשת אם אותה מדיניותResponseCache מצורפת למספר נתיבי תגובה בתוך תהליכים כלשהם של שרת proxy ל-API.

לדוגמה, אם מצורפת אותה מדיניות ResponseCache גם בתגובת ה-Preflow של שרת ה-Proxy וגם בנקודת הקצה (endpoints) של היעד, השגיאה הזו תתרחש.

אבחון

  1. מזהים את השם של מדיניות ResponseCache שמצורפת יותר מפעם אחת. המידע הזה מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות ResponseCache הוא Response-Cache-1.

    Error Deploying Revision 2 to test
    Response cache step definition Response-Cache-1 can not be attached more than once in the response path.
    
  2. לבדוק את כל זרמי הבקשות בשרת ה-Proxy ובנקודות הקצה (endpoints) של ה-API ל-API שבו אירעה השגיאה. אם אותה מדיניות ResponseCache מצורפת בשתי תהליכי תגובה או יותר, זו הסיבה לשגיאה.

    בדוגמה הבאה אותה מדיניות ResponseCache Response-Cache-1 מוגדרת בנתיב התגובה של PreFlow ברירת המחדל של נקודת הקצה של שרת proxy, וב-PreFlow של נקודת הקצה המוגדרת כברירת מחדל:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ProxyEndpoint name="default">
        <Description/>
        <FaultRules/>
        <PreFlow name="PreFlow">
            <Request>
                <Step>
                    <Name>Response-Cache</Name>
                </Step>
            </Request>
            <Response>
                <Step>
                    <Name>Response-Cache-1</Name>
                </Step>
            </Response>
        </PreFlow>
        ...
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TargetEndpoint name="default">
        <Description/>
        <FaultRules/>
        <PreFlow name="PreFlow">
            <Request/>
            <Response/>
        </PreFlow>
        <PostFlow name="PostFlow">
            <Request/>
            <Response>
                <Step>
                    <Name>Response-Cache-1</Name>
                </Step>
            </Response>
        </PostFlow>
        ...
    

רזולוציה

מוודאים שמדיניות ResponseCache מצורפת לנתיב תגובה אחד בלבד בכל התהליכים בשרת ה-API ל-API.

כדי לתקן את הדוגמה שלמעלה, צריך להסיר את מדיניות ResponseCache Response-Cache-1 מאחד משני נתיבי התשובה.

InvalidMessagePatternForErrorCode

הודעת שגיאה

הפריסה של שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge Management API נכשלה בעקבות אחת מהודעות השגיאה הבאות:

Error Deploying Revision revision_number to environment
Invalid message pattern found for error code steps.cache.InvalidSkipCacheLookUpCondition.

או

Error Deploying Revision revision_number to environment
Invalid message pattern found for error code steps.cache.InvalidSkipCachePopulationCondition.

הודעת שגיאה לדוגמה

Error Deploying Revision 2 to prod
Invalid message pattern found for error code steps.cache.InvalidSkipCacheLookUpCondition.

או

Error Deploying Revision 2 to prod
Invalid message pattern found for error code steps.cache.InvalidSkipCachePopulationCondition.

צילום מסך של שגיאה לדוגמה

או

סיבה

השגיאה הזו מתקבלת אם הרכיב <SkipCacheLookup> או <SkipCachePopulation> במדיניות ResponseCache מכיל תנאי לא חוקי.

אבחון

  1. צריך לבדוק את כל כללי המדיניות של ResponseCache בשרת ה-proxy ל-API שבו אירעה השגיאה, ולבדוק אם יש כללי מדיניות הכוללים תנאים עבור <SkipCacheLookup> ו/או עבור הרכיבים <SkipCachePopulation>.

  2. צריך לבדוק אם התנאי שצוין לרכיב <SkipCacheLookup> או לרכיב <SkipCachePopulation> לא תקין. אם כן, זו הסיבה לשגיאה.

    בדוגמה הבאה, הרכיב <SkipCachePopulation> משתמש באופרטור JavaScript === כדי לבדוק ערך שווה וסוג שווה לא חוקי.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
        <DisplayName>Response Cache-1</DisplayName>
        <Properties/>
        <CacheKey>
            <Prefix/>
            <KeyFragment ref="request.uri" type="string"/>
        </CacheKey>
        <Scope>Exclusive</Scope>
        <ExpirySettings>
            <ExpiryDate/>
            <TimeOfDay/>
            <TimeoutInSec ref="">3600</TimeoutInSec>
        </ExpirySettings>
        <CacheLookupTimeoutInSeconds>2</CacheLookupTimeoutInSeconds>
        <SkipCacheLookup>request.header.bypass-cache === "true"</SkipCacheLookup>
    </ResponseCache>
    

    האופרטור === לא חוקי, ולכן תקבלו את השגיאה:

    Invalid message pattern found for error code steps.cache.InvalidSkipCacheLookUpCondition.
    

רזולוציה

חשוב לוודא שהתנאי שצוין לרכיבים <SkipCacheLookup> או <SkipCachePopulation> תמיד תקף.

כדי לתקן את המדיניות לדוגמה שלResponseCache שמוצגת למעלה, אפשר לשנות את <SkipCacheLookup> כך שישתמש באופרטור =:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
    <DisplayName>Response Cache-1</DisplayName>
    <Properties/>
    <CacheKey>
        <Prefix/>
        <KeyFragment ref="request.uri" type="string"/>
    </CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <ExpiryDate/>
        <TimeOfDay/>
        <TimeoutInSec ref="">3600</TimeoutInSec>
    </ExpirySettings>
    <CacheLookupTimeoutInSeconds>2</CacheLookupTimeoutInSeconds>
    <SkipCacheLookup>request.header.bypass-cache = "true"</SkipCacheLookup>
</ResponseCache>

CacheNotFound

הודעת שגיאה

במהלך פריסה של שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge Management API מוצגת הודעת שגיאה כזו, וסטטוס הפריסה של ה-proxy ל-API מסומן כפרוסה באופן חלקי:

Error: Cache : cache_resource, not found in organization : organization__environment.

הודעת שגיאה לדוגמה

Error Cache : Response-Cache-1, not found in organization : kkalckstein-eval__prod

סיבה

השגיאה הזו מתקבלת אם המטמון הספציפי שצוין בהודעת השגיאה לא נוצר ברכיב ספציפי של מעבד הודעות.

רזולוציה

אם אתם משתמשים בענן פרטי, עליכם לפעול לפי ההוראות הבאות:

  1. מציגים את רשימת פריסות ה-proxy ל-API וקובעים באילו מעבדי הודעות מופיעה השגיאה steps.cache.CacheNotFound.

    פלט לדוגמה

    curl -u $USERID:$USERPASSWORD http://<management-server-host>:8080/v1/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/<revision-number>/deployments
    {
      "aPIProxy" : "ResponseCache",
      "environment" : [ {
        "configuration" : {
          "basePath" : "/",
          "configVersion" : "SHA-512:45d3f39783414d3859bf2dec4135d8f5f9960ee6b2d361db2799c82693a8e3f8b95dbbb37c547eb3c0a3819d8ca51727f390502bcaefdf1f113263521a9023b6",
          "steps" : [ ]
        },
        "name" : "prod",
        "server" : [ {
          "pod" : {
            "name" : "pod1",
            "region" : "us-central1"
          },
          "status" : "deployed",
          "type" : [ "message-processor" ],
          "uUID" : "f2e5e34a-5630-43a9-8fef-48a5b9da76d1"
        }, {
          "pod" : {
            "name" : "pod1",
            "region" : "us-central1"
          },
          "status" : "deployed",
          "type" : [ "message-processor" ],
          "uUID" : "879a6538-a5e0-4503-b142-9cb2b4e0623d"
        }, {
        "error" : "Cache : Response-Cache-1, not found in organization : kkalckstein-eval__prod",
        "errorCode" : "steps.cache.CacheNotFound",
        "status" : "error",
        "type" : [ "message-processor" ],
         "uUID" : "a8f9ce0b-c32d-48a9-b26c-9c75d8bf467d"
    },
    ...
        "state" : "deployed"
      } ],
      "name" : "2",
      "organization" : "kkalckstein-eval"
    
  2. שימו לב למזהי UUID של מעבד ההודעות שבהם מופיעה השגיאה steps.cache.CacheNotFound. מזהים את שם המארח/כתובת ה-IP של מעבד ההודעות מה-UUID.

  3. מתחברים למעבד ההודעות הספציפי ומפעילים אותו מחדש באמצעות הפקודה הבאה:

    apigee-service edge-message-processor restart

אם אתם משתמשים בענן ציבורי או אם הבעיה נמשכת בענן פרטי, אתם יכולים לפנות לתמיכה של Apigee לקבלת עזרה.