Skip to content

Commit a42af7e

Browse files
authored
Merge branch 'main' into split
Signed-off-by: Marc Handalian <marc.handalian@gmail.com>
2 parents ea24458 + c771bdd commit a42af7e

File tree

43 files changed

+1189
-327
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1189
-327
lines changed

.github/workflows/gradle-check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
- uses: actions/checkout@v4
2121
- name: Get changed files
2222
id: changed-files-specific
23-
uses: tj-actions/changed-files@v44
23+
uses: tj-actions/changed-files@v45
2424
with:
2525
files_ignore: |
2626
release-notes/*.md

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
2626
- Add allowlist setting for ingest-geoip and ingest-useragent ([#15325](https://github.com/opensearch-project/OpenSearch/pull/15325))
2727
- Adding access to noSubMatches and noOverlappingMatches in Hyphenation ([#13895](https://github.com/opensearch-project/OpenSearch/pull/13895))
2828
- Add support for index level max slice count setting for concurrent segment search ([#15336](https://github.com/opensearch-project/OpenSearch/pull/15336))
29+
- Add concurrent search support for Derived Fields ([#15326](https://github.com/opensearch-project/OpenSearch/pull/15326))
2930
- [Reader Writer Separation] Add searchOnly replica routing configuration ([#15410](https://github.com/opensearch-project/OpenSearch/pull/15410))
3031

3132
### Dependencies
3233
- Bump `netty` from 4.1.111.Final to 4.1.112.Final ([#15081](https://github.com/opensearch-project/OpenSearch/pull/15081))
3334
- Bump `org.apache.commons:commons-lang3` from 3.14.0 to 3.16.0 ([#14861](https://github.com/opensearch-project/OpenSearch/pull/14861), [#15205](https://github.com/opensearch-project/OpenSearch/pull/15205))
3435
- OpenJDK Update (July 2024 Patch releases) ([#14998](https://github.com/opensearch-project/OpenSearch/pull/14998))
35-
- Bump `com.microsoft.azure:msal4j` from 1.16.1 to 1.16.2 ([#14995](https://github.com/opensearch-project/OpenSearch/pull/14995))
36+
- Bump `com.microsoft.azure:msal4j` from 1.16.1 to 1.17.0 ([#14995](https://github.com/opensearch-project/OpenSearch/pull/14995), [#15420](https://github.com/opensearch-project/OpenSearch/pull/15420))
3637
- Bump `actions/github-script` from 6 to 7 ([#14997](https://github.com/opensearch-project/OpenSearch/pull/14997))
3738
- Bump `org.tukaani:xz` from 1.9 to 1.10 ([#15110](https://github.com/opensearch-project/OpenSearch/pull/15110))
3839
- Bump `actions/setup-java` from 1 to 4 ([#15104](https://github.com/opensearch-project/OpenSearch/pull/15104))
@@ -49,6 +50,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
4950
- Bump `commons-cli:commons-cli` from 1.8.0 to 1.9.0 ([#15298](https://github.com/opensearch-project/OpenSearch/pull/15298))
5051
- Bump `opentelemetry` from 1.40.0 to 1.41.0 ([#15361](https://github.com/opensearch-project/OpenSearch/pull/15361))
5152
- Bump `opentelemetry-semconv` from 1.26.0-alpha to 1.27.0-alpha ([#15361](https://github.com/opensearch-project/OpenSearch/pull/15361))
53+
- Bump `tj-actions/changed-files` from 44 to 45 ([#15422](https://github.com/opensearch-project/OpenSearch/pull/15422))
54+
- Bump `dnsjava:dnsjava` from 3.6.0 to 3.6.1 ([#15418](https://github.com/opensearch-project/OpenSearch/pull/15418))
55+
- Bump `com.netflix.nebula.ospackage-base` from 11.9.1 to 11.10.0 ([#15419](https://github.com/opensearch-project/OpenSearch/pull/15419))
56+
- Bump `org.roaringbitmap:RoaringBitmap` from 1.1.0 to 1.2.1 ([#15423](https://github.com/opensearch-project/OpenSearch/pull/15423))
5257

5358
### Changed
5459
- Add lower limit for primary and replica batch allocators timeout ([#14979](https://github.com/opensearch-project/OpenSearch/pull/14979))
@@ -68,6 +73,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6873
- Fixed array field name omission in flat_object function for nested JSON ([#13620](https://github.com/opensearch-project/OpenSearch/pull/13620))
6974
- Fix range aggregation optimization ignoring top level queries ([#15194](https://github.com/opensearch-project/OpenSearch/pull/15194))
7075
- Fix incorrect parameter names in MinHash token filter configuration handling ([#15233](https://github.com/opensearch-project/OpenSearch/pull/15233))
76+
- Fix indexing error when flat_object field is explicitly null ([#15375](https://github.com/opensearch-project/OpenSearch/pull/15375))
7177
- Fix split response processor not included in allowlist ([#15393](https://github.com/opensearch-project/OpenSearch/pull/15393))
7278
- Fix unchecked cast in dynamic action map getter ([#15394](https://github.com/opensearch-project/OpenSearch/pull/15394))
7379

distribution/packages/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ import java.util.regex.Pattern
6363
*/
6464

6565
plugins {
66-
id "com.netflix.nebula.ospackage-base" version "11.9.1"
66+
id "com.netflix.nebula.ospackage-base" version "11.10.0"
6767
}
6868

6969
void addProcessFilesTask(String type, boolean jdk) {

modules/lang-painless/src/internalClusterTest/java/org/opensearch/painless/SimplePainlessIT.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,6 @@ public void testTermsValuesSource() throws Exception {
188188
}
189189

190190
public void testSimpleDerivedFieldsQuery() {
191-
assumeFalse(
192-
"Derived fields do not support concurrent search https://github.com/opensearch-project/OpenSearch/issues/15007",
193-
internalCluster().clusterService().getClusterSettings().get(CLUSTER_CONCURRENT_SEGMENT_SEARCH_SETTING)
194-
);
195191
SearchRequest searchRequest = new SearchRequest("test-df").source(
196192
SearchSourceBuilder.searchSource()
197193
.derivedField("result", "keyword", new Script("emit(params._source[\"field\"])"))
@@ -204,10 +200,6 @@ public void testSimpleDerivedFieldsQuery() {
204200
}
205201

206202
public void testSimpleDerivedFieldsAgg() {
207-
assumeFalse(
208-
"Derived fields do not support concurrent search https://github.com/opensearch-project/OpenSearch/issues/15007",
209-
internalCluster().clusterService().getClusterSettings().get(CLUSTER_CONCURRENT_SEGMENT_SEARCH_SETTING)
210-
);
211203
SearchRequest searchRequest = new SearchRequest("test-df").source(
212204
SearchSourceBuilder.searchSource()
213205
.derivedField("result", "keyword", new Script("emit(params._source[\"field\"])"))

plugins/repository-azure/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ dependencies {
6161
// Start of transitive dependencies for azure-identity
6262
api 'com.microsoft.azure:msal4j-persistence-extension:1.3.0'
6363
api "net.java.dev.jna:jna-platform:${versions.jna}"
64-
api 'com.microsoft.azure:msal4j:1.16.2'
64+
api 'com.microsoft.azure:msal4j:1.17.0'
6565
api 'com.nimbusds:oauth2-oidc-sdk:11.9.1'
6666
api 'com.nimbusds:nimbus-jose-jwt:9.40'
6767
api 'com.nimbusds:content-type:2.3'

plugins/repository-azure/licenses/msal4j-1.16.2.jar.sha1

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
7d37157da92b719f250b0023234ac9dda922a2a5
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## 2024-08-22 Version 1.3.19 Release Notes
2+
3+
### Upgrades
4+
- OpenJDK Update (July 2024 Patch releases) ([#15002](https://github.com/opensearch-project/OpenSearch/pull/15002))
5+
- Bump `netty` from 4.1.111.Final to 4.1.112.Final ([#15081](https://github.com/opensearch-project/OpenSearch/pull/15081))

rest-api-spec/src/main/resources/rest-api-spec/test/index/100_partial_flat_object.yml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,16 @@ setup:
8888
} ]
8989
}
9090
}
91-
91+
- do:
92+
index:
93+
index: test_partial_flat_object
94+
id: 4
95+
body: {
96+
"issue": {
97+
"number": 999,
98+
"labels": null
99+
}
100+
}
92101
- do:
93102
indices.refresh:
94103
index: test_partial_flat_object
@@ -135,7 +144,7 @@ teardown:
135144
}
136145
}
137146

138-
- length: { hits.hits: 3 }
147+
- length: { hits.hits: 4 }
139148

140149
# Match Query with exact dot path.
141150
- do:

server/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ dependencies {
127127
api "jakarta.annotation:jakarta.annotation-api:${versions.jakarta_annotation}"
128128

129129
// https://mvnrepository.com/artifact/org.roaringbitmap/RoaringBitmap
130-
implementation 'org.roaringbitmap:RoaringBitmap:1.1.0'
130+
implementation 'org.roaringbitmap:RoaringBitmap:1.2.1'
131131

132132
testImplementation(project(":test:framework")) {
133133
// tests use the locally compiled version of server

server/licenses/RoaringBitmap-1.1.0.jar.sha1

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
828eb489b5e8c8762f2471010e9c7f20c7de596d

server/src/internalClusterTest/java/org/opensearch/index/mapper/StarTreeMapperIT.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,11 +264,16 @@ public void testValidCompositeIndex() {
264264
);
265265
assertEquals(expectedTimeUnits, dateDim.getIntervals());
266266
assertEquals("numeric_dv", starTreeFieldType.getDimensions().get(1).getField());
267+
assertEquals(2, starTreeFieldType.getMetrics().size());
267268
assertEquals("numeric_dv", starTreeFieldType.getMetrics().get(0).getField());
268269

269270
// Assert default metrics
270271
List<MetricStat> expectedMetrics = Arrays.asList(MetricStat.VALUE_COUNT, MetricStat.SUM, MetricStat.AVG);
271272
assertEquals(expectedMetrics, starTreeFieldType.getMetrics().get(0).getMetrics());
273+
274+
assertEquals("_doc_count", starTreeFieldType.getMetrics().get(1).getField());
275+
assertEquals(List.of(MetricStat.DOC_COUNT), starTreeFieldType.getMetrics().get(1).getMetrics());
276+
272277
assertEquals(10000, starTreeFieldType.getStarTreeConfig().maxLeafDocs());
273278
assertEquals(
274279
StarTreeFieldConfiguration.StarTreeBuildMode.OFF_HEAP,

server/src/internalClusterTest/java/org/opensearch/remotestore/RemoteStoreIT.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,15 @@ public void testStaleCommitDeletionWithInvokeFlush() throws Exception {
217217
} else {
218218
// As delete is async its possible that the file gets created before the deletion or after
219219
// deletion.
220-
MatcherAssert.assertThat(
221-
actualFileCount,
222-
is(oneOf(lastNMetadataFilesToKeep - 1, lastNMetadataFilesToKeep, lastNMetadataFilesToKeep + 1))
223-
);
220+
if (RemoteStoreSettings.isPinnedTimestampsEnabled()) {
221+
// With pinned timestamp, we also keep md files since last successful fetch
222+
assertTrue(actualFileCount >= lastNMetadataFilesToKeep);
223+
} else {
224+
MatcherAssert.assertThat(
225+
actualFileCount,
226+
is(oneOf(lastNMetadataFilesToKeep - 1, lastNMetadataFilesToKeep, lastNMetadataFilesToKeep + 1))
227+
);
228+
}
224229
}
225230
}, 30, TimeUnit.SECONDS);
226231
}
@@ -249,7 +254,12 @@ public void testStaleCommitDeletionWithMinSegmentFiles_3() throws Exception {
249254
Path indexPath = Path.of(segmentRepoPath + "/" + shardPath);
250255
int actualFileCount = getFileCount(indexPath);
251256
// We also allow (numberOfIterations + 1) as index creation also triggers refresh.
252-
MatcherAssert.assertThat(actualFileCount, is(oneOf(4)));
257+
if (RemoteStoreSettings.isPinnedTimestampsEnabled()) {
258+
// With pinned timestamp, we also keep md files since last successful fetch
259+
assertTrue(actualFileCount >= 4);
260+
} else {
261+
assertEquals(4, actualFileCount);
262+
}
253263
}
254264

255265
public void testStaleCommitDeletionWithMinSegmentFiles_Disabled() throws Exception {

server/src/internalClusterTest/java/org/opensearch/snapshots/DeleteSnapshotIT.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.opensearch.common.settings.Settings;
2020
import org.opensearch.common.unit.TimeValue;
2121
import org.opensearch.index.store.RemoteBufferedOutputDirectory;
22+
import org.opensearch.indices.RemoteStoreSettings;
2223
import org.opensearch.remotestore.RemoteStoreBaseIntegTestCase;
2324
import org.opensearch.repositories.RepositoriesService;
2425
import org.opensearch.repositories.blobstore.BlobStoreRepository;
@@ -287,8 +288,14 @@ public void testDeleteMultipleShallowCopySnapshotsCase3() throws Exception {
287288
public void testRemoteStoreCleanupForDeletedIndex() throws Exception {
288289
disableRepoConsistencyCheck("Remote store repository is being used in the test");
289290
final Path remoteStoreRepoPath = randomRepoPath();
290-
internalCluster().startClusterManagerOnlyNode(remoteStoreClusterSettings(REMOTE_REPO_NAME, remoteStoreRepoPath));
291-
internalCluster().startDataOnlyNode(remoteStoreClusterSettings(REMOTE_REPO_NAME, remoteStoreRepoPath));
291+
Settings settings = remoteStoreClusterSettings(REMOTE_REPO_NAME, remoteStoreRepoPath);
292+
// Disabling pinned timestamp as this test is specifically for shallow snapshot.
293+
settings = Settings.builder()
294+
.put(settings)
295+
.put(RemoteStoreSettings.CLUSTER_REMOTE_STORE_PINNED_TIMESTAMP_ENABLED.getKey(), false)
296+
.build();
297+
internalCluster().startClusterManagerOnlyNode(settings);
298+
internalCluster().startDataOnlyNode(settings);
292299
final Client clusterManagerClient = internalCluster().clusterManagerClient();
293300
ensureStableCluster(2);
294301

server/src/main/java/org/opensearch/index/codec/composite/composite99/Composite99DocValuesWriter.java

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.apache.lucene.index.EmptyDocValuesProducer;
1616
import org.apache.lucene.index.FieldInfo;
1717
import org.apache.lucene.index.MergeState;
18+
import org.apache.lucene.index.NumericDocValues;
1819
import org.apache.lucene.index.SegmentWriteState;
1920
import org.apache.lucene.index.SortedNumericDocValues;
2021
import org.opensearch.common.annotation.ExperimentalApi;
@@ -25,6 +26,7 @@
2526
import org.opensearch.index.compositeindex.datacube.startree.StarTreeField;
2627
import org.opensearch.index.compositeindex.datacube.startree.builder.StarTreesBuilder;
2728
import org.opensearch.index.mapper.CompositeMappedFieldType;
29+
import org.opensearch.index.mapper.DocCountFieldMapper;
2830
import org.opensearch.index.mapper.MapperService;
2931

3032
import java.io.IOException;
@@ -63,21 +65,29 @@ public Composite99DocValuesWriter(DocValuesConsumer delegate, SegmentWriteState
6365
this.compositeMappedFieldTypes = mapperService.getCompositeFieldTypes();
6466
compositeFieldSet = new HashSet<>();
6567
segmentFieldSet = new HashSet<>();
68+
// TODO : add integ test for this
6669
for (FieldInfo fi : segmentWriteState.fieldInfos) {
6770
if (DocValuesType.SORTED_NUMERIC.equals(fi.getDocValuesType())) {
6871
segmentFieldSet.add(fi.name);
72+
} else if (fi.name.equals(DocCountFieldMapper.NAME)) {
73+
segmentFieldSet.add(fi.name);
6974
}
7075
}
7176
for (CompositeMappedFieldType type : compositeMappedFieldTypes) {
7277
compositeFieldSet.addAll(type.fields());
7378
}
7479
// check if there are any composite fields which are part of the segment
80+
// TODO : add integ test where there are no composite fields in a segment, test both flush and merge cases
7581
segmentHasCompositeFields = Collections.disjoint(segmentFieldSet, compositeFieldSet) == false;
7682
}
7783

7884
@Override
7985
public void addNumericField(FieldInfo field, DocValuesProducer valuesProducer) throws IOException {
8086
delegate.addNumericField(field, valuesProducer);
87+
// Perform this only during flush flow
88+
if (mergeState.get() == null && segmentHasCompositeFields) {
89+
createCompositeIndicesIfPossible(valuesProducer, field);
90+
}
8191
}
8292

8393
@Override
@@ -119,13 +129,7 @@ private void createCompositeIndicesIfPossible(DocValuesProducer valuesProducer,
119129
if (segmentFieldSet.isEmpty()) {
120130
Set<String> compositeFieldSetCopy = new HashSet<>(compositeFieldSet);
121131
for (String compositeField : compositeFieldSetCopy) {
122-
fieldProducerMap.put(compositeField, new EmptyDocValuesProducer() {
123-
@Override
124-
public SortedNumericDocValues getSortedNumeric(FieldInfo field) {
125-
return DocValues.emptySortedNumeric();
126-
}
127-
});
128-
compositeFieldSet.remove(compositeField);
132+
addDocValuesForEmptyField(compositeField);
129133
}
130134
}
131135
// we have all the required fields to build composite fields
@@ -138,7 +142,28 @@ public SortedNumericDocValues getSortedNumeric(FieldInfo field) {
138142
}
139143
}
140144
}
145+
}
141146

147+
/**
148+
* Add empty doc values for fields not present in segment
149+
*/
150+
private void addDocValuesForEmptyField(String compositeField) {
151+
if (compositeField.equals(DocCountFieldMapper.NAME)) {
152+
fieldProducerMap.put(compositeField, new EmptyDocValuesProducer() {
153+
@Override
154+
public NumericDocValues getNumeric(FieldInfo field) {
155+
return DocValues.emptyNumeric();
156+
}
157+
});
158+
} else {
159+
fieldProducerMap.put(compositeField, new EmptyDocValuesProducer() {
160+
@Override
161+
public SortedNumericDocValues getSortedNumeric(FieldInfo field) {
162+
return DocValues.emptySortedNumeric();
163+
}
164+
});
165+
}
166+
compositeFieldSet.remove(compositeField);
142167
}
143168

144169
@Override

server/src/main/java/org/opensearch/index/compositeindex/datacube/MetricStat.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,26 @@ public enum MetricStat {
2424
SUM("sum"),
2525
MIN("min"),
2626
MAX("max"),
27-
AVG("avg", VALUE_COUNT, SUM);
27+
AVG("avg", VALUE_COUNT, SUM),
28+
DOC_COUNT("doc_count", true);
2829

2930
private final String typeName;
3031
private final MetricStat[] baseMetrics;
3132

33+
// System field stats cannot be used as input for user metric types
34+
private final boolean isSystemFieldStat;
35+
36+
MetricStat(String typeName) {
37+
this(typeName, false);
38+
}
39+
3240
MetricStat(String typeName, MetricStat... baseMetrics) {
41+
this(typeName, false, baseMetrics);
42+
}
43+
44+
MetricStat(String typeName, boolean isSystemFieldStat, MetricStat... baseMetrics) {
3345
this.typeName = typeName;
46+
this.isSystemFieldStat = isSystemFieldStat;
3447
this.baseMetrics = baseMetrics;
3548
}
3649

@@ -56,7 +69,8 @@ public boolean isDerivedMetric() {
5669

5770
public static MetricStat fromTypeName(String typeName) {
5871
for (MetricStat metric : MetricStat.values()) {
59-
if (metric.getTypeName().equalsIgnoreCase(typeName)) {
72+
// prevent system fields to be entered as user input
73+
if (metric.getTypeName().equalsIgnoreCase(typeName) && metric.isSystemFieldStat == false) {
6074
return metric;
6175
}
6276
}

server/src/main/java/org/opensearch/index/compositeindex/datacube/startree/StarTreeValidator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.opensearch.index.compositeindex.datacube.Dimension;
1515
import org.opensearch.index.compositeindex.datacube.Metric;
1616
import org.opensearch.index.mapper.CompositeMappedFieldType;
17+
import org.opensearch.index.mapper.DocCountFieldMapper;
1718
import org.opensearch.index.mapper.MappedFieldType;
1819
import org.opensearch.index.mapper.MapperService;
1920
import org.opensearch.index.mapper.StarTreeMapper;
@@ -78,7 +79,7 @@ public static void validate(MapperService mapperService, CompositeIndexSettings
7879
String.format(Locale.ROOT, "unknown metric field [%s] as part of star tree field", metric.getField())
7980
);
8081
}
81-
if (ft.isAggregatable() == false) {
82+
if (ft.isAggregatable() == false && ft instanceof DocCountFieldMapper.DocCountFieldType == false) {
8283
throw new IllegalArgumentException(
8384
String.format(
8485
Locale.ROOT,

server/src/main/java/org/opensearch/index/compositeindex/datacube/startree/aggregators/CountValueAggregator.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,9 @@
1717
class CountValueAggregator implements ValueAggregator<Long> {
1818

1919
public static final long DEFAULT_INITIAL_VALUE = 1L;
20-
private final StarTreeNumericType starTreeNumericType;
2120
private static final StarTreeNumericType VALUE_AGGREGATOR_TYPE = StarTreeNumericType.LONG;
2221

23-
public CountValueAggregator(StarTreeNumericType starTreeNumericType) {
24-
this.starTreeNumericType = starTreeNumericType;
25-
}
22+
public CountValueAggregator() {}
2623

2724
@Override
2825
public StarTreeNumericType getAggregatedValueType() {

0 commit comments

Comments
 (0)