Kevin Minder created KNOX-664:
---------------------------------
Summary: Invalid service definitions have poor diagnostics and
should fail more aggressivly
Key: KNOX-664
URL: https://issues.apache.org/jira/browse/KNOX-664
Project: Apache Knox
Issue Type: Bug
Components: Server
Affects Versions: 0.6.0
Reporter: Kevin Minder
Fix For: Future
I encountered a situation where a service definition rewrite.xml file was
malformed. Note the use of rule instead of the correct rules for the root tag.
{code}
<rule>
<rule dir="IN" name="ELASTICSEARCH/elasticsearch/inbound"
pattern="*://*:*/**/elasticsearch/{path=**}?{**}">
<rewrite template="{$serviceUrl[ELASTICSEARCH]}/{path=**}?{**}"/>
</rule>
</rules>
{code}
During startup/deployment a failure is noted in the logs.
{code}
2016-02-01 22:53:57,658 ERROR digester3.Digester (Digester.java:parse(1652)) -
An error occurred while parsing XML from '(already loaded from stream)', see
nested exceptions
org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 70; Error at line 3
char 70: null
at
org.apache.commons.digester3.Digester.createSAXException(Digester.java:3118)
at
org.apache.commons.digester3.Digester.createSAXException(Digester.java:3146)
at
org.apache.commons.digester3.Digester.startElement(Digester.java:1355)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at
com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1344)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2787)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:642)
at org.apache.commons.digester3.Digester.parse(Digester.java:1642)
at org.apache.commons.digester3.Digester.parse(Digester.java:1745)
at
org.apache.hadoop.gateway.filter.rewrite.impl.xml.XmlUrlRewriteRulesImporter.load(XmlUrlRewriteRulesImporter.java:46)
at
org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteRulesDescriptorFactory.load(UrlRewriteRulesDescriptorFactory.java:54)
at
org.apache.hadoop.gateway.util.ServiceDefinitionsLoader.loadRewriteRules(ServiceDefinitionsLoader.java:94)
at
org.apache.hadoop.gateway.util.ServiceDefinitionsLoader.loadServiceDefinitions(ServiceDefinitionsLoader.java:73)
at
org.apache.hadoop.gateway.deploy.DeploymentFactory.createDeployment(DeploymentFactory.java:84)
at
org.apache.hadoop.gateway.GatewayServer$InternalTopologyListener.handleCreateDeployment(GatewayServer.java:427)
at
org.apache.hadoop.gateway.GatewayServer$InternalTopologyListener.handleTopologyEvent(GatewayServer.java:400)
at
org.apache.hadoop.gateway.services.topology.impl.DefaultTopologyService.notifyChangeListeners(DefaultTopologyService.java:323)
at
org.apache.hadoop.gateway.services.topology.impl.DefaultTopologyService.reloadTopologies(DefaultTopologyService.java:297)
at org.apache.hadoop.gateway.GatewayServer.start(GatewayServer.java:311)
at
org.apache.hadoop.gateway.GatewayServer.startGateway(GatewayServer.java:230)
at org.apache.hadoop.gateway.GatewayServer.main(GatewayServer.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at
org.apache.hadoop.gateway.launcher.Invoker.invokeMainMethod(Invoker.java:70)
at org.apache.hadoop.gateway.launcher.Invoker.invoke(Invoker.java:39)
at org.apache.hadoop.gateway.launcher.Command.run(Command.java:101)
at org.apache.hadoop.gateway.launcher.Launcher.run(Launcher.java:69)
at org.apache.hadoop.gateway.launcher.Launcher.main(Launcher.java:46)
Caused by: java.lang.NullPointerException
at
org.apache.hadoop.gateway.filter.rewrite.impl.xml.XmlRewriteRulesDigester$StepFactory.create(XmlRewriteRulesDigester.java:114)
at
org.apache.hadoop.gateway.filter.rewrite.impl.xml.XmlRewriteRulesDigester$FactoryRule.begin(XmlRewriteRulesDigester.java:224)
at
org.apache.commons.digester3.Digester.startElement(Digester.java:1350)
... 34 more
2016-02-01 22:53:57,667 ERROR hadoop.gateway
(ServiceDefinitionsLoader.java:loadRewriteRules(102)) - Failed to unmarshall
rewrite file
/usr/hdp/2.3.2.0-2950/knox/bin/../data/services/elasticsearch/0.0.1/rewrite.xml
file : java.io.IOException: org.xml.sax.SAXParseException; lineNumber: 3;
columnNumber: 70; Error at line 3 char 70: null
{code}
This however does not prevent startup or typology deployment. Critically in
this case the rewrite rules for the affected services were not included in the
deployed topology resulting in this error when that services was accessed at
runtime.
{code}
2016-02-01 23:05:54,243 DEBUG hadoop.gateway (GatewayFilter.java:doFilter(110))
- Received request: GET /elasticsearch/v1
2016-02-01 23:05:54,295 INFO hadoop.gateway
(KnoxLdapRealm.java:getUserDn(550)) - Computed userDn:
uid=guest,ou=people,dc=hadoop,dc=apache,dc=org using dnTemplate for principal:
guest
2016-02-01 23:05:56,737 DEBUG hadoop.gateway
(DefaultDispatch.java:executeOutboundRequest(110)) - Dispatch request: GET
https://localhost:8443/gateway/default/elasticsearch/v1?user.name=guest
2016-02-01 23:05:56,892 WARN hadoop.gateway
(DefaultDispatch.java:executeOutboundRequest(129)) - Connection exception
dispatching request:
https://localhost:8443/gateway/default/elasticsearch/v1?user.name=guest
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
{code}
The important thing to note in the above is that the URL is never rewritten.
This is because the service's rules were never included in the deployed
topology.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)