db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF subversion and git services (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-4923) update of a long row can fail with ERROR nospc: nospc.U exception.
Date Thu, 24 Oct 2013 20:24:03 GMT

    [ https://issues.apache.org/jira/browse/DERBY-4923?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13804638#comment-13804638
] 

ASF subversion and git services commented on DERBY-4923:
--------------------------------------------------------

Commit 1535523 from mikem@apache.org in branch 'code/branches/10.10'
[ https://svn.apache.org/r1535523 ]

DERBY-4923 update of a long row can fail with ERROR nospc: nospc.U exception.

backport change #1535413 from trunk to 10.10 branch.

This checkin fixes the problem repro'd by the included new test, which shows
an update of an existing row in db failing with a nosp.U exception.
The problem was an off by 1 error in checking for enough space to update a row
on an overflow page to just an overflow pointer. The intent of the code is to
always reserve enough space in every overflow row to allow for this update.
In this case there was exactly enough space, but the code mistaken thought it
needed 1 more byte.

> update of a long row can fail with ERROR nospc: nospc.U exception.
> ------------------------------------------------------------------
>
>                 Key: DERBY-4923
>                 URL: https://issues.apache.org/jira/browse/DERBY-4923
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.5.3.0, 10.6.1.0, 10.6.2.1, 10.10.1.1, 10.11.0.0
>            Reporter: Mike Matrigali
>            Assignee: Mike Matrigali
>              Labels: derby_triage10_11
>         Attachments: DERBY-4923.diff, DERBY_4923.java, derby4923repro.diff, derby-4923-tt-aa-NoSpaceOnPageExtendsException.diff,
derby.log
>
>
> An update of a row fails with a nospc.U exception.  If there is space on the disk then
an update should never fail for a space 
> issue.  The code is meant to always reserve enough space on a page such that if an expanding
update happens that does not
> fit, it should in the worst case change the row to an overflow row pointer and put the
rest in a linked overflow chain.
> The following set of circumstances will cause this bug (not sure which are exactly needed
- just what i did to
> cause the repro), I will be attaching a test case:
> The row being updated has the following characteristics:
>     o located on 4k page
>     o 2 colum row with 2nd column a blob column
>     o the row is a long row with first piece having 1st column on main page, and the
2nd piece having just blob column on overflow page.
>     o before the update there is 0 free space on the overflow page.
>     o the update causes the blob column to expand past 4k 
> Caused by: java.sql.SQLException: nospc.U
>     at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
>     at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory40.java:119)
>     at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:70)
>     ... 39 more
> Caused by: ERROR nospc: nospc.U
>     at org.apache.derby.impl.store.raw.data.StoredPage.logRow(StoredPage.java:4155)
>     at org.apache.derby.impl.store.raw.data.UpdateOperation.writeOptionalDataToBuffer(UpdateOperation.java:255)
>     at org.apache.derby.impl.store.raw.data.UpdateOperation.<init>(UpdateOperation.java:106)
>     at org.apache.derby.impl.store.raw.data.LoggableActions.actionUpdate(LoggableActions.java:80)
>     at org.apache.derby.impl.store.raw.data.StoredPage.doUpdateAtSlot(StoredPage.java:8625)
>     at org.apache.derby.impl.store.raw.data.BasePage.updateAtSlot(BasePage.java:1062)
>     at org.apache.derby.impl.store.access.conglomerate.GenericConglomerateController.replace(GenericConglomerateController.java:486)
>     at org.apache.derby.impl.sql.execute.RowChangerImpl.updateRow(RowChangerImpl.java:523)
>     at org.apache.derby.impl.sql.execute.UpdateResultSet.collectAffectedRows(UpdateResultSet.java:569)
>     at org.apache.derby.impl.sql.execute.UpdateResultSet.open(UpdateResultSet.java:264)
>     at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:436)
>     at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:317)
>     at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1241)
>     ... 33 more



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Mime
View raw message