Skip to content

Commit 05fb9ea

Browse files
committed
DATACOUCH-585 - Support ScanConsistency for count() queries.
1 parent e244440 commit 05fb9ea

File tree

5 files changed

+38
-12
lines changed

5 files changed

+38
-12
lines changed

src/main/java/org/springframework/data/couchbase/repository/support/SimpleReactiveCouchbaseRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ public Mono<Void> deleteAll(final Publisher<? extends T> entityStream) {
181181
@SuppressWarnings("unchecked")
182182
@Override
183183
public Mono<Long> count() {
184-
return operations.findByQuery(entityInformation.getJavaType()).count();
184+
return operations.findByQuery(entityInformation.getJavaType()).consistentWith(buildQueryScanConsistency()).count();
185185
}
186186

187187
@SuppressWarnings("unchecked")

src/test/java/org/springframework/data/couchbase/domain/AirportRepository.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.util.List;
2020

21+
import org.jetbrains.annotations.NotNull;
2122
import org.springframework.data.couchbase.repository.Query;
2223
import org.springframework.data.couchbase.repository.ScanConsistency;
2324
import org.springframework.data.repository.PagingAndSortingRepository;
@@ -38,15 +39,26 @@ public interface AirportRepository extends PagingAndSortingRepository<Airport, S
3839
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
3940
Iterable<Airport> findAll();
4041

42+
@Override
43+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
44+
Airport save(Airport airport);
45+
46+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
4147
List<Airport> findAllByIata(String iata);
4248

4349
@Query("#{#n1ql.selectEntity} where iata = $1")
4450
List<Airport> getAllByIata(String iata);
4551

4652
long countByIataIn(String... iata);
4753

54+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
4855
long countByIcaoAndIataIn(String icao, String... iata);
4956

57+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
5058
long countByIcaoOrIataIn(String icao, String... iata);
5159

60+
@Override
61+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
62+
long count();
63+
5264
}

src/test/java/org/springframework/data/couchbase/domain/ReactiveAirportRepository.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,23 @@ public interface ReactiveAirportRepository extends ReactiveSortingRepository<Air
3838
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
3939
Flux<Airport> findAll();
4040

41+
@Override
42+
Mono<Airport> save(Airport a);
43+
44+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
4145
Flux<Airport> findAllByIata(String iata);
4246

47+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
4348
Mono<Long> countByIataIn(String... iatas);
4449

50+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
4551
Mono<Long> countByIcaoAndIataIn(String icao, String... iatas);
52+
53+
@Override
54+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
55+
Mono<Long> count();
56+
57+
@Override
58+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
59+
Mono<Airport> findById(String var1);
4660
}

src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,8 @@ void count() {
134134
iatas[i].toLowerCase(Locale.ROOT) /* lcao */);
135135
airportRepository.save(airport);
136136
}
137-
sleep(1000);
138-
long airportCount = 0;
139-
airportCount = airportRepository.count();
137+
138+
long airportCount = airportRepository.count();
140139
assertEquals(7, airportCount);
141140

142141
airportCount = airportRepository.countByIataIn("JFK", "IAD", "SFO");

src/test/java/org/springframework/data/couchbase/repository/ReactiveCouchbaseRepositoryQueryIntegrationTests.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.junit.jupiter.api.Test;
3030
import org.springframework.beans.factory.annotation.Autowired;
3131
import org.springframework.context.annotation.Configuration;
32+
import org.springframework.dao.DataRetrievalFailureException;
3233
import org.springframework.data.couchbase.CouchbaseClientFactory;
3334
import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration;
3435
import org.springframework.data.couchbase.domain.Airport;
@@ -100,19 +101,15 @@ void count() {
100101
String[] iatas = { "JFK", "IAD", "SFO", "SJC", "SEA", "LAX", "PHX" };
101102
Future[] future = new Future[iatas.length];
102103
ExecutorService executorService = Executors.newFixedThreadPool(iatas.length);
103-
104104
try {
105105
Callable<Boolean>[] suppliers = new Callable[iatas.length];
106106
for (int i = 0; i < iatas.length; i++) {
107107
Airport airport = new Airport("airports::" + iatas[i], iatas[i] /*iata*/, iatas[i].toLowerCase() /* lcao */);
108108
airportRepository.save(airport).block();
109109
}
110-
try {
111-
Thread.sleep(1000);
112-
} catch (InterruptedException ie) {}
113-
Long airportCount = null;
114-
airportCount = airportRepository.count().block();
115-
assertEquals(7, airportCount);
110+
111+
Long airportCount = airportCount = airportRepository.count().block();
112+
assertEquals(iatas.length, airportCount);
116113

117114
airportCount = airportRepository.countByIataIn("JFK", "IAD", "SFO").block();
118115
assertEquals(3, airportCount);
@@ -126,7 +123,11 @@ void count() {
126123
} finally {
127124
for (int i = 0; i < iatas.length; i++) {
128125
Airport airport = new Airport("airports::" + iatas[i], iatas[i] /*iata*/, iatas[i] /* lcao */);
129-
airportRepository.delete(airport).block();
126+
try {
127+
airportRepository.delete(airport).block();
128+
} catch (DataRetrievalFailureException drfe) {
129+
System.out.println("Failed to delete: " + airport);
130+
}
130131
}
131132
}
132133
}

0 commit comments

Comments
 (0)