jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefan Guggisberg" <stefan.guggisb...@gmail.com>
Subject Re: SQLException "Data too long" using SimpleDbPersistenceManager/MySQL
Date Wed, 19 Apr 2006 08:03:49 GMT
hi daniel
the default schema for mysql uses 'blob' columns for storing
serialized node states.
the blob data type has a maximum size limit of 65k. if your repository needs
to store large numbers of child nodes per node you can use the 'mediumblob'
data type instead.

e.g.
create table default_NODE (NODE_ID char(36) not null, NODE_DATA
mediumblob not null);

btw: you should in general try to avoid flat hierarchies in jackrabbit
as they come at
a certain performance cost.

cheers
stefan

On 4/18/06, Daniel Hagen <dhagen@h1-software.de> wrote:
> Hi,
>
> I noticed a problem during a test using the SimbpleDbPersistenceManager and
> MySQL 5.0.
> Strangely enough this problem occurred only after some nodes (~25000) where
> created in the repository.
>
> Now I receive the following error when creating a node:
>
> ERROR org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager -
> failed to write node state: ea7f3f8b-97fe-450d-8a8a-2b6d84c711c1
> java.sql.SQLException: Data too long for column 'NODE_DATA' at row 1
>         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921)
>         at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
>         at
> com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement
> .java:1085)
>         at
> com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStateme
> nt.java:670)
>         at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1159)
>         at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1076)
>         at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1061)
>         at
> org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager.store(SimpleD
> bPersistenceManager.java:585)
>         at
> org.apache.jackrabbit.core.state.AbstractPersistenceManager.store(AbstractPe
> rsistenceManager.java:75)
>         at
> org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager.store(SimpleD
> bPersistenceManager.java:446)
>         at
> org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedIte
> mStateManager.java:569)
>         at
> org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemSta
> teManager.java:692)
>         at
> org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemState
> Manager.java:315)
>         at
> org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManage
> r.java:322)
>         at
> org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemState
> Manager.java:291)
>         at
> org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemS
> tateManager.java:257)
>         at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1189)
>         at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:805)
>
> Am I missing some MySQL Parameters I have to set?
>
> The ddl I used to create the tables is
>
> create table default_NODE (NODE_ID char(36) not null, NODE_DATA blob not
> null) TYPE=InnoDB;
> create unique index default_NODE_IDX on default_NODE (NODE_ID);
> create table default_PROP (PROP_ID varchar(255) not null, PROP_DATA blob not
> null) TYPE=InnoDB;
> create unique index default_PROP_IDX on default_PROP (PROP_ID);
> create table default_REFS (NODE_ID char(36) not null, REFS_DATA blob not
> null) TYPE=InnoDB;
> create unique index default_REFS_IDX on default_REFS (NODE_ID);
> create table default_BINVAL (BINVAL_ID varchar(255) not null, BINVAL_DATA
> longblob not null) TYPE=InnoDB;
> create unique index default_BINVAL_IDX on default_BINVAL (BINVAL_ID);
>
> Does anybody have a clue as to what is going wrong?
> I will gladly provide more information (logs etc) if required.
>
> Regards
>
> Daniel
>
>

Mime
View raw message