Skip to content

Commit

Permalink
ISPN-14194 Add config property for default max result
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever committed Oct 10, 2022
1 parent 9b51987 commit 28cc442
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ public ExpirationConfigurationBuilder expiration() {
return builder.expiration();
}

@Override
public QueryConfigurationBuilder query() {
return builder.query();
}

@Override
public IndexingConfigurationBuilder indexing() {
return builder.indexing();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public static AttributeSet attributeDefinitionSet() {
private final MemoryConfiguration memoryConfiguration;
private final EncodingConfiguration encodingConfiguration;
private final ExpirationConfiguration expirationConfiguration;
private final QueryConfiguration queryConfiguration;
private final IndexingConfiguration indexingConfiguration;
private final InvocationBatchingConfiguration invocationBatchingConfiguration;
private final StatisticsConfiguration statisticsConfiguration;
Expand All @@ -44,6 +45,7 @@ public static AttributeSet attributeDefinitionSet() {
CustomInterceptorsConfiguration customInterceptorsConfiguration,
ExpirationConfiguration expirationConfiguration,
EncodingConfiguration encodingConfiguration,
QueryConfiguration queryConfiguration,
IndexingConfiguration indexingConfiguration,
InvocationBatchingConfiguration invocationBatchingConfiguration,
StatisticsConfiguration statisticsConfiguration,
Expand Down Expand Up @@ -71,6 +73,7 @@ public static AttributeSet attributeDefinitionSet() {
this.customInterceptorsConfiguration = customInterceptorsConfiguration;
this.encodingConfiguration = encodingConfiguration;
this.expirationConfiguration = expirationConfiguration;
this.queryConfiguration = queryConfiguration;
this.indexingConfiguration = indexingConfiguration;
this.invocationBatchingConfiguration = invocationBatchingConfiguration;
this.statisticsConfiguration = statisticsConfiguration;
Expand Down Expand Up @@ -112,6 +115,10 @@ public ExpirationConfiguration expiration() {
return expirationConfiguration;
}

public QueryConfiguration query() {
return queryConfiguration;
}

public IndexingConfiguration indexing() {
return indexingConfiguration;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public class ConfigurationBuilder implements ConfigurationChildBuilder {
private final CustomInterceptorsConfigurationBuilder customInterceptors;
private final EncodingConfigurationBuilder encoding;
private final ExpirationConfigurationBuilder expiration;
private final QueryConfigurationBuilder query;
private final IndexingConfigurationBuilder indexing;
private final InvocationBatchingConfigurationBuilder invocationBatching;
private final StatisticsConfigurationBuilder statistics;
Expand All @@ -42,6 +43,7 @@ public ConfigurationBuilder() {
this.customInterceptors = new CustomInterceptorsConfigurationBuilder(this);
this.encoding = new EncodingConfigurationBuilder(this);
this.expiration = new ExpirationConfigurationBuilder(this);
this.query = new QueryConfigurationBuilder(this);
this.indexing = new IndexingConfigurationBuilder(this);
this.invocationBatching = new InvocationBatchingConfigurationBuilder(this);
this.statistics = new StatisticsConfigurationBuilder(this);
Expand Down Expand Up @@ -89,6 +91,11 @@ public ExpirationConfigurationBuilder expiration() {
return expiration;
}

@Override
public QueryConfigurationBuilder query() {
return query;
}

@Override
public IndexingConfigurationBuilder indexing() {
return indexing;
Expand Down Expand Up @@ -239,7 +246,7 @@ public Configuration build(boolean validate) {
for (Builder<?> module : modules)
modulesConfig.add(module.create());
return new Configuration(template, attributes.protect(), clustering.create(), customInterceptors.create(),
expiration.create(), encoding.create(), indexing.create(), invocationBatching.create(),
expiration.create(), encoding.create(), query.create(), indexing.create(), invocationBatching.create(),
statistics.create(), persistence.create(), locking.create(), security.create(),
transaction.create(), unsafe.create(), sites.create(), memory.create(), modulesConfig);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public interface ConfigurationChildBuilder {

ExpirationConfigurationBuilder expiration();

QueryConfigurationBuilder query();

IndexingConfigurationBuilder indexing();

InvocationBatchingConfigurationBuilder invocationBatching();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.infinispan.configuration.cache;

import org.infinispan.commons.configuration.AbstractTypedPropertiesConfiguration;
import org.infinispan.commons.configuration.attributes.AttributeDefinition;
import org.infinispan.commons.configuration.attributes.AttributeSet;
import org.infinispan.commons.configuration.attributes.Matchable;

/**
* Configures query options and defaults
*/
public class QueryConfiguration extends AbstractTypedPropertiesConfiguration implements Matchable<QueryConfiguration> {

public static final AttributeDefinition<Integer> DEFAULT_MAX_RESULT = AttributeDefinition.builder(org.infinispan.configuration.parsing.Attribute.DEFAULT_MAX_RESULT, 100).immutable().build();

static AttributeSet attributeDefinitionSet() {
return new AttributeSet(QueryConfiguration.class, AbstractTypedPropertiesConfiguration.attributeSet(), DEFAULT_MAX_RESULT);
}

protected QueryConfiguration(AttributeSet attributes) {
super(attributes);
}

/**
* Applies the given value as maxResults as a default to any query (indexed, non-indexed and hybrid).
* Having a default maxResult dramatically improves the performance of the queries for which a maxResults is not explicitly defined.
*/
public int defaultMaxResult() {
return attributes.attribute(DEFAULT_MAX_RESULT).get();
}

public AttributeSet attributes() {
return attributes;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.infinispan.configuration.cache;

import static org.infinispan.configuration.cache.QueryConfiguration.DEFAULT_MAX_RESULT;

import org.infinispan.commons.configuration.Builder;
import org.infinispan.commons.configuration.attributes.AttributeSet;

public class QueryConfigurationBuilder extends AbstractConfigurationChildBuilder implements Builder<QueryConfiguration> {

private final AttributeSet attributes;

public QueryConfigurationBuilder(ConfigurationBuilder builder) {
super(builder);
attributes = QueryConfiguration.attributeDefinitionSet();
}

/**
* Applies the given value as maxResults as a default to any query (indexed, non-indexed and hybrid).
* Having a default maxResult dramatically improves the performance of the queries for which a maxResults is not explicitly defined.
*
* @param defaultMaxResult The value to apply
* @return <code>this</code>, for method chaining
*/
public QueryConfigurationBuilder defaultMaxResult(int defaultMaxResult) {
attributes.attribute(DEFAULT_MAX_RESULT).set(defaultMaxResult);
return this;
}

public int defaultMaxResult() {
return attributes.attribute(DEFAULT_MAX_RESULT).get();
}

@Override
public QueryConfiguration create() {
return new QueryConfiguration(attributes.protect());
}

@Override
public QueryConfigurationBuilder read(QueryConfiguration template) {
attributes.read(template.attributes());
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public enum Attribute {
DATA_CONTAINER,
DEFAULT_CACHE,
DEFAULT_STACK,
DEFAULT_MAX_RESULT,
DOMAIN,
ENABLED,
ENCODER,
Expand Down
15 changes: 15 additions & 0 deletions core/src/main/resources/schema/infinispan-config-14.0.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -968,6 +968,21 @@
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="query" minOccurs="0">
<xs:annotation>
<xs:documentation>
Defines query options for cache
</xs:documentation>
</xs:annotation>
<xs:attribute name="default-max-result" type="xs:integer" default="${Query.default-max-result}">
<xs:annotation>
<xs:documentation>
Applies the given value as maxResults as a default to any query (indexed, non-indexed and hybrid).
Having a default maxResult dramatically improves the performance of the queries for which a maxResults is not explicitly defined.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:element>
<xs:element name="indexing" minOccurs="0">
<xs:annotation>
<xs:documentation>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.infinispan.configuration.cache.MemoryConfiguration;
import org.infinispan.configuration.cache.PartitionHandlingConfiguration;
import org.infinispan.configuration.cache.PersistenceConfiguration;
import org.infinispan.configuration.cache.QueryConfiguration;
import org.infinispan.configuration.cache.SingleFileStoreConfiguration;
import org.infinispan.configuration.cache.StorageType;
import org.infinispan.configuration.cache.StoreConfiguration;
Expand Down Expand Up @@ -128,6 +129,10 @@ public void check(ConfigurationBuilderHolder holder, int schemaMajor, int schema
assertEquals(2, raftMembers.size());
assertTrue(raftMembers.contains("a-node"));
assertTrue(raftMembers.contains("b-node"));

QueryConfiguration query = getConfiguration(holder, "local").query();
assertThat(query.defaultMaxResult()).isEqualTo(100);

IndexingConfiguration indexed = getConfiguration(holder, "indexed-reindex-at-startup").indexing();
assertThat(indexed.enabled()).isTrue();
assertThat(indexed.storage()).isEqualTo(IndexStorage.LOCAL_HEAP);
Expand Down

0 comments on commit 28cc442

Please sign in to comment.