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!
--
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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/h2-database?hl=en.