Skip to content

Commit 3841043

Browse files
Max Ksyunzgithub-actions[bot]
authored andcommitted
Simplify OpenSearchIndexScanBuilder (#275) (#1738)
Signed-off-by: Max Ksyunz <[email protected]> (cherry picked from commit 29f99aa)
1 parent c23a788 commit 3841043

File tree

3 files changed

+22
-38
lines changed

3 files changed

+22
-38
lines changed

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/OpenSearchIndex.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.HashMap;
1111
import java.util.LinkedHashMap;
1212
import java.util.Map;
13+
import java.util.function.Function;
1314
import lombok.RequiredArgsConstructor;
1415
import org.opensearch.common.unit.TimeValue;
1516
import org.opensearch.sql.common.setting.Settings;
@@ -33,7 +34,6 @@
3334
import org.opensearch.sql.planner.logical.LogicalPlan;
3435
import org.opensearch.sql.planner.physical.PhysicalPlan;
3536
import org.opensearch.sql.storage.Table;
36-
import org.opensearch.sql.storage.TableScanOperator;
3737
import org.opensearch.sql.storage.read.TableScanBuilder;
3838

3939
/** OpenSearch table (index) implementation. */
@@ -171,19 +171,14 @@ public PhysicalPlan implement(LogicalPlan plan) {
171171
public TableScanBuilder createScanBuilder() {
172172
final int querySizeLimit = settings.getSettingValue(Settings.Key.QUERY_SIZE_LIMIT);
173173

174+
final TimeValue cursorKeepAlive = settings.getSettingValue(Settings.Key.SQL_CURSOR_KEEP_ALIVE);
174175
var builder = new OpenSearchRequestBuilder(
175176
querySizeLimit,
176177
createExprValueFactory());
177-
178-
return new OpenSearchIndexScanBuilder(builder) {
179-
@Override
180-
protected TableScanOperator createScan(OpenSearchRequestBuilder requestBuilder) {
181-
final TimeValue cursorKeepAlive =
182-
settings.getSettingValue(Settings.Key.SQL_CURSOR_KEEP_ALIVE);
183-
return new OpenSearchIndexScan(client, requestBuilder.getMaxResponseSize(),
184-
requestBuilder.build(indexName, getMaxResultWindow(), cursorKeepAlive));
185-
}
186-
};
178+
Function<OpenSearchRequestBuilder, OpenSearchIndexScan> createScanOperator =
179+
requestBuilder -> new OpenSearchIndexScan(client, requestBuilder.getMaxResponseSize(),
180+
requestBuilder.build(indexName, getMaxResultWindow(), cursorKeepAlive));
181+
return new OpenSearchIndexScanBuilder(builder, createScanOperator);
187182
}
188183

189184
private OpenSearchExprValueFactory createExprValueFactory() {

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/scan/OpenSearchIndexScanBuilder.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package org.opensearch.sql.opensearch.storage.scan;
77

8+
import java.util.function.Function;
89
import lombok.EqualsAndHashCode;
910
import org.opensearch.sql.expression.ReferenceExpression;
1011
import org.opensearch.sql.opensearch.request.OpenSearchRequestBuilder;
@@ -24,8 +25,9 @@
2425
* by delegated builder internally. This is to avoid conditional check of different push down logic
2526
* for non-aggregate and aggregate query everywhere.
2627
*/
27-
public abstract class OpenSearchIndexScanBuilder extends TableScanBuilder {
28+
public class OpenSearchIndexScanBuilder extends TableScanBuilder {
2829

30+
private final Function<OpenSearchRequestBuilder, OpenSearchIndexScan> scanFactory;
2931
/**
3032
* Delegated index scan builder for non-aggregate or aggregate query.
3133
*/
@@ -38,25 +40,27 @@ public abstract class OpenSearchIndexScanBuilder extends TableScanBuilder {
3840
/**
3941
* Constructor used during query execution.
4042
*/
41-
protected OpenSearchIndexScanBuilder(OpenSearchRequestBuilder requestBuilder) {
43+
public OpenSearchIndexScanBuilder(OpenSearchRequestBuilder requestBuilder,
44+
Function<OpenSearchRequestBuilder, OpenSearchIndexScan> scanFactory) {
4245
this.delegate = new OpenSearchIndexScanQueryBuilder(requestBuilder);
46+
this.scanFactory = scanFactory;
4347

4448
}
4549

4650
/**
4751
* Constructor used for unit tests.
4852
*/
49-
protected OpenSearchIndexScanBuilder(PushDownQueryBuilder translator) {
53+
protected OpenSearchIndexScanBuilder(PushDownQueryBuilder translator,
54+
Function<OpenSearchRequestBuilder, OpenSearchIndexScan> scanFactory) {
5055
this.delegate = translator;
56+
this.scanFactory = scanFactory;
5157
}
5258

5359
@Override
5460
public TableScanOperator build() {
55-
return createScan(delegate.build());
61+
return scanFactory.apply(delegate.build());
5662
}
5763

58-
protected abstract TableScanOperator createScan(OpenSearchRequestBuilder requestBuilder);
59-
6064
@Override
6165
public boolean pushDownFilter(LogicalFilter filter) {
6266
return delegate.pushDownFilter(filter);

opensearch/src/test/java/org/opensearch/sql/opensearch/storage/scan/OpenSearchIndexScanOptimizationTest.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
package org.opensearch.sql.opensearch.storage.scan;
88

99
import static org.junit.jupiter.api.Assertions.assertEquals;
10-
import static org.junit.jupiter.api.Assertions.assertThrows;
1110
import static org.mockito.Mockito.mock;
1211
import static org.mockito.Mockito.reset;
1312
import static org.mockito.Mockito.times;
@@ -86,7 +85,6 @@
8685
import org.opensearch.sql.planner.optimizer.PushDownPageSize;
8786
import org.opensearch.sql.planner.optimizer.rule.read.CreateTableScanBuilder;
8887
import org.opensearch.sql.storage.Table;
89-
import org.opensearch.sql.storage.TableScanOperator;
9088

9189
@ExtendWith(MockitoExtension.class)
9290
class OpenSearchIndexScanOptimizationTest {
@@ -106,12 +104,7 @@ class OpenSearchIndexScanOptimizationTest {
106104

107105
@BeforeEach
108106
void setUp() {
109-
indexScanBuilder = new OpenSearchIndexScanBuilder(requestBuilder) {
110-
@Override
111-
protected TableScanOperator createScan(OpenSearchRequestBuilder build) {
112-
return indexScan;
113-
}
114-
};
107+
indexScanBuilder = new OpenSearchIndexScanBuilder(requestBuilder, requestBuilder -> indexScan);
115108
when(table.createScanBuilder()).thenReturn(indexScanBuilder);
116109
}
117110

@@ -698,23 +691,15 @@ void project_literal_should_not_be_pushed_down() {
698691

699692
private OpenSearchIndexScanBuilder indexScanBuilder(Runnable... verifyPushDownCalls) {
700693
this.verifyPushDownCalls = verifyPushDownCalls;
701-
return new OpenSearchIndexScanBuilder(new OpenSearchIndexScanQueryBuilder(requestBuilder)) {
702-
@Override
703-
protected TableScanOperator createScan(OpenSearchRequestBuilder build) {
704-
return indexScan;
705-
}
706-
};
694+
return new OpenSearchIndexScanBuilder(new OpenSearchIndexScanQueryBuilder(requestBuilder),
695+
requestBuilder -> indexScan);
707696
}
708697

709698
private OpenSearchIndexScanBuilder indexScanAggBuilder(Runnable... verifyPushDownCalls) {
710699
this.verifyPushDownCalls = verifyPushDownCalls;
711-
return new OpenSearchIndexScanBuilder(new OpenSearchIndexScanAggregationBuilder(
712-
requestBuilder, mock(LogicalAggregation.class))) {
713-
@Override
714-
protected TableScanOperator createScan(OpenSearchRequestBuilder build) {
715-
return indexScan;
716-
}
717-
};
700+
var aggregationBuilder = new OpenSearchIndexScanAggregationBuilder(
701+
requestBuilder, mock(LogicalAggregation.class));
702+
return new OpenSearchIndexScanBuilder(aggregationBuilder, builder -> indexScan);
718703
}
719704

720705
private void assertEqualsAfterOptimization(LogicalPlan expected, LogicalPlan actual) {

0 commit comments

Comments
 (0)