BinaryJedis.multi(TransactionBlock) should not call discard when exception occurred

* In BinaryJedis.multi(TransactionBlock), multi & exec already fired before exception occured, so sending discard has no effect, and made another error
** add unit test (error inside TransactionBlock)
*** Transaction with error - Redis discards transaction automatically (execabort)
*** Transaction with error - Redis doesn't roll back (force to execute all)
This commit is contained in:
Jungtaek Lim
2013-12-09 10:54:53 +09:00
parent 46734e646a
commit 10c131bbf0
2 changed files with 51 additions and 8 deletions

View File

@@ -1685,13 +1685,9 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
public List<Object> multi(final TransactionBlock jedisTransaction) {
List<Object> results = null;
jedisTransaction.setClient(client);
try {
client.multi();
jedisTransaction.execute();
results = jedisTransaction.exec();
} catch (Exception ex) {
jedisTransaction.discard();
}
client.multi();
jedisTransaction.execute();
results = jedisTransaction.exec();
return results;
}