Closed manmountain closed 8 years ago
This is expected when two nodes send the same object. This shouldn't happen too often, as there are some countermeasures, but when a node doesn't send a requested object in time it will be requested from multiple other connected nodes which will cause this exception. As it's not possible to ignore specific SQL exceptions I wanted to keep logging this for debugging purposes. I think there should be better ways to handle this, and I'm glad for any proposals.
Should now be fixed, there was an issue with the fallback mechanism, and initial fetching of objects was very inefficient.
JdbcSQLException when running the Jabit demo client.
Exception in thread "pool-1-thread-7" java.lang.RuntimeException: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "CONSTRAINT_INDEX_6 ON PUBLIC.MESSAGE(IV) VALUES (X'769f8dca6666fcbd6e97c59b1ea00cfccfac4272ce98aae9ea54e2a98d54f763', 7)"; SQL statement: INSERT INTO Message (iv, type, sender, recipient, data, sent, received, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?) [23505-187] at ch.dissem.bitmessage.repository.JdbcMessageRepository.save(JdbcMessageRepository.java:184) at ch.dissem.bitmessage.DefaultMessageListener.receive(DefaultMessageListener.java:127) at ch.dissem.bitmessage.DefaultMessageListener.receive(DefaultMessageListener.java:61) at ch.dissem.bitmessage.networking.Connection.receiveMessage(Connection.java:279) at ch.dissem.bitmessage.networking.Connection.run(Connection.java:128) 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) Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "CONSTRAINT_INDEX_6 ON PUBLIC.MESSAGE(IV) VALUES (X'769f8dca6666fcbd6e97c59b1ea00cfccfac4272ce98aae9ea54e2a98d54f763', 7)"; SQL statement: INSERT INTO Message (iv, type, sender, recipient, data, sent, received, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?) [23505-187] at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) at org.h2.message.DbException.get(DbException.java:179) at org.h2.message.DbException.get(DbException.java:155) at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:102) at org.h2.mvstore.db.MVSecondaryIndex.checkUnique(MVSecondaryIndex.java:233) at org.h2.mvstore.db.MVSecondaryIndex.add(MVSecondaryIndex.java:191) at org.h2.mvstore.db.MVTable.addRow(MVTable.java:638) at org.h2.command.dml.Insert.insertRows(Insert.java:156) at org.h2.command.dml.Insert.update(Insert.java:114) at org.h2.command.CommandContainer.update(CommandContainer.java:78) at org.h2.command.Command.executeUpdate(Command.java:254) at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:157) at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:143) at ch.dissem.bitmessage.repository.JdbcMessageRepository.insert(JdbcMessageRepository.java:203) at ch.dissem.bitmessage.repository.JdbcMessageRepository.save(JdbcMessageRepository.java:161) ... 7 more