db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rick Hillegas <rick.hille...@oracle.com>
Subject Re: EOFException with latest release
Date Tue, 05 Jul 2011 15:10:24 GMT
Hi Nicolas,

Might be a corrupt primary key. Can you try dropping and redeclaring the 
primary key on the outage table? Do you have a script which reliably 
recreates this problem? That would help us track down the original 
corruption.

Thanks,
-Rick

On 7/5/11 7:56 AM, Nicolas Nobelis wrote:
> Hello all,
>
> Sorry if my error is well-know, but I did an intensive search the last 
> days and nothing came up, except some old 10.1 bugs.
>
> I'm using derby-10.8.1.2 on HP-UX (JVM 1.6.0.08) in Network Server Mode.
>
> I have three tables with several foreign key dependencies and several 
> indexes (shema underneath).
> I start the server and I insert 2500 entries in the outage table, 500 
> in the request one and 250 in the service one. Then I shutdown the 
> server and restart it.
>
> After the restart, some SELECT queries fire a EOFException :
>
>> ������.��-651050311255851044{5}), Cleanup action starting
>> Tue Jul 05 16:21:45 CEST 2011 
>> Thread[DRDAConnThread_49,5,derby.daemons] (XID = 18273), (SESSIONID = 
>> 50), (DATABASE = outage), (DRDAID = 
>> ��������.��-651050311255851044{5}), Failed Statement is: select

>> outage.id from outage.outage AS outage WHERE  outage.Id = 1
>> ERROR XSDA7: Restore of a serializable or SQLData object of class , 
>> attempted to read more data than was originally stored
>>         at 
>> org.apache.derby.iapi.error.StandardException.newException(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.raw.data.StoredPage.readRecordFromArray(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.raw.data.StoredPage.restoreRecordFromSlot(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.raw.data.BasePage.fetchFromSlot(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.ControlRow.compareIndexRowFromPageToKey(Unknown

>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.ControlRow.searchForEntry(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BranchControlRow.search(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BTreeScan.positionAtStartForForwardScan(Unknown

>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BTreeForwardScan.positionAtStartPosition(Unknown

>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BTreeScan.fetchNext(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.sql.execute.TableScanResultSet.getNextRowCore(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown Source)
>>         at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.drda.DRDAConnThread.writeFDODTA(Unknown Source)
>>         at 
>> org.apache.derby.impl.drda.DRDAConnThread.writeQRYDTA(Unknown Source)
>>         at 
>> org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown 
>> Source)
>>         at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)
>> Caused by: java.io.EOFException
>>         at 
>> org.apache.derby.iapi.services.io.ArrayInputStream.readInt(Unknown 
>> Source)
>>         at 
>> org.apache.derby.iapi.types.SQLInteger.readExternalFromArray(Unknown 
>> Source)
>>         ... 18 more
>> ============= begin nested exception, level (1) ===========
>> java.io.EOFException
>>         at 
>> org.apache.derby.iapi.services.io.ArrayInputStream.readInt(Unknown 
>> Source)
>>         at 
>> org.apache.derby.iapi.types.SQLInteger.readExternalFromArray(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.raw.data.StoredPage.readRecordFromArray(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.raw.data.StoredPage.restoreRecordFromSlot(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.raw.data.BasePage.fetchFromSlot(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.ControlRow.compareIndexRowFromPageToKey(Unknown

>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.ControlRow.searchForEntry(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BranchControlRow.search(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BTreeScan.positionAtStartForForwardScan(Unknown

>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BTreeForwardScan.positionAtStartPosition(Unknown

>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.store.access.btree.BTreeScan.fetchNext(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.sql.execute.TableScanResultSet.getNextRowCore(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown Source)
>>         at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown 
>> Source)
>>         at 
>> org.apache.derby.impl.drda.DRDAConnThread.writeFDODTA(Unknown Source)
>>         at 
>> org.apache.derby.impl.drda.DRDAConnThread.writeQRYDTA(Unknown Source)
>>         at 
>> org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown 
>> Source)
>>         at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)
>> ============= end nested exception, level (1) ===========
>> Cleanup action completed
>
> I did some some tinkering and some queries throw the exception, some 
> don't.
> Exception :
> select outage.id from outage.outage AS outage WHERE  outage.Id = 1
> select outage.* from outage.outage AS outage WHERE  outage.Id = 1
> No exception :
> select outage.id from outage.outage AS outage
> select outage.* from outage.outage AS outage
> select * from outage.outage AS outage WHERE id IS NOT NULL
>
> Since the exception occurs only with some specific where clauses, I 
> tend to think that these errors are index-related, but I'm really no 
> specialist.
>
> Can somebody familiar with derby internals tell me when such an 
> exception is thrown or, even better, how to fix it ?
>
> Thanks a lot for any help,
>
> Table schema follows.
>
> Best regards,
>
> Nicolas
>
> Schema :
> create table outage.backend (
>   id INT not null generated always as identity,
>   name varchar(256) NOT NULL UNIQUE,
>   PRIMARY KEY (id)
> );
>
> create table outage.service (
>   id INT not null generated always as identity,
>   name varchar(256) NOT NULL,
>   backend_id INT NOT NULL,
>   definition XML,
>   deleted SMALLINT NOT NULL DEFAULT 0,
>   status INT NOT NULL DEFAULT 0,
>   description varchar(512),
>   PRIMARY KEY (id),
>   FOREIGN KEY (backend_id) REFERENCES outage.backend ON DELETE CASCADE,
>   CONSTRAINT svc_name_backend UNIQUE (name, backend_id)
> );
> CREATE INDEX serviceNameIdx on outage.service (name);
> CREATE INDEX serviceDeletedIdx on outage.service (deleted);
> CREATE INDEX serviceStatusIdx on outage.service (status);
>
> CREATE TABLE outage.request (
>   id INT not null generated always as identity,
>   extern_id varchar(128) DEFAULT NULL,
>   owner VARCHAR(50) NOT NULL,
>   service_id INT NOT NULL,
>   backend_id INT NOT NULL,
>   start_time TIMESTAMP,
>   end_time TIMESTAMP,
>   dirty SMALLINT NOT NULL DEFAULT 0,
>   deleted SMALLINT NOT NULL DEFAULT 0,
>   status INT NOT NULL DEFAULT 1,
>   comment VARCHAR(1024) NOT NULL,
>   FOREIGN KEY (service_id) REFERENCES outage.service ON DELETE CASCADE,
>   FOREIGN KEY (backend_id) REFERENCES outage.backend ON DELETE CASCADE,
>   PRIMARY KEY (id)
> );
> CREATE INDEX reqDeletedIdx on outage.request (deleted);
> CREATE INDEX reqStatusIdx on outage.request (status);
>
> CREATE TABLE outage.outage (
>   id INT not null generated always as identity,
>   request_id INT NOT NULL,
>   service_id INT NOT NULL,
>   backend_id INT NOT NULL,
>   start_time TIMESTAMP,
>   end_time TIMESTAMP,
>   end_owner VARCHAR (50),
>   deleted SMALLINT NOT NULL DEFAULT 0,
>   infrastructure SMALLINT NOT NULL DEFAULT 0,
>   status INT NOT NULL DEFAULT 1,
>   node_name VARCHAR (1024) NOT NULL,
>   FOREIGN KEY (service_id) REFERENCES outage.service ON DELETE CASCADE,
>   FOREIGN KEY (request_id) REFERENCES outage.request ON DELETE CASCADE,
>   FOREIGN KEY (backend_id) REFERENCES outage.backend ON DELETE CASCADE,
>   PRIMARY KEY (id)
> );
> CREATE INDEX outageNodeNameIdx on outage.outage (node_name);
> CREATE INDEX outageDeletedIdx on outage.outage (deleted);
> CREATE INDEX outageInfraIdx on outage.outage (infrastructure);
> CREATE INDEX outageStatusIdx on outage.outage (status);
>


Mime
View raw message