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


Reply via email to