Fix to only cancel query once (#2152)

Change DefaultOrmQuery.cancel() to call underlying jdbc cancel once

- Refactor tidy already cancelled check (pre query execution)
- Remove unnecessary extra transaction.end() call on future query execution (as already handled by CallableQueryList etc)
This commit is contained in:
Rob Bygrave
2021-02-03 14:51:42 +13:00
committed by GitHub
parent fca54dbbe3
commit 0be98d7989
4 changed files with 19 additions and 45 deletions
@@ -1,7 +1,7 @@
package org.tests.query;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.DB;
import io.ebean.FutureList;
import io.ebean.Transaction;
import org.tests.model.basic.Order;
@@ -22,17 +22,19 @@ public class TestQueryFindFutureList extends BaseTestCase {
ResetBasicData.reset();
// warm the connection pool
Transaction t0 = Ebean.getServer(null).createTransaction();
Transaction t1 = Ebean.getServer(null).createTransaction();
Transaction t2 = Ebean.getServer(null).createTransaction();
Transaction t0 = DB.createTransaction();
Transaction t1 = DB.createTransaction();
Transaction t2 = DB.createTransaction();
t0.end();
t1.end();
t2.end();
FutureList<Order> futureList = Ebean.find(Order.class).findFutureList();
FutureList<Order> futureList = DB.find(Order.class).findFutureList();
Thread.sleep(10);
futureList.cancel(true);
// calling again is ignored
futureList.cancel(true);
// don't shutdown immediately
Thread.sleep(50);
@@ -43,12 +45,12 @@ public class TestQueryFindFutureList extends BaseTestCase {
ResetBasicData.reset();
FutureList<Order> futureList = Ebean.find(Order.class).findFutureList();
FutureList<Order> futureList = DB.find(Order.class).findFutureList();
// wait for it to complete
List<Order> orders = futureList.getUnchecked();
assertEquals(Ebean.find(Order.class).findCount(), orders.size());
assertEquals(DB.find(Order.class).findCount(), orders.size());
}
@Test
@@ -56,12 +58,12 @@ public class TestQueryFindFutureList extends BaseTestCase {
ResetBasicData.reset();
FutureList<Order> futureList = Ebean.find(Order.class).findFutureList();
FutureList<Order> futureList = DB.find(Order.class).findFutureList();
// wait for it to complete
List<Order> orders = futureList.getUnchecked(1, TimeUnit.SECONDS);
assertEquals(Ebean.find(Order.class).findCount(), orders.size());
assertEquals(DB.find(Order.class).findCount(), orders.size());
}
}