Sam Hutchins created DERBY-7116:
-----------------------------------

             Summary: 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
    Affects Versions: 10.14.2.0
         Environment: Windows 10
            Reporter: Sam Hutchins


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