Elek, Marton created HDDS-1669:
----------------------------------

             Summary: SCM startup is failing if network-topology-default.xml is 
part of a jar
                 Key: HDDS-1669
                 URL: https://issues.apache.org/jira/browse/HDDS-1669
             Project: Hadoop Distributed Data Store
          Issue Type: Bug
            Reporter: Elek, Marton
            Assignee: Elek, Marton


network-topology-default.xml can be loaded from file or classpath. But the 
NodeSchemaLoader assumes that the files on the classpath can be opened as a 
file. It's true if the file is in etc/hadoop (which is part of the classpath) 
but not true if the file is packaged to a jajr file:

{code}
scm_1         | 2019-06-11 13:18:03 INFO  NodeSchemaLoader:118 - Loading file 
from 
jar:file:/opt/hadoop/share/ozone/lib/hadoop-hdds-common-0.5.0-SNAPSHOT.jar!/network-topology-default.xml
scm_1         | 2019-06-11 13:18:03 ERROR NodeSchemaManager:74 - Failed to load 
schema file:network-topology-default.xml, error:
scm_1         | java.lang.IllegalArgumentException: URI is not hierarchical
scm_1         |         at java.io.File.<init>(File.java:418)
scm_1         |         at 
org.apache.hadoop.hdds.scm.net.NodeSchemaLoader.loadSchemaFromFile(NodeSchemaLoader.java:119)
scm_1         |         at 
org.apache.hadoop.hdds.scm.net.NodeSchemaManager.init(NodeSchemaManager.java:67)
scm_1         |         at 
org.apache.hadoop.hdds.scm.net.NetworkTopologyImpl.<init>(NetworkTopologyImpl.java:63)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManager.initializeSystemManagers(StorageContainerManager.java:382)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManager.<init>(StorageContainerManager.java:275)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManager.<init>(StorageContainerManager.java:208)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManager.createSCM(StorageContainerManager.java:586)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManagerStarter$SCMStarterHelper.start(StorageContainerManagerStarter.java:139)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManagerStarter.startScm(StorageContainerManagerStarter.java:115)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManagerStarter.call(StorageContainerManagerStarter.java:67)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManagerStarter.call(StorageContainerManagerStarter.java:42)
scm_1         |         at picocli.CommandLine.execute(CommandLine.java:1173)
scm_1         |         at picocli.CommandLine.access$800(CommandLine.java:141)
scm_1         |         at 
picocli.CommandLine$RunLast.handle(CommandLine.java:1367)
scm_1         |         at 
picocli.CommandLine$RunLast.handle(CommandLine.java:1335)
scm_1         |         at 
picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:1243)
scm_1         |         at 
picocli.CommandLine.parseWithHandlers(CommandLine.java:1526)
scm_1         |         at 
picocli.CommandLine.parseWithHandler(CommandLine.java:1465)
scm_1         |         at 
org.apache.hadoop.hdds.cli.GenericCli.execute(GenericCli.java:65)
scm_1         |         at 
org.apache.hadoop.hdds.cli.GenericCli.run(GenericCli.java:56)
scm_1         |         at 
org.apache.hadoop.hdds.scm.server.StorageContainerManagerStarter.main(StorageContainerManagerStarter.java:56)
scm_1         | Failed to load schema file:network-topology-default.xml, error:
{code}

The quick fix is to keep the current behaviour but read the file from 
classloader.getResourceAsStream() instead of classloader.getResource().toURI()



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-dev-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-dev-h...@hadoop.apache.org

Reply via email to