Skip to content

Commit bd9b26a

Browse files
nikagradkropachev
authored andcommitted
fix: use unique partition keys in QueryReturnTypesIT to avoid LWT contention
1 parent 10c2b95 commit bd9b26a

1 file changed

Lines changed: 39 additions & 33 deletions

File tree

integration-tests/src/test/java/com/datastax/oss/driver/mapper/QueryReturnTypesIT.java

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import java.util.concurrent.CompletableFuture;
5151
import java.util.concurrent.CompletionStage;
5252
import java.util.concurrent.ExecutionException;
53+
import java.util.concurrent.atomic.AtomicInteger;
5354
import java.util.stream.Stream;
5455
import org.junit.Before;
5556
import org.junit.BeforeClass;
@@ -71,6 +72,10 @@ public class QueryReturnTypesIT {
7172

7273
private static TestDao dao;
7374

75+
private static final AtomicInteger UNIQUE_ID = new AtomicInteger();
76+
77+
private int testId;
78+
7479
@BeforeClass
7580
public static void createSchema() {
7681
CqlSession session = SESSION_RULE.session();
@@ -87,38 +92,39 @@ public static void createSchema() {
8792

8893
@Before
8994
public void insertData() {
95+
testId = UNIQUE_ID.getAndIncrement();
9096
for (int i = 0; i < 10; i++) {
91-
dao.insert(new TestEntity(1, i, i));
97+
dao.insert(new TestEntity(testId, i, i));
9298
}
9399
}
94100

95101
@Test
96102
public void should_execute_query_and_map_to_void() {
97-
dao.delete(1, 1);
98-
assertThat(dao.findByIdAndRank(1, 1)).isNull();
103+
dao.delete(testId, 1);
104+
assertThat(dao.findByIdAndRank(testId, 1)).isNull();
99105
}
100106

101107
@Test
102108
public void should_execute_async_query_and_map_to_void() {
103-
CompletableFutures.getUninterruptibly(dao.deleteAsync(1, 1).toCompletableFuture());
104-
assertThat(dao.findByIdAndRank(1, 1)).isNull();
109+
CompletableFutures.getUninterruptibly(dao.deleteAsync(testId, 1).toCompletableFuture());
110+
assertThat(dao.findByIdAndRank(testId, 1)).isNull();
105111
}
106112

107113
@Test
108114
public void should_execute_conditional_query_and_map_to_boolean() {
109-
assertThat(dao.deleteIfExists(1, 1)).isTrue();
110-
assertThat(dao.deleteIfExists(1, 1)).isFalse();
115+
assertThat(dao.deleteIfExists(testId, 1)).isTrue();
116+
assertThat(dao.deleteIfExists(testId, 1)).isFalse();
111117
}
112118

113119
@Test
114120
public void should_execute_async_conditional_query_and_map_to_boolean() {
115-
assertThat(CompletableFutures.getUninterruptibly(dao.deleteIfExistsAsync(1, 1))).isTrue();
116-
assertThat(CompletableFutures.getUninterruptibly(dao.deleteIfExistsAsync(1, 1))).isFalse();
121+
assertThat(CompletableFutures.getUninterruptibly(dao.deleteIfExistsAsync(testId, 1))).isTrue();
122+
assertThat(CompletableFutures.getUninterruptibly(dao.deleteIfExistsAsync(testId, 1))).isFalse();
117123
}
118124

119125
@Test
120126
public void should_execute_count_query_and_map_to_long() {
121-
assertThat(dao.countById(1)).isEqualTo(10);
127+
assertThat(dao.countById(testId)).isEqualTo(10);
122128
}
123129

124130
@Test
@@ -133,119 +139,119 @@ public void should_fail_to_map_to_long_if_query_returns_other_type() {
133139

134140
@Test
135141
public void should_execute_async_count_query_and_map_to_long() {
136-
assertThat(CompletableFutures.getUninterruptibly(dao.countByIdAsync(1))).isEqualTo(10);
142+
assertThat(CompletableFutures.getUninterruptibly(dao.countByIdAsync(testId))).isEqualTo(10);
137143
}
138144

139145
@Test
140146
public void should_execute_query_and_map_to_row() {
141-
Row row = dao.findRowByIdAndRank(1, 1);
147+
Row row = dao.findRowByIdAndRank(testId, 1);
142148
assertThat(row).isNotNull();
143149
assertThat(row.getColumnDefinitions().size()).isEqualTo(3);
144-
assertThat(row.getInt("id")).isEqualTo(1);
150+
assertThat(row.getInt("id")).isEqualTo(testId);
145151
assertThat(row.getInt("rank")).isEqualTo(1);
146152
assertThat(row.getInt("value")).isEqualTo(1);
147153
}
148154

149155
@Test
150156
public void should_execute_async_query_and_map_to_row() {
151-
Row row = CompletableFutures.getUninterruptibly(dao.findRowByIdAndRankAsync(1, 1));
157+
Row row = CompletableFutures.getUninterruptibly(dao.findRowByIdAndRankAsync(testId, 1));
152158
assertThat(row).isNotNull();
153159
assertThat(row.getColumnDefinitions().size()).isEqualTo(3);
154-
assertThat(row.getInt("id")).isEqualTo(1);
160+
assertThat(row.getInt("id")).isEqualTo(testId);
155161
assertThat(row.getInt("rank")).isEqualTo(1);
156162
assertThat(row.getInt("value")).isEqualTo(1);
157163
}
158164

159165
@Test
160166
public void should_execute_query_and_map_to_result_set() {
161-
ResultSet resultSet = dao.findRowsById(1);
167+
ResultSet resultSet = dao.findRowsById(testId);
162168
assertThat(resultSet.all()).hasSize(10);
163169
}
164170

165171
@Test
166172
public void should_execute_async_query_and_map_to_result_set() {
167-
AsyncResultSet resultSet = CompletableFutures.getUninterruptibly(dao.findRowsByIdAsync(1));
173+
AsyncResultSet resultSet = CompletableFutures.getUninterruptibly(dao.findRowsByIdAsync(testId));
168174
assertThat(ImmutableList.copyOf(resultSet.currentPage())).hasSize(10);
169175
assertThat(resultSet.hasMorePages()).isFalse();
170176
}
171177

172178
@Test
173179
public void should_execute_query_and_map_to_entity() {
174-
TestEntity entity = dao.findByIdAndRank(1, 1);
175-
assertThat(entity.getId()).isEqualTo(1);
180+
TestEntity entity = dao.findByIdAndRank(testId, 1);
181+
assertThat(entity.getId()).isEqualTo(testId);
176182
assertThat(entity.getRank()).isEqualTo(1);
177183
assertThat(entity.getValue()).isEqualTo(1);
178184

179-
entity = dao.findByIdAndRank(2, 1);
185+
entity = dao.findByIdAndRank(-(testId + 1), 1);
180186
assertThat(entity).isNull();
181187
}
182188

183189
@Test
184190
public void should_execute_async_query_and_map_to_entity() {
185-
TestEntity entity = CompletableFutures.getUninterruptibly(dao.findByIdAndRankAsync(1, 1));
186-
assertThat(entity.getId()).isEqualTo(1);
191+
TestEntity entity = CompletableFutures.getUninterruptibly(dao.findByIdAndRankAsync(testId, 1));
192+
assertThat(entity.getId()).isEqualTo(testId);
187193
assertThat(entity.getRank()).isEqualTo(1);
188194
assertThat(entity.getValue()).isEqualTo(1);
189195

190-
entity = dao.findByIdAndRank(2, 1);
196+
entity = dao.findByIdAndRank(-(testId + 1), 1);
191197
assertThat(entity).isNull();
192198
}
193199

194200
@Test
195201
public void should_execute_query_and_map_to_optional_entity() {
196-
Optional<TestEntity> maybeEntity = dao.findOptionalByIdAndRank(1, 1);
202+
Optional<TestEntity> maybeEntity = dao.findOptionalByIdAndRank(testId, 1);
197203
assertThat(maybeEntity)
198204
.hasValueSatisfying(
199205
entity -> {
200-
assertThat(entity.getId()).isEqualTo(1);
206+
assertThat(entity.getId()).isEqualTo(testId);
201207
assertThat(entity.getRank()).isEqualTo(1);
202208
assertThat(entity.getValue()).isEqualTo(1);
203209
});
204210

205-
maybeEntity = dao.findOptionalByIdAndRank(2, 1);
211+
maybeEntity = dao.findOptionalByIdAndRank(-(testId + 1), 1);
206212
assertThat(maybeEntity).isEmpty();
207213
}
208214

209215
@Test
210216
public void should_execute_async_query_and_map_to_optional_entity() {
211217
Optional<TestEntity> maybeEntity =
212-
CompletableFutures.getUninterruptibly(dao.findOptionalByIdAndRankAsync(1, 1));
218+
CompletableFutures.getUninterruptibly(dao.findOptionalByIdAndRankAsync(testId, 1));
213219
assertThat(maybeEntity)
214220
.hasValueSatisfying(
215221
entity -> {
216-
assertThat(entity.getId()).isEqualTo(1);
222+
assertThat(entity.getId()).isEqualTo(testId);
217223
assertThat(entity.getRank()).isEqualTo(1);
218224
assertThat(entity.getValue()).isEqualTo(1);
219225
});
220226

221-
maybeEntity = dao.findOptionalByIdAndRank(2, 1);
227+
maybeEntity = dao.findOptionalByIdAndRank(-(testId + 1), 1);
222228
assertThat(maybeEntity).isEmpty();
223229
}
224230

225231
@Test
226232
public void should_execute_query_and_map_to_iterable() {
227-
PagingIterable<TestEntity> iterable = dao.findById(1);
233+
PagingIterable<TestEntity> iterable = dao.findById(testId);
228234
assertThat(iterable.all()).hasSize(10);
229235
}
230236

231237
@Test
232238
public void should_execute_query_and_map_to_stream() {
233-
Stream<TestEntity> stream = dao.findByIdAsStream(1);
239+
Stream<TestEntity> stream = dao.findByIdAsStream(testId);
234240
assertThat(stream).hasSize(10);
235241
}
236242

237243
@Test
238244
public void should_execute_async_query_and_map_to_iterable() {
239245
MappedAsyncPagingIterable<TestEntity> iterable =
240-
CompletableFutures.getUninterruptibly(dao.findByIdAsync(1));
246+
CompletableFutures.getUninterruptibly(dao.findByIdAsync(testId));
241247
assertThat(ImmutableList.copyOf(iterable.currentPage())).hasSize(10);
242248
assertThat(iterable.hasMorePages()).isFalse();
243249
}
244250

245251
@Test
246252
public void should_execute_query_and_map_to_stream_async()
247253
throws ExecutionException, InterruptedException {
248-
CompletableFuture<Stream<TestEntity>> stream = dao.findByIdAsStreamAsync(1);
254+
CompletableFuture<Stream<TestEntity>> stream = dao.findByIdAsStreamAsync(testId);
249255
assertThat(stream.get()).hasSize(10);
250256
}
251257

0 commit comments

Comments
 (0)