[
https://issues.apache.org/jira/browse/DERBY-3625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mike Matrigali updated DERBY-3625:
----------------------------------
I think i understand what is going on, and the previous test description
probably does not cause this
bug. Not sure what right fix is yet.
I went back to the original page dumps, and think I know the problem. Compress
is using the old length
to find a suitable page, but it turns out the length of the row is actually
variable because the record id is
changing. In this case the soruce page record id is 40 and the next record id
on the dest page is 69.
For complete doc on record format see javadoc in StoredPage at top - search for
Record & Field Format.
but short answer is that records include a record header (StoredRecordHeader)
and
StoredRecordHeader writes out the record id using a Compressed Int (see
CompressedNumber) and
the break down for size for the compressed number is:
/**
Write a compressed integer only supporting signed values.
Formats are (with x representing value bits):
<PRE>
1 Byte - 00xxxxxx Represents the value <=
63 (0x3f)
2 Byte - 01xxxxxx xxxxxxxx Represents the value >
63 && <= 16383 (0x3fff)
4 byte - 1xxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx Represents the value >
16383 && <= MAX_INT
</PRE>
@exception IOException value is negative or an exception was thrown by a
method on out.
*/
> XSDA3 error in concateTests in lang.LangHarnessJavaTest
> --------------------------------------------------------
>
> Key: DERBY-3625
> URL: https://issues.apache.org/jira/browse/DERBY-3625
> Project: Derby
> Issue Type: Bug
> Components: Regression Test Failure
> Affects Versions: 10.4.1.3
> Environment: iseries, ibm1.5.:
> java version "1.5.0"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05)
> Classic VM (build 1.5, build JDK-1.5, native threads, jitc_de)
> Reporter: Myrna van Lunteren
> Attachments: derby_log_wdebug.zip, derby_log_wdebug2.zip,
> derbylog.zip, wombat.zip
>
>
> I saw this test fail once with a similar error to DERBY-3180 and DERBY-3381.
> Unfortunately, possibly because it's an old harness test, the db and
> derby.log were not saved in the 'fail' directory.
> All I have is the stack trace from the output:
> 1)
> concateTests(org.apache.derbyTesting.functionTests.tests.lang.LangHarnessJavaTest)java.sql.SQLException:
> Limitation: Record cannot be updated or inserted due to lack of space on the
> page. Use the parameters derby.storage.pageSize and/or
> derby.storage.pageReservedSpace to work around this limitation.
> at java.lang.Throwable.<init>(Throwable.java:196)
> at java.lang.Exception.<init>(Exception.java:41)
> at java.sql.SQLException.<init>(SQLException.java:40)
> at org.apache.derby.impl.jdbc.EmbedSQLException.<init>(Unknown Source)
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
> at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedCallableStatement.executeStatement(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown
> Source)
> at
> org.apache.derbyTesting.junit.CleanDatabaseTestSetup.compressObjects(CleanDatabaseTestSetup.java:267)
> at
> org.apache.derbyTesting.junit.CleanDatabaseTestSetup.cleanDatabase(CleanDatabaseTestSetup.java:166)
> at
> org.apache.derbyTesting.junit.CleanDatabaseTestSetup.setUp(CleanDatabaseTestSetup.java:109)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:18)
> at junit.extensions.TestSetup.run(TestSetup.java:23)
> at
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> Caused by: ERROR XSDA3: Limitation: Record cannot be updated or inserted due
> to lack of space on the page. Use the parameters derby.storage.pageSize
> and/or derby.storage.pageReservedSpace to work around this limitation.
> at java.lang.Throwable.<init>(Throwable.java:196)
> at java.lang.Exception.<init>(Exception.java:41)
> at org.apache.derby.iapi.error.StandardException.<init>(Unknown Source)
> at org.apache.derby.iapi.error.StandardException.<init>(Unknown Source)
> at org.apache.derby.iapi.error.StandardException.newException(Unknown
> Source)
> at
> org.apache.derby.impl.store.raw.data.CopyRowsOperation.writeOptionalDataToBuffer(Unknown
> Source)
> at
> org.apache.derby.impl.store.raw.data.CopyRowsOperation.<init>(Unknown Source)
> at
> org.apache.derby.impl.store.raw.data.LoggableActions.actionCopyRows(Unknown
> Source)
> at org.apache.derby.impl.store.raw.data.BasePage.copyInto(Unknown
> Source)
> at org.apache.derby.impl.store.raw.data.BasePage.copyAndPurge(Unknown
> Source)
> at
> org.apache.derby.impl.store.raw.data.StoredPage.moveRecordForCompressAtSlot(Unknown
> Source)
> at
> org.apache.derby.impl.store.access.heap.HeapCompressScan.fetchRowsForCompress(Unknown
> Source)
> at
> org.apache.derby.impl.store.access.heap.HeapCompressScan.fetchNextGroup(Unknown
> Source)
> at org.apache.derby.iapi.db.OnlineCompress.defragmentRows(Unknown
> Source)
> at org.apache.derby.iapi.db.OnlineCompress.compressTable(Unknown Source)
> at
> org.apache.derby.catalog.SystemProcedures.SYSCS_INPLACE_COMPRESS_TABLE(Unknown
> Source)
> at
> org.apache.derby.exe.ac4388a4aax0119x3203xfc8fx0000783ef2472.g0(Unknown
> Source)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at org.apache.derby.impl.services.reflect.ReflectMethod.invoke(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.CallStatementResultSet.open(Unknown Source)
> at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown
> Source)
> ... 24 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.