gridgain / gridgain-old

268 stars 85 forks source link

Calling DataLoader.addData(object) 4 times throws org.h2.jdbc.JdbcSQLException: Table "..." already exists #76

Open ceefour opened 10 years ago

ceefour commented 10 years ago

At least on my machine, calling 3 times work, 4 times it errors. GridGain nodes = 3. If single node there's no error. GridGain 6.1.9.

Code: https://github.com/ceefour/gggettingstarted/blob/toomanyremaps/src/main/java/com/hendyirawan/gggettingstarted/simple/LoadData.java

try (Grid grid = GridGain.start(
        System.getProperty("user.home") + "/gridgain-platform-os-6.1.9-nix/examples/config/example-cache.xml")) {
    try (GridDataLoader<Integer, YagoRule> loader = grid.dataLoader("partitioned")) {
        loader.addData(1, new YagoRule("a", "b", "c", "d", "e"));
        loader.addData(2, new YagoRule("a", "b", "c", "d", "e"));
        loader.addData(3, new YagoRule("a", "b", "c", "d", "e"));
        loader.addData(4, new YagoRule("a", "b", "c", "d", "e"));
        log.info("Loaded");
    }
}

Error:

        Caused by: org.h2.jdbc.JdbcSQLException: Table "YAGORULE" already exists; SQL statement:
CREATE TABLE "partitioned".YagoRule (_key INT NOT NULL,_val OTHER,_gg_val_str__ VARCHAR) engine "org.gridgain.grid.spi.indexing.h2.opt.GridH2Table$Engine" [42101-175]
            at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
            at org.h2.message.DbException.get(DbException.java:172)
            at org.h2.message.DbException.get(DbException.java:149)
            at org.h2.command.ddl.CreateTable.update(CreateTable.java:109)
            at org.h2.command.CommandContainer.update(CommandContainer.java:79)
            at org.h2.command.Command.executeUpdate(Command.java:253)
            at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:181)
            at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:156)
            at org.gridgain.grid.spi.indexing.h2.opt.GridH2Table$Engine.createTable(GridH2Table.java:704)
            at org.gridgain.grid.spi.indexing.h2.GridH2IndexingSpi.createTable(GridH2IndexingSpi.java:1167)
            at org.gridgain.grid.spi.indexing.h2.GridH2IndexingSpi.registerType(GridH2IndexingSpi.java:1025)
            ... 26 more
[19:29:21] GridGain node stopped OK [uptime=00:00:00:918]
Exception in thread "main" class org.gridgain.grid.GridException: Failed to finish operation (too many remaps): 32
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation

    at org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl.load0(GridDataLoaderImpl.java:386)
    at org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl.access$600(GridDataLoaderImpl.java:58)
    at org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl$4.apply(GridDataLoaderImpl.java:467)
    at org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl$4.apply(GridDataLoaderImpl.java:447)
    at org.gridgain.grid.util.future.GridFutureAdapter.notifyListener(GridFutureAdapter.java:384)
    at org.gridgain.grid.util.future.GridFutureAdapter.notifyListeners(GridFutureAdapter.java:371)
    at org.gridgain.grid.util.future.GridFutureAdapter.onDone(GridFutureAdapter.java:502)
    at org.gridgain.grid.util.future.GridFutureAdapter.onDone(GridFutureAdapter.java:472)
    at org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl$Buffer.onResponse(GridDataLoaderImpl.java:1032)
    at org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl$3.onMessage(GridDataLoaderImpl.java:201)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:654)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.access$1800(GridIoManager.java:62)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager$6.body(GridIoManager.java:615)
    at org.gridgain.grid.util.worker.GridWorker.run(GridWorker.java:151)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
ceefour commented 10 years ago

If only two nodes there's no error.

2-node configuration : (work well)

  1. in Eclipse
  2. ceefour@hendy:~/gridgain-platform-os-6.1.9-nix > bin/ggstart.sh ~/git/lumen-kb/cli/src/main/resources/id/ac/itb/ee/lskk/lumen/yago/yago.gridgain.xml

3-node configuration : (error)

  1. in Eclipse
  2. ceefour@hendy:~/gridgain-platform-os-6.1.9-nix > bin/ggstart.sh ~/git/lumen-kb/cli/src/main/resources/id/ac/itb/ee/lskk/lumen/yago/yago.gridgain.xml
  3. same as 2
agoncharuk commented 10 years ago

Thanks for reporting. This issue is related to class peer-deployment when using dataLoader, we are looking into this.

As a workaround you can switch from dataLoader to cache API:

   try (Grid grid = GridGain.start("examples/config/example-cache.xml")) {
        GridCache<Object, Object> cache = grid.cache("partitioned");

        cache.put(1, new YagoRule("a", "b", "c", "d", "e"));
        cache.put(2, new YagoRule("a", "b", "c", "d", "e"));
        cache.put(3, new YagoRule("a", "b", "c", "d", "e"));
        cache.put(4, new YagoRule("a", "b", "c", "d", "e"));
    }
lniskanen commented 9 years ago

Hi,

I am using 6.6.3 and get similary error with dataLoader with two nodes (separate JVMs) but not with one. Is this fixed already ?

error class org.gridgain.grid.GridException: Failed to finish operation (too many remaps): 32

Cheers, Lauri

yzhdanov commented 9 years ago

Can you please configure "peerClassLoadingEnabled" to false in configuration and make all the classes available on all nodes and see if issue is reproducible?

Thanks!

lniskanen commented 9 years ago

I set it to false, but still getting the same exception. http://www.gridgain.com/sdk/6.6.3/javadoc/org/gridgain/grid/GridConfiguration.html#DFLT_P2P_ENABLED

It's bit strange as the exceptions are raised for few first items but rest of the data gets uploaded quite allright.

dsetrakyan commented 9 years ago

Can you try setting it explicitly on GridConfiguration.setPeerClassLoadingEnabled(false)? Also, can you paste your full exception stack trace here? I want to make sure that it is absolutely identical exception.

lniskanen commented 9 years ago

Data load EXCEPTION: class org.gridgain.grid.GridException: Failed to finish operation (too many remaps): 32 For more information see: Troubleshooting: http://bit.ly/GridGain-Troubleshooting Documentation Center: http://bit.ly/GridGain-Documentation

org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl.load0(GridDataLoaderImpl.java:427) org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl.access$600(GridDataLoaderImpl.java:62) org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl$4.apply(GridDataLoaderImpl.java:517) org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl$4.apply(GridDataLoaderImpl.java:488) org.gridgain.grid.util.future.GridFutureAdapter.notifyListener(GridFutureAdapter.java:386) org.gridgain.grid.util.future.GridFutureAdapter.notifyListeners(GridFutureAdapter.java:373) org.gridgain.grid.util.future.GridFutureAdapter.onDone(GridFutureAdapter.java:504) org.gridgain.grid.util.future.GridFutureAdapter.onDone(GridFutureAdapter.java:474) org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl$Buffer.onResponse(GridDataLoaderImpl.java:1106) org.gridgain.grid.kernal.processors.dataload.GridDataLoaderImpl$3.onMessage(GridDataLoaderImpl.java:235) org.gridgain.grid.kernal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:662) org.gridgain.grid.kernal.managers.communication.GridIoManager.access$1900(GridIoManager.java:62) org.gridgain.grid.kernal.managers.communication.GridIoManager$6.body(GridIoManager.java:623) org.gridgain.grid.util.worker.GridWorker.run(GridWorker.java:151) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) java.lang.Thread.run(Thread.java:745)

dsetrakyan commented 9 years ago

We cannot reproduce this issue internally. It would help a great deal if you could provide a small reproducible example that we could test on. Would this be possible?

lniskanen commented 9 years ago

Sure thing. It will take a moment but I will drop you an email.