| /* |
| * 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(); |
| } |