回應快取政策部署錯誤

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

InvalidTimeout

錯誤訊息

透過 Edge UI 或 Edge Management API 部署 API Proxy 會失敗,並顯示以下錯誤訊息:

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.

錯誤螢幕截圖

原因

如果 ResponseCache 政策<CacheLookupTimeoutInSeconds> 元素設為負數,API Proxy 部署作業就會失敗。

舉例來說,如果 <CacheLookupTimeoutInSeconds>-1,則 API Proxy 的部署作業就會失敗。

診斷

  1. 找出 ResponseCache 政策中 <CacheLookupTimeoutInSeconds> 元素所使用的無效值。你可以在錯誤訊息中找到這項資訊。舉例來說,在下列錯誤中,<CacheLookupTimeoutInSeconds> 元素所用的無效值為 -1

    CacheLookupTimeoutInSeconds -1 value should be greater than zero.
    
  2. 在發生錯誤的特定 API Proxy 中檢查所有 ResponseCache 政策。可能有一或多項 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> 指定為負整數,就會產生錯誤。

解析度

確認 ResponseCache 政策的 <CacheLookupTimeoutInSeconds> 元素值一律指定為非負整數。

如要修正上述範例 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

錯誤訊息

透過 Edge UI 或 Edge Management API 部署 API Proxy 會失敗,並顯示以下錯誤訊息:

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

錯誤螢幕截圖

原因

如果將 ResponseCache 政策中的 <CacheResource> 元素設為名稱,不在部署 API Proxy 的環境中,就會發生這個錯誤。

診斷

  1. 找出回應快取政策的 <CacheResource> 元素以及發生錯誤的環境中,使用的無效快取。你可以在錯誤訊息中找到這兩項資訊。例如,在下列錯誤中,無效快取的名稱為 itemscache,環境名稱為 prod

    Invalid cache resource reference itemscache in Step definition ItemsResponseCache. Context Revision:2;APIProxy:StoresInventory;Organization:kkalckstein-eval;Environment:prod
    
  2. 在失敗的特定 API Proxy 中檢查所有 ResponseCache 政策 。找出無效快取的特定 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 UI 中,依序前往「API」>環境設定,並檢查快取是否位於特定環境的「Caches」分頁中。如果快取不存在,就是導致錯誤的原因。

    例如,請注意下方螢幕截圖中名為 itemscache 的快取不存在。

    由於 prod 環境中並未定義名為 itemscache 的快取,因此您會收到錯誤訊息:

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

解析度

確認 <CacheResource> 元素中指定的快取名稱已在您要部署 API Proxy 的環境中建立。

如要瞭解如何建立快取,請參閱「建立及編輯環境快取」一文。

ResponseCacheStepAttachmentNotAllowedReq

錯誤訊息

透過 Edge UI 或 Edge Management API 部署 API Proxy 會失敗,並顯示以下錯誤訊息:

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.

錯誤螢幕截圖

原因

在 API Proxy 的任何流程中,如果將相同的 ResponseCache 政策附加至多個要求路徑,就會發生這個錯誤。

舉例來說,如果您在 Proxy 和目標端點的要求 Preflow 中附加了相同的 ResponseCache 政策,就會發生此錯誤。

診斷

  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. 檢查發生錯誤的 API Proxy Proxy 與目標端點中的所有要求流程。如果兩個以上的要求流程中附加了相同的 ResponseCache 政策,就會造成錯誤。

    在以下範例中,與預設 Proxy 端點 PreFlow 的要求路徑和預設的目標端點 PreFlow 都是相同的 ResponseCache 政策 Response-Cache-1

    <?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>
        ...
    

解析度

確保在 API Proxy 的所有流程中,ResponseCache 政策僅附加至一個要求路徑。

如要修正上述範例,請從兩個要求流程的其中之一移除 ResponseCache 政策 Response-Cache-1

ResponseCacheStepAttachmentNotAllowedResp

錯誤訊息

透過 Edge UI 或 Edge Management API 部署 API Proxy 會失敗,並顯示以下錯誤訊息:

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.

錯誤螢幕截圖

原因

如果在任何 API Proxy 流程的多個回應路徑中附加了相同的 ResponseCache 政策,就會發生這個錯誤。

舉例來說,如果您在 Proxy 和目標端點的回應 Preflow 中附加了相同的 ResponseCache 政策,就會發生此錯誤。

診斷

  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. 檢查發生錯誤的 API Proxy Proxy 與目標端點中的所有要求流程。如果兩個以上的回應流程中附加了相同的 ResponseCache 政策,就會造成錯誤。

    在以下範例中,與預設 Proxy 端點 PreFlow 的回應路徑和預設的目標端點 PreFlow 相同,相同的 ResponseCache 政策 Response-Cache-1

    <?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>
        ...
    

解析度

確保在 API Proxy 的所有流程中,只將 ResponseCache 政策附加至一個回應路徑。

如要修正上方範例,請從兩個回應路徑其中之一移除 ResponseCache 政策 Response-Cache-1

InvalidMessagePatternForErrorCode

錯誤訊息

透過 Edge UI 或 Edge Management API 部署 API Proxy 會失敗,並顯示下列錯誤訊息:

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.

錯誤螢幕截圖

原因

如果 ResponseCache 政策中的 <SkipCacheLookup><SkipCachePopulation> 元素包含無效條件,就會發生這個錯誤。

診斷

  1. 檢查 API Proxy 中發生錯誤的所有 ResponseCache 政策,並檢查是否有任何政策的 <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

錯誤訊息

透過 Edge UI 或 Edge Management API 部署 API Proxy 時,系統會顯示以下錯誤訊息,且 API Proxy 的部署狀態會標示為部分部署:

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

錯誤訊息範例

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

原因

如果錯誤訊息提及的特定快取並未在特定的訊息處理器元件中建立,就會發生這個錯誤。

解析度

如果您是 Private Cloud 使用者,請按照下列說明操作:

  1. 列出 API Proxy 部署作業並判斷哪些訊息處理器含有錯誤 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。從 UUID 找出訊息處理者的主機名稱/IP 位址。

  3. 登入特定訊息處理器,並使用下列指令重新啟動:

    apigee-service edge-message-processor restart

如果您是公用雲端使用者,或私有雲的問題仍未解決,請向 Apigee 支援團隊尋求協助。