[
https://issues.apache.org/jira/browse/DERBY-6503?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13930409#comment-13930409
]
Knut Anders Hatlen commented on DERBY-6503:
-------------------------------------------
In the network directory where I see this failure, I'm not allowed to change
the permissions of derby.log (or any other file for that matter) as the same
user using the normal Windows mechanism either (right-click file in Windows
Explorer, choose Properties, then Security, and Edit). So it sounds correct
that Java raises an exception when the network server tries to do that
operation.
The code comments seem to acknowledge that an IOException is a possibility, but
it sounds like it was not believed to be something that could happen in
practice. See this code in FileUtil.limitAccessToOwnerViaACLs():
{code}
} catch (InvocationTargetException e) {
// java.security.AccessControlException: access denied
// ("java.lang.RuntimePermission" "accessUserInformation") can
// happen, so throw.
//
// Should we get an IOException from getOwner, the cast below
// would throw which is fine, since it should not happen.
throw (RuntimeException)e.getCause();
}
{code}
At the very least this code needs to be improved so that it doesn't report the
IOException as a ClassCastException.
I'm not quite sure how errors are supposed to be handled in this code, though.
Some exceptions are handled by falling back to using the less capable
File.setReadable(), setWritable(), setExecutable() methods. Others are ignored
(unless you're running a debug build). Only RuntimeExceptions will be reported
currently.
> Starting network server on a network drive fails with JDK 7 on Windows
> ----------------------------------------------------------------------
>
> Key: DERBY-6503
> URL: https://issues.apache.org/jira/browse/DERBY-6503
> Project: Derby
> Issue Type: Bug
> Components: Network Server, Services
> Affects Versions: 10.10.1.1
> Reporter: Knut Anders Hatlen
>
> Starting a network server on a network drive with JDK 7 on Windows fails. The
> reported exception is a ClassCastException, but the underlying exception is
> the following:
> java.nio.file.AccessDeniedException: \\host\path\derby.log
> at
> sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
> at
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
> at
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
> at
> sun.nio.fs.WindowsAclFileAttributeView.setAcl(WindowsAclFileAttributeView.java:221)
> 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:601)
> at
> org.apache.derby.iapi.services.io.FileUtil.limitAccessToOwnerViaACLs(FileUtil.java:897)
> at
> org.apache.derby.iapi.services.io.FileUtil.limitAccessToOwner(FileUtil.java:747)
> at
> org.apache.derby.impl.services.stream.SingleStream.PBmakeFileHPW(SingleStream.java:205)
> at
> org.apache.derby.impl.services.stream.SingleStream.run(SingleStream.java:401)
> at
> org.apache.derby.impl.services.stream.SingleStream.run(SingleStream.java:72)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> org.apache.derby.impl.services.stream.SingleStream.makeFileHPW(SingleStream.java:394)
> at
> org.apache.derby.impl.services.stream.SingleStream.createDefaultStream(SingleStream.java:356)
> at
> org.apache.derby.impl.services.stream.SingleStream.makeStream(SingleStream.java:132)
> at
> org.apache.derby.impl.services.stream.SingleStream.boot(SingleStream.java:92)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1991)
> at
> org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:334)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:541)
> at
> org.apache.derby.impl.services.monitor.FileMonitor.startModule(FileMonitor.java:44)
> at
> org.apache.derby.iapi.services.monitor.Monitor.startSystemModule(Monitor.java:362)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.runWithState(BaseMonitor.java:343)
> at
> org.apache.derby.impl.services.monitor.FileMonitor.<init>(FileMonitor.java:58)
> at
> org.apache.derby.iapi.services.monitor.Monitor.startMonitor(Monitor.java:285)
> at org.apache.derby.iapi.jdbc.JDBCBoot.boot(JDBCBoot.java:67)
> at org.apache.derby.jdbc.EmbeddedDriver.boot(EmbeddedDriver.java:199)
> at org.apache.derby.jdbc.EmbeddedDriver.<clinit>(EmbeddedDriver.java:95)
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:188)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.startNetworkServer(NetworkServerControlImpl.java:1032)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(NetworkServerControlImpl.java:732)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.executeWork(NetworkServerControlImpl.java:2277)
> at
> org.apache.derby.drda.NetworkServerControl.main(NetworkServerControl.java:353)
--
This message was sent by Atlassian JIRA
(v6.2#6252)