blob: 4091e5ea20b25f91d7ede3965d009727fc168994 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.usergrid.persistence.index;
import org.safehaus.guicyfig.Default;
import org.safehaus.guicyfig.FigSingleton;
import org.safehaus.guicyfig.GuicyFig;
import org.safehaus.guicyfig.Key;
@FigSingleton
public interface IndexFig extends GuicyFig {
String VALIDATION_DEFAULT_VALUE = "default-property";
String ELASTICSEARCH_HOSTS = "elasticsearch.hosts";
String ELASTICSEARCH_PORT = "elasticsearch.port";
String ELASTICSEARCH_CLUSTER_NAME = "elasticsearch.cluster_name";
String ELASTICSEARCH_NODENAME = "elasticsearch.node_name";
String ELASTICSEARCH_ALIAS_POSTFIX = "elasticsearch.alias_postfix";
String ELASTICSEARCH_NUMBER_OF_SHARDS = "elasticsearch.number_shards";
String ELASTICSEARCH_NUMBER_OF_REPLICAS = "elasticsearch.number_replicas";
String QUERY_CURSOR_TIMEOUT_MINUTES = "elasticsearch.cursor_timeout.minutes";
String ELASTICSEARCH_FORCE_REFRESH = "elasticsearch.force_refresh";
String INDEX_BATCH_SIZE = "elasticsearch.batch_size";
String INDEX_WRITE_CONSISTENCY_LEVEL = "elasticsearch.write_consistency_level";
String INDEX_FLUSH_WORKER_COUNT = "index.flush.workers";
String ELASTICSEARCH_FAIL_REFRESH = "elasticsearch.fail_refresh";
String ELASTICSEARCH_WRITE_TIMEOUT= "elasticsearch.write.timeout";
String ELASTICSEARCH_CLIENT_TYPE = "elasticsearch.client.type";
String ELASTICSEARCH_VERSION_QUERY_LIMIT = "elasticsearch.version_query_limit";
String USERGRID_QUERYANALYZER_OPERAND_COUNT = "usergrid.queryanalyzer.operand_count";
String USERGRID_QUERYANALYZER_SORTPREDICATE_COUNT = "usergrid.queryanalyzer.sortpredicate_count";
String USERGRID_QUERYANALYZER_COLLECTIONSIZE = "usergrid.queryanalyzer.collectionsize_bytes";
String USERGRID_QUERYANALYZER_INDEXSIZE = "usergrid.queryanalyzer.indexsize_bytes";
String USERGRID_QUERYANALYZER_ENFORCE = "usergrid.queryanalyzer.enforce";
/**
* Comma-separated list of Elasticsearch hosts.
*/
@Default( "127.0.0.1" )
@Key( ELASTICSEARCH_HOSTS )
String getHosts();
/**
* The port used when connecting to Elasticsearch.
*/
@Default( "9300" )
@Key( ELASTICSEARCH_PORT )
int getPort();
/**
* The Elasticsearch cluster name.
*/
@Default( "elasticsearch" )
@Key( ELASTICSEARCH_CLUSTER_NAME )
String getClusterName();
/**
* Configurable alias name used for the Elasticsearch index.
*/
@Default( "alias" ) // no underbars allowed
@Key( ELASTICSEARCH_ALIAS_POSTFIX )
String getAliasPostfix();
/**
* Timeout for the cursor returned with query responses.
*/
@Default( "2" ) // TODO: does this timeout get extended on each query?
@Key( QUERY_CURSOR_TIMEOUT_MINUTES )
int getQueryCursorTimeout();
/**
* Force an index refresh after every write. Should only be TRUE for testing purposes.
*/
@Default( "false" )
@Key( ELASTICSEARCH_FORCE_REFRESH )
boolean isForcedRefresh();
/**
* Identify the Elasticsearch client node with a unique name.
*/
@Default( "default" )
@Key( ELASTICSEARCH_NODENAME )
String getNodeName();
/**
* The number of primary shards to use for an index in Elasticsearch. Typically 2x or 3x the ES nodes.
*
* Depending on the use case for Usergrid, these numbers may vary. Usergrid is defaulted
* to a higher number of shards based on typical Elasticsearch clusters being >= 6 nodes.
* You can choose how it's sharded in Elasticsearch to reach optimal indexing for your dataset. For more
* info about sharding, here is a good starting point:
* <https://www.elastic.co/guide/en/elasticsearch/guide/current/routing-value.html>
*
*/
@Default( "18" )
@Key( ELASTICSEARCH_NUMBER_OF_SHARDS )
int getNumberOfShards();
/**
* The number of replicas to use for the index in Elasticsearch.
*/
@Default( "1" )
@Key( ELASTICSEARCH_NUMBER_OF_REPLICAS )
int getNumberOfReplicas();
/**
* The number of failures that occur before refreshing an Elasticsearch client.
*/
@Default( "20" )
@Key( ELASTICSEARCH_FAIL_REFRESH )
int getFailRefreshCount();
@Default( "2" )
int getIndexCacheMaxWorkers();
/**
* The number of worker threads used for flushing batches of index write requests
* in the buffer for Elasticsearch.
*/
@Default("10")
@Key(INDEX_FLUSH_WORKER_COUNT)
int getIndexFlushWorkerCount();
/**
* The batch size to use when sending batched index write requests to Elasticsearch.
*/
@Default( "1000" )
@Key( INDEX_BATCH_SIZE )
int getIndexBatchSize();
/**
* The write consistency level for writing into the Elasticsearch index. The
* default value is 'one', and you can configure 'all' and 'quorum'.
*/
@Default( "one" )
@Key( INDEX_WRITE_CONSISTENCY_LEVEL )
String getWriteConsistencyLevel();
/**
* Return the type of Elasticsearch client. Valid values are NODE or TRANSPORT.
*/
@Key( ELASTICSEARCH_CLIENT_TYPE )
@Default( "TRANSPORT")
String getClientType();
/**
* The maximum number of searches that are allowed during a refresh.
*/
@Key("elasticsearch.refresh_search_max")
@Default("10")
int maxRefreshSearches();
/**
* The timeout used when writing into the Elasticsearch index. (in milliseconds)
*/
@Default( "5000" )
@Key( ELASTICSEARCH_WRITE_TIMEOUT )
long getWriteTimeout();
@Default("1000")
@Key( "elasticsearch_queue_error_sleep_ms" )
long getSleepTimeForQueueError();
@Default("100")
@Key( ELASTICSEARCH_VERSION_QUERY_LIMIT )
int getVersionQueryLimit();
@Default("8")
@Key( USERGRID_QUERYANALYZER_OPERAND_COUNT )
int getQueryBreakerErrorOperandCount();
@Default("8")
@Key( USERGRID_QUERYANALYZER_SORTPREDICATE_COUNT )
int getQueryBreakerErrorSortPredicateCount();
@Default("500000000") // 500 MB
@Key(USERGRID_QUERYANALYZER_COLLECTIONSIZE)
long getQueryBreakerErrorCollectionSizeBytes();
@Default("10000000000") // 10 GB
@Key( USERGRID_QUERYANALYZER_INDEXSIZE )
long getQueryBreakerErrorIndexSizeBytes();
@Default("true")
@Key( USERGRID_QUERYANALYZER_ENFORCE )
boolean enforceQueryBreaker();
}