Commit 7993871
Add gRPC support for Min and Max metric aggregations
This commit adds complete gRPC support for Min and Max metric aggregations,
including request parsing, response conversion, and integration with the search pipeline.
**Request Conversion (OpenSearch ← gRPC):**
- AggregationContainerProtoUtils: Central dispatcher routing aggregation types
to specific converters, validates aggregation names
- ValuesSourceAggregationProtoUtils: Shared utilities for parsing common
ValuesSource fields (field, missing, value_type, format, script)
- MinAggregationProtoUtils: Converts proto MinAggregation → MinAggregationBuilder
- MaxAggregationProtoUtils: Converts proto MaxAggregation → MaxAggregationBuilder
- Updated SearchSourceBuilderProtoUtils to parse aggregations map from
proto SearchRequestBody and add to SearchSourceBuilder
**Response Conversion (gRPC ← OpenSearch):**
- SearchResponseSectionsProtoUtils: **CRITICAL FIX** - Added aggregation response
conversion to search response pipeline, enabling aggregation results to be
returned via gRPC. This connects the Min/Max aggregate converters to the
search response builder.
- AggregateProtoUtils: Central dispatcher for converting InternalAggregation
to proto Aggregate, with metadata and sub-aggregation helpers
- MinAggregateProtoUtils: Converts InternalMin → proto MinAggregate
- MaxAggregateProtoUtils: Converts InternalMax → proto MaxAggregate
- Handles special values (infinity, NaN), formatting, and metadata
**OpenSearch Core Changes:**
- InternalNumericMetricsAggregation: Added getFormat() getter to expose
format information for gRPC converters
**Request Conversion Tests:**
- AggregationContainerProtoUtilsTests: 11 tests
- MinAggregationProtoUtilsTests: 108 tests
- MaxAggregationProtoUtilsTests: 108 tests
- ValuesSourceAggregationProtoUtilsTests: 40+ tests
- SearchSourceBuilderProtoUtilsTests: 2 new aggregation tests
**Response Conversion Tests:**
- AggregateProtoUtilsTests: 10 tests
- MinAggregateProtoUtilsTests: 190 tests (values, infinity, NaN, formatting)
- MaxAggregateProtoUtilsTests: 190 tests (values, infinity, NaN, formatting)
- SearchResponseSectionsProtoUtilsTests: 2 new aggregation tests (null/present)
- InternalMinTests: 32 tests
- InternalMaxTests: 32 tests
**Total: ~680 test cases**
**Design Principles:**
- Mirrors REST API patterns for consistency
- Maintains behavioral parity with REST layer
- Comprehensive error handling and validation
- Special value support (infinity, NaN) matching REST behavior
- Metadata handling consistent across all aggregations
**Implementation Summary:**
- **New Implementation Files**: 11 (converters + infrastructure)
- **New Test Files**: 8 (comprehensive test coverage)
- **Modified Files**: 4 (SearchSourceBuilder + SearchResponseSections + server changes)
- **Package Documentation**: 5 package-info.java files
- **Total Lines**: ~1,850 (implementation + tests)
**Testing & Validation:**
- Comprehensive integration testing via REST and gRPC
- Verified behavioral parity (see min_max_aggregation_comparison_report.md)
- All core functionality confirmed working correctly
- Values match exactly between REST and gRPC responses
**API Differences (By Design):**
- REST uses simple JSON values; gRPC uses typed protobuf structures
- Parameter formats differ (e.g., missing parameter requires FieldValue in gRPC)
- Field naming follows protobuf conventions (camelCase vs snake_case)
Co-Authored-By: Claude (claude-sonnet-4-5) <noreply@anthropic.com>
Signed-off-by: Yiyu Pan <yypan14@gmail.com>1 parent 8c244c0 commit 7993871
52 files changed
Lines changed: 3789 additions & 90 deletions
File tree
- buildSrc
- gradle
- modules/transport-grpc
- spi/src/main/java/org/opensearch/transport/grpc/spi
- src
- internalClusterTest/java/org/opensearch/transport/grpc
- main/java/org/opensearch/transport/grpc
- proto
- request/search
- aggregation
- metrics
- support
- response/search
- aggregation
- metrics
- services
- test/java/org/opensearch/transport/grpc
- proto
- request/search
- aggregation
- metrics
- support
- response/search
- aggregation
- metrics
- services
- server/src
- main/java/org/opensearch/search/aggregations/metrics
- test/java/org/opensearch/search/aggregations/metrics
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
94 | 94 | | |
95 | 95 | | |
96 | 96 | | |
| 97 | + | |
97 | 98 | | |
98 | 99 | | |
99 | 100 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
Lines changed: 42 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
Lines changed: 32 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
Lines changed: 44 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
Lines changed: 31 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
Lines changed: 86 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
11 | 15 | | |
12 | 16 | | |
13 | 17 | | |
| |||
57 | 61 | | |
58 | 62 | | |
59 | 63 | | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
60 | 146 | | |
0 commit comments