|
69 | 69 | import java.util.ArrayList;
|
70 | 70 | import java.util.Collections;
|
71 | 71 | import java.util.List;
|
| 72 | +import java.util.Set; |
72 | 73 | import java.util.concurrent.ExecutionException;
|
73 | 74 | import java.util.concurrent.ExecutorService;
|
74 | 75 | import java.util.concurrent.Executors;
|
@@ -534,13 +535,18 @@ public void testAsyncTransactionManagerCommitWithTag() {
|
534 | 535 |
|
535 | 536 | @Test
|
536 | 537 | public void singleUse() {
|
537 |
| -DatabaseClient client = |
538 |
| -spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); |
| 538 | +DatabaseClientImpl client = |
| 539 | +(DatabaseClientImpl) |
| 540 | +spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); |
| 541 | +Set<PooledSessionFuture> checkedOut = client.pool.checkedOutSessions; |
| 542 | +assertThat(checkedOut).isEmpty(); |
539 | 543 | try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) {
|
540 | 544 | assertThat(rs.next()).isTrue();
|
| 545 | +assertThat(checkedOut).hasSize(1); |
541 | 546 | assertThat(rs.getLong(0)).isEqualTo(1L);
|
542 | 547 | assertThat(rs.next()).isFalse();
|
543 | 548 | }
|
| 549 | +assertThat(checkedOut).isEmpty(); |
544 | 550 | }
|
545 | 551 |
|
546 | 552 | @Test
|
@@ -2097,4 +2103,71 @@ public void testAsyncTransactionManagerCommitWithPriority() {
|
2097 | 2103 | assertNotNull(request.getRequestOptions());
|
2098 | 2104 | assertEquals(Priority.PRIORITY_HIGH, request.getRequestOptions().getPriority());
|
2099 | 2105 | }
|
| 2106 | + |
| 2107 | +@Test |
| 2108 | +public void singleUseNoAction_ClearsCheckedOutSession() { |
| 2109 | +DatabaseClientImpl client = |
| 2110 | +(DatabaseClientImpl) |
| 2111 | +spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); |
| 2112 | +Set<PooledSessionFuture> checkedOut = client.pool.checkedOutSessions; |
| 2113 | +assertThat(checkedOut).isEmpty(); |
| 2114 | + |
| 2115 | +// Getting a single use read-only transaction and not using it should not cause any sessions |
| 2116 | +// to be stuck in the map of checked out sessions. |
| 2117 | +client.singleUse().close(); |
| 2118 | + |
| 2119 | +assertThat(checkedOut).isEmpty(); |
| 2120 | +} |
| 2121 | + |
| 2122 | +@Test |
| 2123 | +public void singleUseReadOnlyTransactionNoAction_ClearsCheckedOutSession() { |
| 2124 | +DatabaseClientImpl client = |
| 2125 | +(DatabaseClientImpl) |
| 2126 | +spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); |
| 2127 | +Set<PooledSessionFuture> checkedOut = client.pool.checkedOutSessions; |
| 2128 | +assertThat(checkedOut).isEmpty(); |
| 2129 | + |
| 2130 | +client.singleUseReadOnlyTransaction().close(); |
| 2131 | + |
| 2132 | +assertThat(checkedOut).isEmpty(); |
| 2133 | +} |
| 2134 | + |
| 2135 | +@Test |
| 2136 | +public void readWriteTransactionNoAction_ClearsCheckedOutSession() { |
| 2137 | +DatabaseClientImpl client = |
| 2138 | +(DatabaseClientImpl) |
| 2139 | +spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); |
| 2140 | +Set<PooledSessionFuture> checkedOut = client.pool.checkedOutSessions; |
| 2141 | +assertThat(checkedOut).isEmpty(); |
| 2142 | + |
| 2143 | +client.readWriteTransaction(); |
| 2144 | + |
| 2145 | +assertThat(checkedOut).isEmpty(); |
| 2146 | +} |
| 2147 | + |
| 2148 | +@Test |
| 2149 | +public void readOnlyTransactionNoAction_ClearsCheckedOutSession() { |
| 2150 | +DatabaseClientImpl client = |
| 2151 | +(DatabaseClientImpl) |
| 2152 | +spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); |
| 2153 | +Set<PooledSessionFuture> checkedOut = client.pool.checkedOutSessions; |
| 2154 | +assertThat(checkedOut).isEmpty(); |
| 2155 | + |
| 2156 | +client.readOnlyTransaction().close(); |
| 2157 | + |
| 2158 | +assertThat(checkedOut).isEmpty(); |
| 2159 | +} |
| 2160 | + |
| 2161 | +@Test |
| 2162 | +public void transactionManagerNoAction_ClearsCheckedOutSession() { |
| 2163 | +DatabaseClientImpl client = |
| 2164 | +(DatabaseClientImpl) |
| 2165 | +spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); |
| 2166 | +Set<PooledSessionFuture> checkedOut = client.pool.checkedOutSessions; |
| 2167 | +assertThat(checkedOut).isEmpty(); |
| 2168 | + |
| 2169 | +client.transactionManager().close(); |
| 2170 | + |
| 2171 | +assertThat(checkedOut).isEmpty(); |
| 2172 | +} |
2100 | 2173 | }
|
0 commit comments