Solución de problemas de errores en la implementación de la política de caché de respuesta

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

InvalidTimeout

Mensaje de error

La implementación del proxy de API a través de la IU de Edge o de la API de Edge Management falla y muestra el siguiente mensaje de error:

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

Ejemplo de mensaje de error

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

Captura de pantalla de error de ejemplo

Causa

Si el elemento <CacheLookupTimeoutInSeconds> de una política ResponseCache está configurado como un número negativo, la implementación del proxy de API falla.

Por ejemplo, si el elemento <CacheLookupTimeoutInSeconds> es -1, la implementación del proxy de API falla.

Diagnóstico

  1. Identifica el valor no válido que se usa para el elemento <CacheLookupTimeoutInSeconds> en la política de ResponseCache. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el valor no válido que se usa para el elemento <CacheLookupTimeoutInSeconds> es -1:

    CacheLookupTimeoutInSeconds -1 value should be greater than zero.
    
  2. Examina todas las políticas de en el proxy de API específico en el que se produjo el error. Podría haber una o más políticas de cuotas en las que se especifica el elemento <CacheLookupTimeoutInSeconds>.

    Por ejemplo, la siguiente configuración de política establece <CacheLookupTimeoutInSeconds> en -1, que coincide con el contenido del mensaje de error:

    <?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. Si se especifica <CacheLookupTimeoutInSeconds> como un número entero negativo, esa es la causa del error.

Solución

Asegúrese de que el valor del elemento <CacheLookupTimeoutInSeconds> de la política ResponseCache siempre se especifique como un número entero no negativo.

Para corregir la política de ResponseCache de ejemplo que se muestra arriba, puedes modificar <CacheLookupTimeoutInSeconds> element a 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

Mensaje de error

La implementación del proxy de API a través de la IU de Edge o de la API de Edge Management falla y muestra el siguiente mensaje de error:

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

Ejemplo de mensaje de error

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

Captura de pantalla de error de ejemplo

Causa

Este error se genera si el elemento <CacheResource> en la política ResponseCache se configura como un nombre que no existe en el entorno en el que se implementa el proxy de API.

Diagnóstico

  1. Identifica el almacenamiento en caché no válido que se usó en el elemento <CacheResource> de la política de Response Cache de respuesta y el entorno en el que se produjo el error. Puedes encontrar ambos elementos en el mensaje de error. Por ejemplo, en el siguiente error, el nombre de la caché no válida es itemscache y el nombre del entorno es prod.

    Invalid cache resource reference itemscache in Step definition ItemsResponseCache. Context Revision:2;APIProxy:StoresInventory;Organization:kkalckstein-eval;Environment:prod
    
  2. Examina todas las políticas de ResponseCache en el proxy de API específico en el que se produjo el error. Identifica la política específica de ResponseCache en la que la caché no válida (identificada en el paso 1) se especifica en el elemento <CacheResource>.

    Por ejemplo, la siguiente política especifica el valor de <CacheResource> como itemscache, que coincide con el contenido del mensaje de error:

    <?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. Verifica si la caché (determinada en el paso 2) se definió en el entorno específico (identificado en el paso 1).

    En la IU de Edge, ve a APIs > Configuración del entorno y comprueba si la caché existe en la pestaña Cachés del entorno específico. Si la caché no existe, esa es la causa del error.

    Por ejemplo, observa en la captura de pantalla a continuación que la caché llamada itemscache no existe.

    Debido a que la caché llamada itemscache no está definida en el entorno prod, aparecerá el siguiente error:

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

Solución

Asegúrate de que el nombre de caché especificado en el elemento <CacheResource> se haya creado en el entorno en el que quieres implementar el proxy de API.

Consulta Crea y edita una caché de entorno para obtener información acerca de cómo crear la caché.

ResponseCacheStepAttachmentNotAllowedReq

Mensaje de error

La implementación del proxy de API a través de la IU de Edge o de la API de Edge Management falla y muestra el siguiente mensaje de error:

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.

Ejemplo de mensaje de error

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

Captura de pantalla de error de ejemplo

Causa

Este error se produce si la misma política de ResponseCache se vincula con varias rutas de solicitud dentro de cualquier flujo de un proxy de API.

Por ejemplo, si tienes la misma política ResponseCache adjunta en el PreFlow de solicitud del proxy y del extremo de destino, se produce este error.

Diagnóstico

  1. Identifica el nombre de la política ResponseCache que se adjunta más de una vez. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el nombre de la política ResponseCache es 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. Examina todos los flujos de solicitud en el proxy y en los extremos de destino del proxy de API en el que se produjo el error. Si la misma política de ResponseCache se adjunta en dos o más flujos de solicitud, esa es la causa del error.

    En el siguiente ejemplo, se configura la misma política Response-Cache-1 de ResponseCache en la ruta de la solicitud de PreFlow del extremo del proxy predeterminado y el PreFlow de destino predeterminado:

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

Solución

Asegúrate de que una política de ResponseCache se adjunte solo a una ruta de solicitud en todos los flujos del proxy de API.

Para corregir el ejemplo anterior, quita la política de ResponseCache Response-Cache-1 de uno de los dos flujos de solicitud.

ResponseCacheStepAttachmentNotAllowedResp

Mensaje de error

La implementación del proxy de API a través de la IU de Edge o de la API de Edge Management falla y muestra el siguiente mensaje de error:

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.

Ejemplo de mensaje de error

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

Captura de pantalla de error de ejemplo

Causa

Este error se produce si la misma política ResponseCache se adjunta a varias rutas de respuesta dentro de cualquier flujo de un proxy de API.

Por ejemplo, si tienes la misma política ResponseCache adjunta en el Preflow del proxy y de los extremos de destino, se produce este error.

Diagnóstico

  1. Identifica el nombre de la política ResponseCache que se adjunta más de una vez. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el nombre de la política ResponseCache es 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. Examina todos los flujos de solicitud en el proxy y en los extremos de destino del proxy de API en el que se produjo el error. Si la misma política de ResponseCache se adjunta en dos o más flujos de respuesta, esa es la causa del error.

    En el siguiente ejemplo, se configura la misma política Response-Cache-1 de ResponseCache en la ruta de respuesta del extremo del proxy predeterminado PreFlow y el flujo de destino predeterminado 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>
        ...
    

Solución

Asegúrate de que una política de ResponseCache se adjunte solo a una ruta de respuesta en todos los flujos del proxy de API.

Para corregir el ejemplo anterior, quita la política Response-Cache-1 de ResponseCache de una de las dos rutas de respuesta.

InvalidMessagePatternForErrorCode

Mensaje de error

La implementación del proxy de API a través de la IU de Edge o de la API de Edge Management falla y muestra alguno de los siguientes mensajes de error:

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

O

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

Ejemplo de mensaje de error

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

O

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

Captura de pantalla de error de ejemplo

O

Causa

Este error ocurre si el elemento <SkipCacheLookup> o <SkipCachePopulation> en una política ResponseCache contiene una condición no válida.

Diagnóstico

  1. Examina todas las políticas de ResponseCache en el proxy de API en las que se generó el error y verifica si hay políticas cuyas condiciones especificadas para <SkipCacheLookup> o los elementos <SkipCachePopulation>.

  2. Verifica si la condición especificada para el elemento <SkipCacheLookup> o el elemento <SkipCachePopulation> no es válida. Si es así, esa es la causa del error.

    En el siguiente ejemplo, el elemento <SkipCachePopulation> usa el operador de JavaScript === para verificar el mismo valor y tipo de identificación no válido.

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

    Debido a que el operador === no es válido, verás el error siguiente:

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

Solución

Asegúrate de que la condición especificada para los elementos <SkipCacheLookup> o <SkipCachePopulation> siempre sea válida.

Si quieres corregir la política de ResponseCache de ejemplo anterior, puedes modificar <SkipCacheLookup> para usar el operador =:

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

Mensaje de error

La implementación del proxy de API a través de la IU de Edge o de la API de administración de Edge genera un mensaje de error como este, y el estado de implementación del proxy de API se marca como implementado de forma parcial:

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

Ejemplo de mensaje de error

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

Causa

Este error se genera si la caché específica que se menciona en el mensaje de error no se creó en un componente específico del procesador de mensajes.

Solución

Si eres usuario de la Nube privada, sigue estas instrucciones:

  1. Enumera las implementaciones del proxy de API y determina qué Message Processor tienen el error steps.cache.CacheNotFound.

    Resultado de muestra:

    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. Observa los UUID del Message Processor en el que se observa el error steps.cache.CacheNotFound. Identifica el nombre de host o la dirección IP del Message Processor del UUID.

  3. Accede al Message Processor específico y reinícialo con el siguiente comando:

    apigee-service edge-message-processor restart

Si eres usuario de la nube pública o si el problema persiste, comunícate con el equipo de asistencia de Apigee para obtener ayuda.