[ 
https://issues.apache.org/jira/browse/DERBY-7116?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Richard N. Hillegas updated DERBY-7116:
---------------------------------------
    Bug behavior facts: Seen in production
           Component/s: Store
                        SQL

The following snippet of the stack trace jumped out at me:

{noformat}
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)
{noformat}

Do you have any theories about what that other process is and what it is doing?


> 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)

Reply via email to