回應快取政策部署錯誤

您正在查看 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 政策。找出在 <CacheResource> 元素中指定無效快取 (已在步驟 #1 中找出) 的特定 ResponseCache 政策。

    例如,下列政策將 <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 中定義)。

    在 Edge UI 中依序前往「API」>「Environment Configuration」,然後檢查快取是否存在於特定環境的「快取」分頁中。如果快取不存在,則可能是錯誤原因。

    例如,請注意在下方螢幕截圖中,名為 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
    

解析度

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

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

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 和目標端點中的所有要求流程。如果兩個以上的要求流程中附加了相同的 ResponseCache 政策,就會導致發生錯誤。

    在以下範例中,相同的 ResponseCache 政策 Response-Cache-1 是在預設 Proxy 端點 PreFlow 的要求路徑,以及預設目標端點 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 政策僅附加至 API Proxy 所有流程中的一個要求路徑。

如要修正上方顯示的範例,請從兩個要求流程之一中移除 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 和目標端點的回應預先流中都附加了相同的 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 和目標端點中的所有要求流程。如果兩個以上的回應流程中附加了相同的 ResponseCache 政策,就會導致發生錯誤。

    在以下範例中,相同的 ResponseCache 政策 Response-Cache-1 是在預設 Proxy 端點 PreFlow 和預設目標端點 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 Proxy 所有流程中的一個回應路徑。

如要修正上述示例,請移除其中一個回應路徑中的 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. 請注意出現 steps.cache.CacheNotFound 錯誤的訊息處理器的 UUID。從 UUID 辨識郵件處理器的主機名稱/IP 位址。

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

    apigee-service edge-message-processor restart

如果您是公用雲端使用者,或私有雲的問題持續發生,請向 Apigee 支援團隊尋求協助。