Skip to content

Commit ada1c80

Browse files
authored
Reinstate the getDefaultConsistency() method in the Configuration. (#1244)
Closes #1243. Co-authored-by: mikereiche <michael.reiche@couchbase.com>
1 parent f4daeb6 commit ada1c80

File tree

9 files changed

+188
-17
lines changed

9 files changed

+188
-17
lines changed

src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.HashSet;
2323
import java.util.Set;
2424

25+
import com.couchbase.client.java.query.QueryScanConsistency;
2526
import org.springframework.beans.factory.annotation.Autowired;
2627
import org.springframework.beans.factory.config.BeanDefinition;
2728
import org.springframework.context.annotation.Bean;
@@ -157,7 +158,8 @@ protected void configureEnvironment(final ClusterEnvironment.Builder builder) {
157158
@Bean(name = BeanNames.COUCHBASE_TEMPLATE)
158159
public CouchbaseTemplate couchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
159160
MappingCouchbaseConverter mappingCouchbaseConverter, TranslationService couchbaseTranslationService) {
160-
return new CouchbaseTemplate(couchbaseClientFactory, mappingCouchbaseConverter, couchbaseTranslationService);
161+
return new CouchbaseTemplate(couchbaseClientFactory, mappingCouchbaseConverter, couchbaseTranslationService,
162+
getDefaultConsistency());
161163
}
162164

163165
public CouchbaseTemplate couchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
@@ -168,8 +170,8 @@ public CouchbaseTemplate couchbaseTemplate(CouchbaseClientFactory couchbaseClien
168170
@Bean(name = BeanNames.REACTIVE_COUCHBASE_TEMPLATE)
169171
public ReactiveCouchbaseTemplate reactiveCouchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
170172
MappingCouchbaseConverter mappingCouchbaseConverter, TranslationService couchbaseTranslationService) {
171-
return new ReactiveCouchbaseTemplate(couchbaseClientFactory, mappingCouchbaseConverter,
172-
couchbaseTranslationService);
173+
return new ReactiveCouchbaseTemplate(couchbaseClientFactory, mappingCouchbaseConverter, couchbaseTranslationService,
174+
getDefaultConsistency());
173175
}
174176

175177
public ReactiveCouchbaseTemplate reactiveCouchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
@@ -379,4 +381,8 @@ private boolean nonShadowedJacksonPresent() {
379381
}
380382
}
381383

384+
public QueryScanConsistency getDefaultConsistency() {
385+
return null;
386+
}
387+
382388
}

src/main/java/org/springframework/data/couchbase/core/CouchbaseOperations.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.springframework.data.couchbase.CouchbaseClientFactory;
2020
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;
2121

22+
import com.couchbase.client.java.query.QueryScanConsistency;
23+
2224
/**
2325
* Defines common operations on the Couchbase data source, most commonly implemented by {@link CouchbaseTemplate}.
2426
*/
@@ -44,4 +46,8 @@ public interface CouchbaseOperations extends FluentCouchbaseOperations {
4446
*/
4547
CouchbaseClientFactory getCouchbaseClientFactory();
4648

49+
/**
50+
* Returns the default consistency to use for queries
51+
*/
52+
QueryScanConsistency getConsistency();
4753
}

src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
import org.springframework.data.couchbase.core.mapping.CouchbaseMappingContext;
2929
import org.springframework.data.couchbase.core.mapping.CouchbasePersistentEntity;
3030
import org.springframework.data.couchbase.core.mapping.CouchbasePersistentProperty;
31-
import org.springframework.data.couchbase.core.support.PseudoArgs;
3231
import org.springframework.data.mapping.context.MappingContext;
3332
import org.springframework.lang.Nullable;
3433

3534
import com.couchbase.client.java.Collection;
35+
import com.couchbase.client.java.query.QueryScanConsistency;
3636

3737
/**
3838
* Implements lower-level couchbase operations on top of the SDK with entity mapping capabilities.
@@ -50,18 +50,25 @@ public class CouchbaseTemplate implements CouchbaseOperations, ApplicationContex
5050
private final MappingContext<? extends CouchbasePersistentEntity<?>, CouchbasePersistentProperty> mappingContext;
5151
private final ReactiveCouchbaseTemplate reactiveCouchbaseTemplate;
5252
private @Nullable CouchbasePersistentEntityIndexCreator indexCreator;
53+
private QueryScanConsistency scanConsistency;
5354

5455
public CouchbaseTemplate(final CouchbaseClientFactory clientFactory, final CouchbaseConverter converter) {
5556
this(clientFactory, converter, new JacksonTranslationService());
5657
}
5758

5859
public CouchbaseTemplate(final CouchbaseClientFactory clientFactory, final CouchbaseConverter converter,
5960
final TranslationService translationService) {
61+
this(clientFactory, converter, translationService, null);
62+
}
63+
64+
public CouchbaseTemplate(final CouchbaseClientFactory clientFactory, final CouchbaseConverter converter,
65+
final TranslationService translationService, QueryScanConsistency scanConsistency) {
6066
this.clientFactory = clientFactory;
6167
this.converter = converter;
6268
this.templateSupport = new CouchbaseTemplateSupport(converter, translationService);
63-
this.reactiveCouchbaseTemplate = new ReactiveCouchbaseTemplate(clientFactory, converter, translationService);
64-
69+
this.reactiveCouchbaseTemplate = new ReactiveCouchbaseTemplate(clientFactory, converter, translationService,
70+
scanConsistency);
71+
this.scanConsistency = scanConsistency;
6572
this.mappingContext = this.converter.getMappingContext();
6673
if (mappingContext instanceof CouchbaseMappingContext) {
6774
CouchbaseMappingContext cmc = (CouchbaseMappingContext) mappingContext;
@@ -136,6 +143,11 @@ public CouchbaseClientFactory getCouchbaseClientFactory() {
136143
return clientFactory;
137144
}
138145

146+
@Override
147+
public QueryScanConsistency getConsistency() {
148+
return scanConsistency;
149+
}
150+
139151
/**
140152
* Provides access to a {@link Collection} on the configured {@link CouchbaseClientFactory}.
141153
*

src/main/java/org/springframework/data/couchbase/core/ReactiveCouchbaseOperations.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;
2121
import org.springframework.data.couchbase.core.support.PseudoArgs;
2222

23+
import com.couchbase.client.java.query.QueryScanConsistency;
24+
2325
/**
2426
* Defines common operations on the Couchbase data source, most commonly implemented by
2527
* {@link ReactiveCouchbaseTemplate}.
@@ -47,8 +49,12 @@ public interface ReactiveCouchbaseOperations extends ReactiveFluentCouchbaseOper
4749
CouchbaseClientFactory getCouchbaseClientFactory();
4850

4951
/**
50-
* @@return the pseudoArgs from the ThreadLocal field of the CouchbaseOperations
52+
* @return the pseudoArgs from the ThreadLocal field of the CouchbaseOperations
5153
*/
5254
PseudoArgs<?> getPseudoArgs();
5355

56+
/**
57+
* @return the default consistency to use for queries
58+
*/
59+
QueryScanConsistency getConsistency();
5460
}

src/main/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplate.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.data.couchbase.core.support.PseudoArgs;
2929

3030
import com.couchbase.client.java.Collection;
31+
import com.couchbase.client.java.query.QueryScanConsistency;
3132

3233
/**
3334
* template class for Reactive Couchbase operations
@@ -44,17 +45,24 @@ public class ReactiveCouchbaseTemplate implements ReactiveCouchbaseOperations, A
4445
private final PersistenceExceptionTranslator exceptionTranslator;
4546
private final ReactiveCouchbaseTemplateSupport templateSupport;
4647
private ThreadLocal<PseudoArgs<?>> threadLocalArgs = new ThreadLocal<>();
48+
private QueryScanConsistency scanConsistency;
4749

4850
public ReactiveCouchbaseTemplate(final CouchbaseClientFactory clientFactory, final CouchbaseConverter converter) {
4951
this(clientFactory, converter, new JacksonTranslationService());
5052
}
5153

5254
public ReactiveCouchbaseTemplate(final CouchbaseClientFactory clientFactory, final CouchbaseConverter converter,
5355
final TranslationService translationService) {
56+
this(clientFactory, converter, translationService, null);
57+
}
58+
59+
public ReactiveCouchbaseTemplate(final CouchbaseClientFactory clientFactory, final CouchbaseConverter converter,
60+
final TranslationService translationService, QueryScanConsistency scanConsistency) {
5461
this.clientFactory = clientFactory;
5562
this.converter = converter;
5663
this.exceptionTranslator = clientFactory.getExceptionTranslator();
5764
this.templateSupport = new ReactiveCouchbaseTemplateSupport(converter, translationService);
65+
this.scanConsistency = scanConsistency;
5866
}
5967

6068
@Override
@@ -165,4 +173,12 @@ public PseudoArgs<?> getPseudoArgs() {
165173
return threadLocalArgs == null ? null : threadLocalArgs.get();
166174
}
167175

176+
/**
177+
* {@inheritDoc}
178+
*/
179+
@Override
180+
public QueryScanConsistency getConsistency() {
181+
return scanConsistency;
182+
}
183+
168184
}

src/main/java/org/springframework/data/couchbase/core/ReactiveFindByQueryOperationSupport.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ public Flux<T> all() {
201201

202202
@Override
203203
public QueryOptions buildOptions(QueryOptions options) {
204-
QueryOptions opts = query.buildQueryOptions(options, scanConsistency);
204+
QueryScanConsistency qsc = scanConsistency != null ? scanConsistency : template.getConsistency();
205+
QueryOptions opts = query.buildQueryOptions(options, qsc);
205206
return opts;
206207
}
207208

src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByQueryOperationSupport.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.springframework.data.couchbase.core;
1717

18-
import org.springframework.util.Assert;
1918
import reactor.core.publisher.Flux;
2019
import reactor.core.publisher.Mono;
2120

@@ -26,6 +25,7 @@
2625
import org.springframework.data.couchbase.core.query.Query;
2726
import org.springframework.data.couchbase.core.support.PseudoArgs;
2827
import org.springframework.data.couchbase.core.support.TemplateUtils;
28+
import org.springframework.util.Assert;
2929

3030
import com.couchbase.client.java.query.QueryOptions;
3131
import com.couchbase.client.java.query.QueryScanConsistency;
@@ -45,8 +45,7 @@ public ReactiveRemoveByQueryOperationSupport(final ReactiveCouchbaseTemplate tem
4545

4646
@Override
4747
public <T> ReactiveRemoveByQuery<T> removeByQuery(Class<T> domainType) {
48-
return new ReactiveRemoveByQuerySupport<>(template, domainType, ALL_QUERY,null, null,
49-
null, null);
48+
return new ReactiveRemoveByQuerySupport<>(template, domainType, ALL_QUERY, null, null, null, null);
5049
}
5150

5251
static class ReactiveRemoveByQuerySupport<T> implements ReactiveRemoveByQuery<T> {
@@ -94,7 +93,8 @@ public Flux<RemoveResult> all() {
9493
}
9594

9695
private QueryOptions buildQueryOptions(QueryOptions options) {
97-
return query.buildQueryOptions(options, scanConsistency);
96+
QueryScanConsistency qsc = scanConsistency != null ? scanConsistency : template.getConsistency();
97+
return query.buildQueryOptions(options, qsc);
9898
}
9999

100100
@Override

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
@Repository
4444
public interface AirportRepository extends CouchbaseRepository<Airport, String> {
4545

46+
// NOT_BOUNDED to test ScanConsistency
47+
// @ScanConsistency(query = QueryScanConsistency.NOT_BOUNDED)
48+
Airport iata(String iata);
49+
4650
@Override
4751
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
4852
List<Airport> findAll();

0 commit comments

Comments
 (0)