Uploaded image for project: 'apiman (API Management)'
  1. apiman (API Management)
  2. APIMAN-687

Allow multiple versions of the same plugin policy to be in use simultaneously

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 1.1.9.Final, 1.1.x
    • None
    • None
    • None

    Description

      We currently cache parsed configuration data for policies in the gateway. If two different versions of the same plugin policy are being used at the same time, and if they use the exact same configuration data, then an invalid instance of the config object may be sent to the policy impl. This results in:

      java.lang.ClassCastException: io.apiman.plugins.jsonp_policy.beans.JsonpConfigBean cannot be cast to io.apiman.plugins.jsonp_policy.beans.JsonpConfigBean
      
      	at io.apiman.plugins.jsonp_policy.JsonpPolicy.doApply(JsonpPolicy.java:27)
      
      	at io.apiman.gateway.engine.policies.AbstractMappedPolicy.apply(AbstractMappedPolicy.java:71)
      
      	at io.apiman.gateway.engine.policy.RequestChain.applyPolicy(RequestChain.java:65)
      
      	at io.apiman.gateway.engine.policy.Chain.doApply(Chain.java:148)
      
      	at io.apiman.gateway.engine.impl.ServiceRequestExecutorImpl$2.handle(ServiceRequestExecutorImpl.java:247)
      
      	at io.apiman.gateway.engine.impl.ServiceRequestExecutorImpl$2.handle(ServiceRequestExecutorImpl.java:198)
      
      	at io.apiman.gateway.engine.impl.ServiceRequestExecutorImpl$5.handle(ServiceRequestExecutorImpl.java:392)
      
      	at io.apiman.gateway.engine.impl.ServiceRequestExecutorImpl$5.handle(ServiceRequestExecutorImpl.java:362)
      
      	at io.apiman.gateway.engine.policy.PolicyFactoryImpl.loadPolicy(PolicyFactoryImpl.java:81)
      
      	at io.apiman.gateway.engine.impl.ServiceRequestExecutorImpl.loadPolicies(ServiceRequestExecutorImpl.java:362)
      
      	at io.apiman.gateway.engine.impl.ServiceRequestExecutorImpl.access$1400(ServiceRequestExecutorImpl.java:77)
      
      	at io.apiman.gateway.engine.impl.ServiceRequestExecutorImpl$3.handle(ServiceRequestExecutorImpl.java:270)
      
      	at io.apiman.gateway.engine.impl.ServiceRequestExecutorImpl$3.handle(ServiceRequestExecutorImpl.java:255)
      
      	at io.apiman.gateway.engine.impl.SecureRegistryWrapper$1.handle(SecureRegistryWrapper.java:107)
      
      	at io.apiman.gateway.engine.impl.SecureRegistryWrapper$1.handle(SecureRegistryWrapper.java:97)
      
      	at io.apiman.gateway.engine.es.ESRegistry$10.completed(ESRegistry.java:413)
      
      	at io.apiman.gateway.engine.es.ESRegistry$10.completed(ESRegistry.java:407)
      

      The solution is to ensure that caching of config data takes into account the policy as well as the policy config data as the key into the cache.

      Attachments

        Activity

          People

            ewittman@redhat.com Eric Wittmann
            ewittman@redhat.com Eric Wittmann
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: