[
https://issues.apache.org/jira/browse/DERBY-3625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mike Matrigali updated DERBY-3625:
----------------------------------
One option is to only allow compress to pick pages that will handle worst case
expansion, so do something
like the following in moveRecordForCompressAtSlot().
dest_row_size = row_size + StoredRecordHeader.MAX_RECORD_ID_INCREASE where the
new constant is 3.
or do something more dynamic to get it exactly right (variable names/fields are
not right)
dest_row_size = row_size + StoredRecordHeader.size_of_recordid(destpage.nextid)
- StoredRecordHeader.size_of_recordid(source record id).
The StoredRecordHeader.size() has code to do this kind of stuff for the whole
record header.
The copy record code existed before compress but it's usage never ran into this
issue. It was only used
during a btree split, so all records would always be going to a new page. So
in that case all the destination
record id's had to be either the same or smaller than the source id's as we
only split and move rows to
a new page.
> 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.