diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bb21fb425ccf..18b714715b67e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,6 +83,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Add configuration for file cache size to max remote data ratio to prevent oversubscription of file cache ([#8606](https://github.com/opensearch-project/OpenSearch/pull/8606)) - Disallow compression level to be set for default and best_compression index codecs ([#8737]()https://github.com/opensearch-project/OpenSearch/pull/8737) - Prioritize replica shard movement during shard relocation ([#8875](https://github.com/opensearch-project/OpenSearch/pull/8875)) +- Introducing Default and Best Compression codecs as their algorithm name ([#9123]()https://github.com/opensearch-project/OpenSearch/pull/9123) ### Dependencies - Bump `org.apache.logging.log4j:log4j-core` from 2.17.1 to 2.20.0 ([#8307](https://github.com/opensearch-project/OpenSearch/pull/8307)) diff --git a/modules/reindex/src/internalClusterTest/java/org/opensearch/index/codec/MultiCodecReindexIT.java b/modules/reindex/src/internalClusterTest/java/org/opensearch/index/codec/MultiCodecReindexIT.java index 87f3c68d8af76..7c2fe8d99c330 100644 --- a/modules/reindex/src/internalClusterTest/java/org/opensearch/index/codec/MultiCodecReindexIT.java +++ b/modules/reindex/src/internalClusterTest/java/org/opensearch/index/codec/MultiCodecReindexIT.java @@ -45,11 +45,15 @@ public void testReindexingMultipleCodecs() throws InterruptedException, Executio Map codecMap = Map.of( "best_compression", "BEST_COMPRESSION", + "zlib", + "BEST_COMPRESSION", "zstd_no_dict", "ZSTD_NO_DICT", "zstd", "ZSTD", "default", + "BEST_SPEED", + "lz4", "BEST_SPEED" ); diff --git a/server/src/internalClusterTest/java/org/opensearch/index/codec/MultiCodecMergeIT.java b/server/src/internalClusterTest/java/org/opensearch/index/codec/MultiCodecMergeIT.java index 2866292e5e2e0..0bc78d82d9dfd 100644 --- a/server/src/internalClusterTest/java/org/opensearch/index/codec/MultiCodecMergeIT.java +++ b/server/src/internalClusterTest/java/org/opensearch/index/codec/MultiCodecMergeIT.java @@ -45,11 +45,15 @@ public void testForceMergeMultipleCodecs() throws ExecutionException, Interrupte Map codecMap = Map.of( "best_compression", "BEST_COMPRESSION", + "zlib", + "BEST_COMPRESSION", "zstd_no_dict", "ZSTD_NO_DICT", "zstd", "ZSTD", "default", + "BEST_SPEED", + "lz4", "BEST_SPEED" ); diff --git a/server/src/main/java/org/opensearch/index/codec/CodecService.java b/server/src/main/java/org/opensearch/index/codec/CodecService.java index da64e2954b0d8..a1913d5fa2061 100644 --- a/server/src/main/java/org/opensearch/index/codec/CodecService.java +++ b/server/src/main/java/org/opensearch/index/codec/CodecService.java @@ -60,7 +60,9 @@ public class CodecService { private final Map codecs; public static final String DEFAULT_CODEC = "default"; + public static final String LZ4 = "lz4"; public static final String BEST_COMPRESSION_CODEC = "best_compression"; + public static final String ZLIB = "zlib"; /** * the raw unfiltered lucene default. useful for testing */ @@ -74,12 +76,16 @@ public CodecService(@Nullable MapperService mapperService, IndexSettings indexSe int compressionLevel = indexSettings.getValue(INDEX_CODEC_COMPRESSION_LEVEL_SETTING); if (mapperService == null) { codecs.put(DEFAULT_CODEC, new Lucene95Codec()); + codecs.put(LZ4, new Lucene95Codec()); codecs.put(BEST_COMPRESSION_CODEC, new Lucene95Codec(Mode.BEST_COMPRESSION)); + codecs.put(ZLIB, new Lucene95Codec(Mode.BEST_COMPRESSION)); codecs.put(ZSTD_CODEC, new ZstdCodec(compressionLevel)); codecs.put(ZSTD_NO_DICT_CODEC, new ZstdNoDictCodec(compressionLevel)); } else { codecs.put(DEFAULT_CODEC, new PerFieldMappingPostingFormatCodec(Mode.BEST_SPEED, mapperService, logger)); + codecs.put(LZ4, new PerFieldMappingPostingFormatCodec(Mode.BEST_SPEED, mapperService, logger)); codecs.put(BEST_COMPRESSION_CODEC, new PerFieldMappingPostingFormatCodec(Mode.BEST_COMPRESSION, mapperService, logger)); + codecs.put(ZLIB, new PerFieldMappingPostingFormatCodec(Mode.BEST_COMPRESSION, mapperService, logger)); codecs.put(ZSTD_CODEC, new ZstdCodec(mapperService, logger, compressionLevel)); codecs.put(ZSTD_NO_DICT_CODEC, new ZstdNoDictCodec(mapperService, logger, compressionLevel)); } diff --git a/server/src/main/java/org/opensearch/index/codec/test.java b/server/src/main/java/org/opensearch/index/codec/test.java new file mode 100644 index 0000000000000..d231e5580e7e1 --- /dev/null +++ b/server/src/main/java/org/opensearch/index/codec/test.java @@ -0,0 +1,2 @@ +package org.opensearch.index.codec;public class test { +} diff --git a/server/src/main/java/org/opensearch/index/engine/EngineConfig.java b/server/src/main/java/org/opensearch/index/engine/EngineConfig.java index 03669eaac0070..5e465fc4624a5 100644 --- a/server/src/main/java/org/opensearch/index/engine/EngineConfig.java +++ b/server/src/main/java/org/opensearch/index/engine/EngineConfig.java @@ -130,7 +130,9 @@ public Supplier retentionLeasesSupplier() { public static final Setting INDEX_CODEC_SETTING = new Setting<>("index.codec", "default", s -> { switch (s) { case "default": + case "lz4": case "best_compression": + case "zlib": case "zstd": case "zstd_no_dict": case "lucene_default": @@ -138,7 +140,8 @@ public Supplier retentionLeasesSupplier() { default: if (Codec.availableCodecs().contains(s) == false) { // we don't error message the not officially supported ones throw new IllegalArgumentException( - "unknown value for [index.codec] must be one of [default, best_compression, zstd, zstd_no_dict] but was: " + s + "unknown value for [index.codec] must be one of [default, lz4, best_compression, zlib, zstd, zstd_no_dict] but was: " + + s ); } return s; @@ -182,8 +185,10 @@ private static void doValidateCodecSettings(final String codec) { case "zstd_no_dict": return; case "best_compression": + case "zlib": case "lucene_default": case "default": + case "lz4": break; default: if (Codec.availableCodecs().contains(codec)) { diff --git a/server/src/test/java/org/opensearch/index/codec/CodecTests.java b/server/src/test/java/org/opensearch/index/codec/CodecTests.java index 0eeeae9e8e59e..b6ed5a0776ddc 100644 --- a/server/src/test/java/org/opensearch/index/codec/CodecTests.java +++ b/server/src/test/java/org/opensearch/index/codec/CodecTests.java @@ -83,6 +83,18 @@ public void testBestCompression() throws Exception { assertStoredFieldsCompressionEquals(Lucene95Codec.Mode.BEST_COMPRESSION, codec); } + public void testLZ4() throws Exception { + Codec codec = createCodecService(false).codec("lz4"); + assertStoredFieldsCompressionEquals(Lucene95Codec.Mode.BEST_SPEED, codec); + assert codec instanceof PerFieldMappingPostingFormatCodec; + } + + public void testZlib() throws Exception { + Codec codec = createCodecService(false).codec("zlib"); + assertStoredFieldsCompressionEquals(Lucene95Codec.Mode.BEST_COMPRESSION, codec); + assert codec instanceof PerFieldMappingPostingFormatCodec; + } + public void testZstd() throws Exception { Codec codec = createCodecService(false).codec("zstd"); assertStoredFieldsCompressionEquals(Lucene95CustomCodec.Mode.ZSTD, codec); diff --git a/test/framework/src/main/java/org/opensearch/test/OpenSearchIntegTestCase.java b/test/framework/src/main/java/org/opensearch/test/OpenSearchIntegTestCase.java index 2fe3b9ff38ff3..834d8d4eab0ae 100644 --- a/test/framework/src/main/java/org/opensearch/test/OpenSearchIntegTestCase.java +++ b/test/framework/src/main/java/org/opensearch/test/OpenSearchIntegTestCase.java @@ -279,7 +279,9 @@ public abstract class OpenSearchIntegTestCase extends OpenSearchTestCase { */ public static final List CODECS = List.of( CodecService.DEFAULT_CODEC, + CodecService.LZ4, CodecService.BEST_COMPRESSION_CODEC, + CodecService.ZLIB, CodecService.ZSTD_CODEC, CodecService.ZSTD_NO_DICT_CODEC );