Solución de errores de implementación de políticas de cuotas

Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

InvalidQuotaInterval

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision_number]
Invalid quota interval [interval] in quota policy [policy_name].

Ejemplo de mensaje de error

Error Saving Revision 1
Invalid quota interval 0.1 in quota policy Quota-1.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 1.

Causa

Si el intervalo de cuota especificado en el elemento <Interval> de la política de cuotas no es un número entero, falla la implementación del proxy de API.

Por ejemplo, si el intervalo de cuota especificado es 0.1 en el elemento <Interval> de una política de cuotas, la implementación del proxy de API fallará.

Diagnóstico

  1. Identifica la política de cuotas en la que se produjo el error y el intervalo de cuota no válido. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el nombre de la política es Quota-1 y el intervalo de cuota no válido es 0.1:

    Error Saving Revision 1
    Invalid quota interval 0.1 in quota policy Quota-1.
    
  2. Verifica que el valor del intervalo de cuota especificado en la política de cuotas con errores coincida con el valor identificado en el mensaje de error (paso 1 anterior). Por ejemplo, en la siguiente política, se especifica el valor del intervalo de cuota como 0.1, que coincide con lo que contiene el mensaje de error:

    <Quota async="false" continueOnError="false" enabled="true" name="Quota-1">
     <DisplayName>Quota-1</DisplayName>
     <Properties />
     <Allow count="3" />
     <Interval>0.1</Interval>
     <TimeUnit>minute</TimeUnit>
    </Quota>
    
  3. Si el intervalo de cuota especificado no es un número entero, esa es la causa del error.

    En la política de cuotas de ejemplo que se muestra arriba, el valor del intervalo de cuota es 0.1, que no es un número entero. Por lo tanto, la implementación del proxy de API falla con el siguiente error:

    Invalid quota interval 0.1 in quota policy Quota-1.
    

Solución

Asegúrate de que el valor del intervalo de cuota especificado en el elemento <Interval> de la política de cuotas sea un número entero. Por ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota-1">
    <DisplayName>Quota-1</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>minute</TimeUnit>
</Quota>

InvalidQuotaTimeUnit

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision_number]
Invalid quota interval time unit [time_unit] in quota policy
[policy_name] in Revision [revision_number] of application
[proxy_name], in organization [org_name].

Ejemplo de mensaje de error

Error Saving Revision 1
Invalid quota interval time unit year in quota policy Quota-1 in Revision 1 of application Quota_test, in organization aprabhashankar-eval.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 1.

Causa

Si la unidad de tiempo especificada en el elemento <TimeUnit> de la política de cuotas no es compatible, la implementación del proxy de API fallará.

Las unidades de tiempo admitidas son minute, hour, day, week y month.

Por ejemplo, si la unidad de tiempo se especifica como year en el elemento <TimeUnit> de la política de cuotas, la implementación del proxy de API falla.

Diagnóstico

  1. Identifica la política de cuotas en la que se produjo el error y la unidad de tiempo no válida. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el nombre de la política es Quota-1 y la unidad de tiempo no es year:

    Invalid quota interval time unit year in quota policy Quota-1
    in Revision 1 of application Quota_test, in organization aprabhashankar-eval.
    
  2. Verifica que la unidad de tiempo especificada en el elemento <TimeUnit> de la política de cuotas coincida con la unidad de tiempo identificada en el mensaje de error (paso 1 anterior). Por ejemplo, en la siguiente política, se especifica el valor del intervalo de cuota como year, que coincide con lo que contiene el mensaje de error:

    <Quota async="false" continueOnError="false" enabled="true" name="Quota-1">
     <DisplayName>Quota-1</DisplayName>
     <Properties />
     <Allow count="3" />
     <Interval>1</Interval>
     <TimeUnit>year</TimeUnit>
    </Quota>
    
  3. Si la unidad de tiempo especificada en la política de cuotas no es compatible, esa es la causa del error.

    En la política de cuotas de ejemplo que se muestra arriba, la unidad de tiempo se especifica como year, que no es compatible. Por lo tanto, la implementación del proxy de API falla con el siguiente error:

    Invalid quota interval time unit year in quota policy Quota-1 in Revision 1 of application Quota_test, in organization aprabhashankar-eval.
    

Solución

Asegúrate de que se admita la unidad de tiempo especificada en el elemento <TimeUnit> de la política de cuotas. Por ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota-1">
    <DisplayName>Quota-1</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>month</TimeUnit>
</Quota>

InvalidQuotaType

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision_number]
No enum constant com.apigee.quota.types.QuotaType.[type].

Ejemplo de mensaje de error

Error Saving Revision 1
No enum constant com.apigee.quota.types.QuotaType.window.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 1.

Causa

Si el tipo de cuota especificado por el atributo type en el elemento <Quota> de la política de cuotas no es válido, la implementación del proxy de API falla.

Los tipos de cuota admitidos son default, calendar, flexi y rollingwindow.

Por ejemplo, si el tipo de política especificado como window en el elemento <Quota> de la política de cuotas, la implementación del proxy de API falla.

Diagnóstico

  1. Identifica el tipo de cuota no válido que se usó en la política de cuotas. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el tipo de política no válido es window:

    Error Saving Revision 1
    No enum constant com.apigee.quota.types.QuotaType.window.
    
  2. Examine todas las políticas de cuotas en el proxy de API específico en el que se produjo el error. Si hay una política de cuotas en la que el tipo de cuota especificado en el elemento <Quota> coincide con el tipo no compatible identificado en el paso 1, esa es la causa del error.

    Por ejemplo, en la siguiente política, se especifica el encabezado como window, que coincide con el mensaje de error:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Quota async="false" continueOnError="false" enabled="true" name="Quota-1" type="window">
        <DisplayName>Quota-1</DisplayName>
        <Properties/>
        <Allow count="3"/>
        <Interval>1</Interval>
        <TimeUnit>minute</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
        <MessageWeight ref="messageWeight"/>
    </Quota>
    

    Dado que el atributo de tipo se establece como window, que no es compatible, la implementación del proxy de API falla con el error:

    No enum constant com.apigee.quota.types.QuotaType.window.
    

Solución

Asegúrate de que sea compatible el tipo de cuota especificado por el atributo type en el elemento <Quota> de la política de cuotas. Por ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota-1" type="rollingwindow">
    <DisplayName>Quota-1</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>minute</TimeUnit>
    <StartTime>2017-7-16 12:00:00</StartTime>
    <MessageWeight ref="messageWeight"/>
</Quota>

InvalidStartTime

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision_number]
Invalid Starttime:[start_time]; Start Time should be of the format yyyy-MM-dd HH:mm:ss.

Ejemplo de mensaje de error

Error Saving Revision 1
Invalid Starttime:7-16-2017 12:00:00; Start Time should be of the format yyyy-MM-dd HH:mm:ss.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 1.

Causa

Si el formato del tiempo especificado en el elemento <StartTime> de la política de cuotas no es válido, fallará la implementación del proxy de la API.

El formato válido es yyyy-MM-dd HH:mm:ss, que es el formato de fecha y hora ISO 8601.

Por ejemplo, si la hora especificada en el elemento <StartTime> de la política de cuotas es 7-16-2017 12:00:00, fallará la implementación del proxy de API.

Diagnóstico

  1. Identifica la hora de inicio no válida especificada en la política de cuotas. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, la hora de inicio no válida es 7-16-2017 12:00:00

    Invalid Starttime:7-16-2017 12:00:00; Start Time should be of the format yyyy-MM-dd HH:mm:ss.
    
  2. Examine todas las políticas de cuotas en el proxy de API específico en el que se produjo el error. Si hay una política de cuotas en la que el valor especificado en el elemento <StartTime> coincide con la hora de inicio no válida identificada en el paso 1, esa es la causa del error.

    Por ejemplo, en la siguiente política, se especifica el encabezado como 7-16-2017 12:00:00, que coincide con el mensaje de error:

    <?xml version="1.0" encoding="UTF-8"?>
    <Quota async="false" continueOnError="false" enabled="true" name="Quota-1" type="calendar">
       <DisplayName>Quota-1</DisplayName>
       <Properties />
       <Allow count="3" />
       <Interval>1</Interval>
       <TimeUnit>minute</TimeUnit>
       <StartTime>7-16-2017 12:00:00</StartTime>
    </Quota>
    

    Dado que el valor establecido para <StartTime> se configuró como 7-16-2017 12:00:00, que no es compatible con el formato de fecha y hora requerido, la implementación del proxy de API falla con el error:

    Invalid Starttime:7-16-2017 12:00:00; Start Time should be of the format yyyy-MM-dd HH:mm:ss.
    

Solución

Asegúrate de que el formato de la hora de inicio especificado en el elemento <StartTime> de la política de cuotas sea válido según el formato requerido yyyy-MM-dd HH:mm:ss. Por ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota-1" type="calendar">
    <DisplayName>Quota-1</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>minute</TimeUnit>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>

StartTimeNotSupported

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision_number]
Starttime is not supported for quotatype [quota_type]. Starttime is supported only for calendar based type.

Ejemplo de mensaje de error

Error Saving Revision 1
Starttime is not supported for quotatype flexi. Starttime is supported only for calendar based type.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 1.

Causa

Si el elemento <StartTime> se especifica en una política de cuotas cuyo tipo de cuota no es de tipo de calendario, fallará la implementación del proxy de la API.

El elemento <StartTime> solo es compatible con el tipo de cuota calendar.

Por ejemplo, si el atributo type se establece en flexi o rolling window en el elemento <Quota> de la política de cuotas, la implementación del proxy de API falla.

Diagnóstico

  1. Identifica el tipo de cuota especificado en la política de cuotas con errores. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, la hora de inicio no válida es flexi

    Starttime is not supported for quotatype flexi. Starttime is
    supported only for calendar based type.
    
  2. Examine todas las políticas de cuotas en el proxy de API específico en el que se produjo el error. Si hay una política de cuotas en la que el atributo de tipo especificado coincide con el tipo de cuota identificado en el paso 1 y se especifica el elemento <StartTime>, esa es la causa del error.

    Por ejemplo, la siguiente política especifica el tipo de cuota como flexi, que coincide con lo que contiene el mensaje de error y también especifica el elemento <StartTime>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Quota async="false" continueOnError="false" enabled="true" name="Quota-1" type="flexi">
        <DisplayName>Quota-1</DisplayName>
        <Properties/>
        <Allow count="3"/>
        <Interval>1</Interval>
        <TimeUnit>minute</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    Dado que el elemento <StartTime> se especifica en la política de cuotas cuyo tipo de cuota se especifica como flexi, la implementación del proxy de API falla con el siguiente error:

    Starttime is not supported for quotatype flexi. Starttime is supported only for calendar based type.
    

Solución

Asegúrate de que el elemento <StartTime> no se especifique cuando el tipo de cuota indicado por el atributo type en el elemento <Quota> sea flexi o rolling window. Por ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota-1" type="flexi">
    <DisplayName>Quota-1</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>minute</TimeUnit>
</Quota>

InvalidTimeUnitForDistributedQuota

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision number]
Invalid timeunit second for distributed quota.

Ejemplo de mensaje de error

Error Saving Revision 1
Invalid timeunit second for distributed quota.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 1.

Causa

Si el elemento <Distributed> se configura como true y el elemento <TimeUnit> se configura como second, fallará la implementación del proxy de la API. La unidad de tiempo second no es válida para una cuota distribuida.

Cuando el elemento Distributed se establece en true, la política debe mantener un contador central y sincronizarlo continuamente en todos los procesadores de mensajes. Por lo tanto, sería difícil sincronizar y verificar que la cantidad de solicitudes no supere la cuota especificada en un intervalo de tiempo corto, como segundos. Por este motivo, la unidad de tiempo second se considera no válida para la cuota distribuida.

Diagnóstico

Examine todas las políticas de cuotas en el proxy de API específico en el que se produjo el error. Si hay una política de cuotas con un elemento <TimeUnit> establecido en second y el elemento <Distributed> se establece en true, esa es la causa del error.

Por ejemplo, la siguiente política tiene un elemento <TimeUnit> establecido en second y el elemento <Distributed> se establece en true.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="30"/>
    <Interval>1</Interval>
    <TimeUnit>second</TimeUnit>
    <StartTime>2018-8-05 12:00:00</StartTime>
    <Distributed>true</Distributed>
    <Synchronous>false</Synchronous>
</Quota>

Solución

Asegúrate de que el elemento <TimeUnit> nunca se configure como second cuando el elemento <Distributed> se configure como verdadero. El elemento <TimeUnit> se puede establecer en cualquiera de los otros valores permitidos: minute, hour, day, week, o month. El siguiente es un ejemplo de esto:

<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="30"/>
    <Interval>1</Interval>
    <TimeUnit>hour</TimeUnit>
    <StartTime>2018-8-05 12:00:00</StartTime>
    <Distributed>true</Distributed>
    <Synchronous>false</Synchronous>
</Quota>

InvalidSynchronizeIntervalForAsyncConfiguration

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision number]
SyncIntervalInSeconds should be a value greater than zero.

Ejemplo de mensaje de error

Error Saving Revision 1
SyncIntervalInSeconds should be a value greater than zero.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 1.

Causa

Si el valor especificado para el elemento <SyncIntervalInSeconds> dentro del elemento <AsynchronousConfiguration> en una política de cuota es inferior a cero, fallará la implementación del proxy de la API.

Diagnóstico

Examine todas las políticas de cuotas en el proxy de API específico en el que se produjo el error. Si hay una política de cuotas en la que el elemento <SyncIntervalInSeconds> se establece en un valor inferior a cero, dentro del elemento <AsynchronousConfiguration>, esa es la causa del error.

Por ejemplo, la siguiente política tiene un valor negativo especificado para el elemento <SyncIntervalInSeconds>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota_AsyncConfig" type="calendar">
    <DisplayName>Quota_AsyncConfig</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>minute</TimeUnit>
    <StartTime>2017-7-16 12:00:00</StartTime>
    <Distributed>true</Distributed>
    <Synchronous>false</Synchronous>
    <AsynchronousConfiguration>
        <SyncIntervalInSeconds>-1</SyncIntervalInSeconds>
    </AsynchronousConfiguration>
</Quota>

Solución

Asegúrate de especificar siempre un número entero positivo para el elemento <SyncIntervalInSeconds> dentro del elemento <AsynchronousConfiguration> en una política de cuotas. Por ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota_AsyncConfig" type="calendar">
    <DisplayName>Quota_AsyncConfig</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>minute</TimeUnit>
    <StartTime>2017-7-16 12:00:00</StartTime>
    <Distributed>true</Distributed>
    <Synchronous>false</Synchronous>
    <AsynchronousConfiguration>
        <SyncIntervalInSeconds>5</SyncIntervalInSeconds>
    </AsynchronousConfiguration>
</Quota>

InvalidAsynchronizeConfigurationForSynchronousQuota

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision number]
AsynchronousConfiguration is not valid for synchronous quota.

Ejemplo de mensaje de error

Error Saving Revision 2
AsynchronousConfiguration is not valid for synchronous quota.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 2.

Causa

Si el valor del elemento <Synchronous> se establece en true en una política de cuotas, que también tiene una configuración asíncrona definida con el elemento <AsynchronousConfiguration>, fallará la implementación del proxy de la API.

Diagnóstico

Examine todas las políticas de cuotas en el proxy de API específico en el que se produjo el error. Si hay una política de cuotas en la que el elemento <Synchronous> se configura como true y si también tiene definido un elemento <AsynchronousConfiguration>, esa es la causa del error.

Por ejemplo, la siguiente política tiene un elemento <Synchronous> configurado como true y también un elemento <AsynchronousConfiguration> definido:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota_AsyncConfig" type="calendar">
    <DisplayName>Quota_AsyncConfig</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>minute</TimeUnit>
    <StartTime>2017-7-16 12:00:00</StartTime>
    <Distributed>true</Distributed>
    <Synchronous>true</Synchronous>
    <AsynchronousConfiguration>
     <SyncIntervalInSeconds>1</SyncIntervalInSeconds>
    </AsynchronousConfiguration>
</Quota>

Solución

Asegúrate de que no haya una configuración asíncrona definida con el elemento <AsynchronousConfiguration> si el elemento <Synchronous> se configura como true en una política de cuotas.

El ejemplo anterior se puede corregir si quitas la sección <AsynchronousConfiguration> como se muestra a continuación:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="Quota_AsyncConfig" type="calendar">
    <DisplayName>Quota_AsyncConfig</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <Interval>1</Interval>
    <TimeUnit>minute</TimeUnit>
    <StartTime>2017-7-16 12:00:00</StartTime>
    <Distributed>true</Distributed>
 <Synchronous>true</Synchronous>
</Quota>