This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch refresh in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit e649edf785902e78748133ad4b717839177ec534 Author: Wu Sheng <[email protected]> AuthorDate: Wed Dec 7 22:03:21 2022 +0800 use `core/persistentPeriod` + 5s as `refresh_interval` for all indices --- docs/en/changes/changes.md | 2 ++ docs/en/setup/backend/configuration-vocabulary.md | 2 +- .../skywalking/oap/server/core/CoreModuleConfig.java | 2 +- .../skywalking/oap/server/core/config/ConfigService.java | 2 ++ .../server-starter/src/main/resources/application.yml | 3 +-- .../elasticsearch/StorageModuleElasticsearchConfig.java | 3 --- .../elasticsearch/StorageModuleElasticsearchProvider.java | 8 +++++++- .../plugin/elasticsearch/base/StorageEsInstaller.java | 15 +++------------ 8 files changed, 17 insertions(+), 20 deletions(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 0bf4669869..804fb0b8f9 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -29,6 +29,8 @@ * Remove abandon logic in MergableBufferedData, which caused unexpected no-update. * Fix miss set `LastUpdateTimestamp` that caused the metrics session to expire. * Rename MAL rule `spring-sleuth.yaml` to `spring-micrometer.yaml`. +* Remove the dependency of `refresh_interval` of ElasticSearch indices from `elasticsearch/flushInterval` config. Now, + it uses `core/persistentPeriod` + 5s as `refresh_interval` for all indices instead. #### UI diff --git a/docs/en/setup/backend/configuration-vocabulary.md b/docs/en/setup/backend/configuration-vocabulary.md index acfefe90a9..0906e334c0 100644 --- a/docs/en/setup/backend/configuration-vocabulary.md +++ b/docs/en/setup/backend/configuration-vocabulary.md @@ -105,7 +105,7 @@ The Configuration Vocabulary lists all available configurations provided by `app | - | - | superDatasetIndexReplicasNumber | Represents the replicas number in the super size dataset record index. [...] | - | - | indexTemplateOrder | The order of index template. [...] | - | - | bulkActions | Async bulk size of the record data batch execution. [...] -| - | - | flushInterval | Period of flush (in seconds). Does not matter whether `bulkActions` is reached or not. INT(flushInterval * 2/3) is used for index refresh period. [...] +| - | - | flushInterval | Period of flush (in seconds). Does not matter whether `bulkActions` is reached or not. [...] | - | - | concurrentRequests | The number of concurrent requests allowed to be executed. [...] | - | - | resultWindowMaxSize | The maximum size of dataset when the OAP loads cache, such as network aliases. [...] | - | - | metadataQueryMaxSize | The maximum size of metadata per query. [...] diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java index c58a49d821..3e1d4e63a4 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java @@ -58,7 +58,7 @@ public class CoreModuleConfig extends ModuleConfig { * The period of doing data persistence. Unit is second. */ @Setter - private long persistentPeriod = 25; + private int persistentPeriod = 25; private boolean enableDataKeeperExecutor = true; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/ConfigService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/ConfigService.java index 0ab72c0bf7..b6d36553d2 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/ConfigService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/ConfigService.java @@ -31,6 +31,7 @@ public class ConfigService implements Service { private final String searchableAlarmTags; private final int metricsDataTTL; private final int recordDataTTL; + private final int persistentPeriod; public ConfigService(CoreModuleConfig moduleConfig) { this.gRPCHost = moduleConfig.getGRPCHost(); @@ -40,5 +41,6 @@ public class ConfigService implements Service { this.searchableAlarmTags = moduleConfig.getSearchableAlarmTags(); this.metricsDataTTL = moduleConfig.getMetricsDataTTL(); this.recordDataTTL = moduleConfig.getRecordDataTTL(); + this.persistentPeriod = moduleConfig.getPersistentPeriod(); } } diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml index b4e507dc30..1ae00a3896 100644 --- a/oap-server/server-starter/src/main/resources/application.yml +++ b/oap-server/server-starter/src/main/resources/application.yml @@ -156,8 +156,7 @@ storage: superDatasetIndexReplicasNumber: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER:0} # Represent the replicas number in the super size dataset record index, the default value is 0. indexTemplateOrder: ${SW_STORAGE_ES_INDEX_TEMPLATE_ORDER:0} # the order of index template bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:5000} # Execute the async bulk record data every ${SW_STORAGE_ES_BULK_ACTIONS} requests - # flush the bulk every 10 seconds whatever the number of requests - # INT(flushInterval * 2/3) would be used for index refresh period. + # flush the bulk every 15 seconds whatever the number of requests flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:15} concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000} diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchConfig.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchConfig.java index ac5f5b4c7f..21db90470c 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchConfig.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchConfig.java @@ -92,9 +92,6 @@ public class StorageModuleElasticsearchConfig extends ModuleConfig { * Period of flush, no matter `bulkActions` reached or not. * INT(flushInterval * 2/3) would be used for index refresh period. * Unit is second. - * - * @since 8.7.0 increase to 15s from 10s - * @since 8.7.0 use INT(flushInterval * 2/3) as ElasticSearch index refresh interval. Default is 10s. */ private int flushInterval = 15; private int concurrentRequests = 2; diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java index da52561c7d..84e5b1eb41 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java @@ -23,6 +23,7 @@ import java.util.Properties; import java.util.function.Function; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.oap.server.core.CoreModule; +import org.apache.skywalking.oap.server.core.config.ConfigService; import org.apache.skywalking.oap.server.core.storage.IBatchDAO; import org.apache.skywalking.oap.server.core.storage.IHistoryDeleteDAO; import org.apache.skywalking.oap.server.core.storage.StorageBuilderFactory; @@ -100,7 +101,7 @@ public class StorageModuleElasticsearchProvider extends ModuleProvider { protected StorageModuleElasticsearchConfig config; protected ElasticSearchClient elasticSearchClient; - protected ModelInstaller modelInstaller; + protected StorageEsInstaller modelInstaller; @Override public String name() { @@ -243,6 +244,11 @@ public class StorageModuleElasticsearchProvider extends ModuleProvider { elasticSearchClient.registerChecker(healthChecker); try { elasticSearchClient.connect(); + + final ConfigService service = getManager().find(CoreModule.NAME).provider().getService(ConfigService.class); + // Add 5s to make sure OAP has at least done persistent once. + // By default, the persistent period is 25 seconds and ElasticSearch refreshes in every 30 seconds. + modelInstaller.setIndexRefreshInterval(service.getPersistentPeriod() + 5); modelInstaller.start(); getManager().find(CoreModule.NAME).provider().getService(ModelCreator.class).addModelListener(modelInstaller); diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsInstaller.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsInstaller.java index f5345a6c27..c3f9bd4619 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsInstaller.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsInstaller.java @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.library.elasticsearch.response.Index; import org.apache.skywalking.library.elasticsearch.response.IndexTemplate; @@ -49,6 +50,8 @@ public class StorageEsInstaller extends ModelInstaller { private final StorageModuleElasticsearchConfig config; protected final ColumnTypeEsMapping columnTypeEsMapping; private final Map<String, Map<String, Object>> specificIndexesSettings; + @Setter + private int indexRefreshInterval = 30; /** * The mappings of the template . @@ -236,18 +239,6 @@ public class StorageEsInstaller extends ModelInstaller { indexSettings.put("number_of_shards", model.isSuperDataset() ? Integer.toString(config.getIndexShardsNumber() * config.getSuperDatasetIndexShardsFactor()) : Integer.toString(config.getIndexShardsNumber())); - // Set the index refresh period as INT(flushInterval * 2/3). At the edge case, - // in low traffic(traffic < bulkActions in the whole period), there is a possible case, 2 period bulks are included in - // one index refresh rebuild operation, which could cause version conflicts. And this case can't be fixed - // through `core/persistentPeriod` as the bulk fresh is not controlled by the persistent timer anymore. - int indexRefreshInterval = config.getFlushInterval() * 2 / 3; - if (indexRefreshInterval < 5) { - // The refresh interval should not be less than 5 seconds (the recommended default value = 10s), - // and the bulk flush interval should not be set less than 8s (the recommended default value = 15s). - // This is a precaution case which makes ElasticSearch server has reasonable refresh interval, - // even this value is set too small by end user manually. - indexRefreshInterval = 5; - } indexSettings.put("refresh_interval", indexRefreshInterval + "s"); indexSettings.put("analysis", getAnalyzerSetting(model)); if (!StringUtil.isEmpty(config.getAdvanced())) {
