Uploaded image for project: 'controller'
  1. controller
  2. CONTROLLER-541

Malformed update-lsp RPC leads to 500 Internal Server Error.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • None
    • Helium
    • restconf
    • None
    • Operating System: All
      Platform: All

    • 1144

      This may be bug of BGPCEP plugin, but I guess RPC input data validation is a job for restconf component.

      Bug was encountered when using ODL configured to use draft-ietf-pce-stateful-pce-02 extension to PCEP in environment with capable PCCs, I do not know how to replicate bug without them.

      As a preparation, add-lsp has to be called, here is example curl number 1:
      curl -X POST -H "Content-Type:application/yang.data+json" -d '{"input":{"node":"pcc://39.39.39.39","name":"my_name","network-topology-ref":"/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]","arguments":{"endpoints-obj":{"ipv4":

      {"source-ipv4-address":"39.39.39.39","destination-ipv4-address":"43.43.43.43"}

      }}}}' 127.0.0.1:8080/restconf/operations/network-topology-pcep:add-lsp

      Critical step happens when calling update-lsp without "operational" filed, which is required because of bgpcep/pcep/ietf-stateful02/src/main/yang/odl-pcep-ietf-stateful02.yang lines 246-250. Example (verbose) curl number 2:
      curl -v -X POST -H "Content-Type:application/yang.data+json" -d '{"input":{"node":"pcc://39.39.39.39","name":"my_name","network-topology-ref":"/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]","arguments":{"ero":[{"subobject":{"loose":false,"ip-prefix":

      {"ip-prefix":"195.20.160.40/32"}

      }},{"subobject":{"loose":false,"ip-prefix":

      {"ip-prefix":"201.20.160.43/32"}

      }},{"subobject":{"loose":false,"ip-prefix":

      {"ip-prefix":"43.43.43.43/32"}

      }}]}}}' 127.0.0.1:8080/restconf/operations/network-topology-pcep:update-lsp

      This call produces no lines in opendaylight.log (default logback.xml except org.opendaylight.bgpcep set to TRACE), but curl prints message with long stack trace (included at the end of this description).

      For comparison, here is correct form of intended update-lsp, as example curl number 3:
      curl -X POST -H "Content-Type:application/yang.data+json" -d '{"input":{"node":"pcc://39.39.39.39","name":"my_name","network-topology-ref":"/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]","arguments":{"operational":true,"ero":[{"subobject":{"loose":false,"ip-prefix":

      {"ip-prefix":"195.20.160.40/32"}

      }},{"subobject":{"loose":false,"ip-prefix":

      {"ip-prefix":"201.20.160.43/32"}

      }},{"subobject":{"loose":false,"ip-prefix":

      {"ip-prefix":"43.43.43.43/32"}

      }}]}}}' 127.0.0.1:8080/restconf/operations/network-topology-pcep:update-lsp

      And to get back to initial state (before curl number 1) it seem to be sufficient to just call remove-lsp, using example curl number 0:
      curl -X POST -H "Content-Type:application/yang.data+json" -d '{"input":{"node":"pcc://39.39.39.39","name":"my_name","network-topology-ref":"/network-topology:network-topology/network-topology:topology[network-topology:topology-id=\"pcep-topology\"]"}}' 127.0.0.1:8080/restconf/operations/network-topology-pcep:remove-lsp

      What is wrong? Error code 500 and exception. For differently malformed RPCs I have seen error code 400 with helpful message, so I expected the same here.

      Finally, here is the response of curl number 2:

      • About to connect() to 127.0.0.1 port 8080 (#0)
      • Trying 127.0.0.1...
      • connected
      • Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
        > POST /restconf/operations/network-topology-pcep:update-lsp HTTP/1.1
        > User-Agent: curl/7.27.0
        > Host: 127.0.0.1:8080
        > Accept: /
        > Content-Type:application/yang.data+json
        > Content-Length: 434
        >
      • upload completely sent off: 434 out of 434 bytes
        < HTTP/1.1 500 Internal Server Error
        < Server: Apache-Coyote/1.1
        < Content-Type: /
        < Transfer-Encoding: chunked
        < Date: Thu, 05 Jun 2014 15:52:10 GMT
        < Connection: close
        <
        <?xml version="1.0" encoding="UTF-8" standalone="no"?>
        <errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
        <error>
        <error-type>application</error-type>
        <error-tag>operation-failed</error-tag>
        <error-message>The operation encountered an unexpected error while executing.</error-message>
        <error-info>org.opendaylight.controller.sal.restconf.impl.RestconfDocumentedException: errors: [error-type: application, error-tag: operation-failed, error-message: The operation encountered an unexpected error while executing.error-info: java.lang.NullPointerException
        at org.opendaylight.bgpcep.pcep.topology.provider.Stateful02TopologySessionListener.updateLsp(Stateful02TopologySessionListener.java:224)
        at org.opendaylight.bgpcep.pcep.topology.provider.ServerSessionManager.updateLsp(ServerSessionManager.java:150)
        at org.opendaylight.bgpcep.pcep.topology.provider.TopologyRPCs.updateLsp(TopologyRPCs.java:62)
        at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.NetworkTopologyPcepService$$Broker$Router.updateLsp(NetworkTopologyPcepService$$Broker$Router.java)
        at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.NetworkTopologyPcepService$$Broker$DirectProxy.updateLsp(NetworkTopologyPcepService$$Broker$DirectProxy.java)
        at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.opendaylight.controller.sal.binding.impl.connect.dom.RpcInvocationStrategy.uncheckedInvoke(RpcInvocationStrategy.java:131)
        at org.opendaylight.controller.sal.binding.impl.connect.dom.RpcInvocationStrategy.invokeOn(RpcInvocationStrategy.java:157)
        at org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentConnector$DomToBindingRpcForwarder.invokeRpc(BindingIndependentConnector.java:711)
        at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker$RoutedRpcSelector.invokeRpc(SchemaAwareRpcBroker.java:346)
        at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker.invokeRpc(SchemaAwareRpcBroker.java:168)
        at org.opendaylight.controller.sal.dom.broker.BrokerImpl.invokeRpcAsync(BrokerImpl.java:75)
        at org.opendaylight.controller.sal.dom.broker.ConsumerContextImpl.rpc(ConsumerContextImpl.java:48)
        at org.opendaylight.controller.sal.restconf.impl.BrokerFacade.invokeRpc(BrokerFacade.java:100)
        at org.opendaylight.controller.sal.restconf.rpc.impl.BrokerRpcExecutor.invokeRpcUnchecked(BrokerRpcExecutor.java:28)
        at org.opendaylight.controller.sal.restconf.rpc.impl.AbstractRpcExecutor.invokeRpc(AbstractRpcExecutor.java:37)
        at org.opendaylight.controller.sal.restconf.impl.RestconfImpl.callRpc(RestconfImpl.java:533)
        at org.opendaylight.controller.sal.restconf.impl.RestconfImpl.invokeRpc(RestconfImpl.java:399)
        at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
        at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
        at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
        at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.ResourceObjectRule.accept(ResourceObjectRule.java:100)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
        at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:440)
        at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:179)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
        at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:309)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
        , ]]
        at org.opendaylight.controller.sal.restconf.rpc.impl.AbstractRpcExecutor.getRpcResult(AbstractRpcExecutor.java:82)
        at org.opendaylight.controller.sal.restconf.rpc.impl.AbstractRpcExecutor.invokeRpc(AbstractRpcExecutor.java:37)
        at org.opendaylight.controller.sal.restconf.impl.RestconfImpl.callRpc(RestconfImpl.java:533)
        at org.opendaylight.controller.sal.restconf.impl.RestconfImpl.invokeRpc(RestconfImpl.java:399)
        at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
        at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
        at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
        at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.ResourceObjectRule.accept(ResourceObjectRule.java:100)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
        at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:440)
        at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:179)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
        at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:309)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
        Caused by: java.lang.NullPointerException
        at org.opendaylight.bgpcep.pcep.topology.provider.Stateful02TopologySessionListener.updateLsp(Stateful02TopologySessionListener.java:224)
        at org.opendaylight.bgpcep.pcep.topology.provider.ServerSessionManager.updateLsp(ServerSessionManager.java:150)
        at org.opendaylight.bgpcep.pcep.topology.provider.TopologyRPCs.updateLsp(TopologyRPCs.java:62)
        at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.NetworkTopologyPcepService$$Broker$Router.updateLsp(NetworkTopologyPcepService$$Broker$Router.java)
        at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.NetworkTopologyPcepService$$Broker$DirectProxy.updateLsp(NetworkTopologyPcepService$$Broker$DirectProxy.java)
        at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.opendaylight.controller.sal.binding.impl.connect.dom.RpcInvocationStrategy.uncheckedInvoke(RpcInvocationStrategy.java:131)
        at org.opendaylight.controller.sal.binding.impl.connect.dom.RpcInvocationStrategy.invokeOn(RpcInvocationStrategy.java:157)
        at org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentConnector$DomToBindingRpcForwarder.invokeRpc(BindingIndependentConnector.java:711)
        at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker$RoutedRpcSelector.invokeRpc(SchemaAwareRpcBroker.java:346)
        at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker.invokeRpc(SchemaAwareRpcBroker.java:168)
        at org.opendaylight.controller.sal.dom.broker.BrokerImpl.invokeRpcAsync(BrokerImpl.java:75)
        at org.opendaylight.controller.sal.dom.broker.ConsumerContextImpl.rpc(ConsumerContextImpl.java:48)
        at org.opendaylight.controller.sal.restconf.impl.BrokerFacade.invokeRpc(BrokerFacade.java:100)
        at org.opendaylight.controller.sal.restconf.rpc.impl.BrokerRpcExecutor.invokeRpcUnchecked(BrokerRpcExecutor.java:28)
        ... 43 more
        </error-info>
        </error>
        </errors>
      • Closing connection #0

            jgloncak Jozef Gloncak
            vrpolak Vratko Polak
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: