Cannot create a cluster with a database containing LOB's (thread to block)

18 views
Skip to first unread message

Jimmitry PAYET

unread,
Apr 3, 2012, 3:21:14 AM4/3/12
to h2-da...@googlegroups.com
The issue I expose here seems to has already been identified, and
fixed in 1.3.162:

"When using the exclusive mode, LOB operations could cause the thread
to block. This also affected the CreateCluster tool (when using BLOB
or CLOB data)."

But I have tried in 165 releases, and I experience a
similar issue. I have built a very simple test case showing the issue:

1. Following the cluster creation tutorial, I create two directories:
server1 & server2

2. I run an H2 server on both:
        java org.h2.tools.Server -tcp -tcpPort 9101 -baseDir server1
        java org.h2.tools.Server -tcp -tcpPort 9102 -baseDir server2

3. I create a new database "test" on the first one, by executing the
following statements:
        create table Test(c1 number(5), c2 varchar(100), c3 CLOB);
        insert into Test(c1, c2, c3) values (10, 'Hello',
repeat('Hello', 10000));
        insert into Test(c1, c2, c3) values (20, 'World',
repeat('World', 10000));

4. I try to create a cluster, by running:
        java org.h2.tools.CreateCluster
          -urlSource jdbc:h2:tcp://localhost:9101/test
          -urlTarget jdbc:h2:tcp://localhost:9102/test
          -user sa
          -serverList localhost:9101,localhost:9102

5. The command does not terminate. An empty "backup.sql" file is
created in the current directory.

6. The JVM stack of the first server shows the following:

"H2 TCP Server (tcp://10.1.12.107:9101) thread" prio=6 tid=0x18b80400
nid=0x1064 waiting on condition [0x1947f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at
org.h2.engine.Session.waitIfExclusiveModeEnabled(Session.java:1101)
        at org.h2.command.Command.executeQuery(Command.java:174)
        at
org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:
96)
        - locked <0x04883238> (a org.h2.engine.Session)
        at org.h2.store.LobStorage.getInputStream(LobStorage.java:564)
        - locked <0x047b8e30> (a org.h2.engine.Database)
        at org.h2.value.ValueLobDb.getInputStream(ValueLobDb.java:288)
        at org.h2.value.ValueLobDb.getReader(ValueLobDb.java:274)
        at
org.h2.command.dml.ScriptCommand.writeLobStream(ScriptCommand.java:
382)
        at org.h2.command.dml.ScriptCommand.query(ScriptCommand.java:
265)
        at org.h2.command.CommandContainer.query(CommandContainer.java:
82)
        at org.h2.command.Command.executeQuery(Command.java:187)
        - locked <0x047b8e30> (a org.h2.engine.Database)
        at org.h2.server.TcpServerThread.process(TcpServerThread.java:
303)
        at org.h2.server.TcpServerThread.run(TcpServerThread.java:146)
        at java.lang.Thread.run(Thread.java:662)

This issue seems to be very similar to the above one. It prevents me
from using clustering with my actual database (containing LOB's).
What is wrong there? Is there a workaround?

Thanks!

Thomas Mueller

unread,
Oct 29, 2012, 3:06:45 PM10/29/12
to h2-da...@googlegroups.com
Hi, 

FYI: this should be fixed in H2 version 1.3.169.

Regards,
Thomas



--
You received this message because you are subscribed to the Google Groups "H2 Database" group.
To view this discussion on the web visit https://groups.google.com/d/msg/h2-database/-/bWfyAUESxP4J.
To post to this group, send email to h2-da...@googlegroups.com.
To unsubscribe from this group, send email to h2-database...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/h2-database?hl=en.

Reply all
Reply to author
Forward
0 new messages