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

Reply via email to