You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Richard N. Hillegas (Jira)" <ji...@apache.org> on 2021/05/11 17:13:00 UTC

[jira] [Commented] (DERBY-7116) Meta-data for unknown could not be accessed to read

    [ https://issues.apache.org/jira/browse/DERBY-7116?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17342746#comment-17342746 ] 

Richard N. Hillegas commented on DERBY-7116:
--------------------------------------------

Derby expects to have exclusive access to the data files which store its tables. Derby opens files on an as-needed basis and does not pro-actively open all data files in order to lock out interlopers. Maybe you could lock out the intruder by using file permissions which are only granted to the account which runs the Derby engine.


> Meta-data for unknown could not be accessed to read
> ---------------------------------------------------
>
>                 Key: DERBY-7116
>                 URL: https://issues.apache.org/jira/browse/DERBY-7116
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL, Store
>    Affects Versions: 10.14.2.0
>         Environment: Windows 10
>            Reporter: Sam Hutchins
>            Priority: Major
>
> Hi,
>  
> I'm afraid I don't have a reproducible case for this, but it's an issue we've seen in the wild on customer's machines. I'd guess it's specific to Windows, as other platforms don't support exclusive locks, and we've only ever seen it reported from Windows users.
>  
> The `ConcurrentCache` in the stacktrace makes me wonder if Derby is able to lock itself out of the database under the right conditions. Here's the trace:
>  
> {code:java}
> Caused by: java.sql.SQLException: Meta-data for unknown could not be accessed to read C:\Users\USER\.ScreamingFrogSEOSpider\ProjectInstanceData\6b422f28-46c9-492e-bbde-aeb5bc1e6307\results_10505723-008c-4b06-aa69-2c676ef858c8\sql\seg0\c71.dat
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java)
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java)
> 	at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java)
> 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java)
> 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java)
> 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java)
> 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeQuery(EmbedPreparedStatement.java)
> 	at uk.co.screamingfrog.seospider.db.AbstractDuplicateTableOperations.getSpiderUrls(AbstractDuplicateTableOperations.java:152)
> 	... 17 more
> Caused by: ERROR XSDG3: Meta-data for unknown could not be accessed to read C:\Users\USER\.ScreamingFrogSEOSpider\ProjectInstanceData\6b422f28-46c9-492e-bbde-aeb5bc1e6307\results_10505723-008c-4b06-aa69-2c676ef858c8\sql\seg0\c71.dat
> 	at org.apache.derby.iapi.error.StandardException.newException(StandardException.java)
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java)
> 	... 28 more
> Caused by: java.io.FileNotFoundException: C:\Users\USER\.ScreamingFrogSEOSpider\ProjectInstanceData\6b422f28-46c9-492e-bbde-aeb5bc1e6307\results_10505723-008c-4b06-aa69-2c676ef858c8\sql\seg0\c71.dat (The process cannot access the file because it is being used by another process)
> 	at java.base/java.io.RandomAccessFile.open0(Native Method)
> 	at java.base/java.io.RandomAccessFile.open(Unknown Source)
> 	at java.base/java.io.RandomAccessFile.<init>(Unknown Source)
> 	at java.base/java.io.RandomAccessFile.<init>(Unknown Source)
> 	at org.apache.derby.impl.io.DirRandomAccessFile.<init>(DirRandomAccessFile.java)
> 	at org.apache.derby.impl.io.DirFile.getRandomAccessFile(DirFile.java)
> 	at org.apache.derby.impl.store.raw.data.RAFContainer.run(RAFContainer.java)
> 	at java.base/java.security.AccessController.doPrivileged(Native Method)
> 	at org.apache.derby.impl.store.raw.data.RAFContainer.openContainer(RAFContainer.java)
> 	at org.apache.derby.impl.store.raw.data.RAFContainer4.openContainer(RAFContainer4.java)
> 	at org.apache.derby.impl.store.raw.data.FileContainer.setIdent(FileContainer.java)
> 	at org.apache.derby.impl.store.raw.data.FileContainer.setIdentity(FileContainer.java)
> 	at org.apache.derby.impl.services.cache.ConcurrentCache.find(ConcurrentCache.java)
> 	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.openContainer(BaseDataFileFactory.java)
> 	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.openContainer(BaseDataFileFactory.java)
> 	at org.apache.derby.impl.store.raw.xact.Xact.openContainer(Xact.java)
> 	at org.apache.derby.impl.store.access.btree.OpenBTree.init(OpenBTree.java)
> 	at org.apache.derby.impl.store.access.btree.BTreeScan.init(BTreeScan.java)
> 	at org.apache.derby.impl.store.access.btree.index.B2IForwardScan.init(B2IForwardScan.java)
> 	at org.apache.derby.impl.store.access.btree.index.B2I.openScan(B2I.java)
> 	at org.apache.derby.impl.store.access.RAMTransaction.openScan(RAMTransaction.java)
> 	at org.apache.derby.impl.store.access.RAMTransaction.openScan(RAMTransaction.java)
> 	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndexMinion(DataDictionaryImpl.java)
> 	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndex(DataDictionaryImpl.java)
> 	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getTableDescriptorIndex1Scan(DataDictionaryImpl.java)
> 	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getUncachedTableDescriptor(DataDictionaryImpl.java)
> 	at org.apache.derby.impl.sql.catalog.NameTDCacheable.setIdentity(NameTDCacheable.java)
> 	at org.apache.derby.impl.services.cache.ConcurrentCache.find(ConcurrentCache.java)
> 	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getTableDescriptor(DataDictionaryImpl.java)
> 	at org.apache.derby.impl.sql.compile.QueryTreeNode.getTableDescriptor(QueryTreeNode.java)
> 	at org.apache.derby.impl.sql.compile.FromBaseTable.bindTableDescriptor(FromBaseTable.java)
> 	at org.apache.derby.impl.sql.compile.FromBaseTable.bindNonVTITables(FromBaseTable.java)
> 	at org.apache.derby.impl.sql.compile.FromList.bindTables(FromList.java)
> 	at org.apache.derby.impl.sql.compile.SelectNode.bindNonVTITables(SelectNode.java)
> 	at org.apache.derby.impl.sql.compile.DMLStatementNode.bindTables(DMLStatementNode.java)
> 	at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(DMLStatementNode.java)
> 	at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(CursorNode.java)
> 	at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java)
> 	at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.rePrepare(GenericPreparedStatement.java)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java)
> 	... 21 more {code}
>  
> The exception message mentions "another process", but it's possible to get exactly this error message in a single Java application:
>  
> {code:java}
> public static void main(
>     final String[] args) throws Exception
> {
>     final Path path = Path.of("lock");
>     path.toFile().createNewFile();
>     try (final FileChannel channel = FileChannel.open(path, StandardOpenOption.APPEND))
>     {
>         channel.lock(0, Long.MAX_VALUE, false);
>         System.out.println("Locked");
>         final FileInputStream fis = new FileInputStream(path.toFile());
>         fis.readAllBytes();
>         System.out.println("Done");
>     }
> } {code}
>  
> On Windows, this will throw a similar exception. 
>  
> If, however, it is a problem caused by some other piece of software (such as antivirus or backup software), is there a way for Derby to use this same locking mechanism to lock out those other applications?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)