-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Turn on v2 engine by default #10543
Turn on v2 engine by default #10543
Conversation
cb5f727
to
a29d141
Compare
IIRC - default enabling the feature flag will have no impact on existing production queries unless they are also changed to include the query option to use the multi stage query engine ? |
This is just to start the query engine by default, ofc we will see extra resources utilization (grpc server started/ports open etc). The normal query path won't go through it unless specifying |
@@ -139,13 +138,11 @@ protected Connection getPinotConnection() { | |||
|
|||
@Override | |||
protected void overrideBrokerConf(PinotConfiguration brokerConf) { | |||
brokerConf.setProperty(CommonConstants.Helix.CONFIG_OF_MULTI_STAGE_ENGINE_ENABLED, true); | |||
brokerConf.setProperty(QueryConfig.KEY_OF_QUERY_RUNNER_PORT, 8421); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so we still need these port config? can we check whether it is possible to default dynamic port allocation?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Those shouldn't matter, let me remove them as well
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The issue is instance config in helix is using port 0, so workers cannot talk to each other. Need to find the available port first then set it into server config.
Codecov Report
@@ Coverage Diff @@
## master #10543 +/- ##
============================================
- Coverage 70.35% 70.35% -0.01%
Complexity 6464 6464
============================================
Files 2103 2103
Lines 112769 112792 +23
Branches 16981 16988 +7
============================================
+ Hits 79341 79353 +12
+ Misses 27877 27863 -14
- Partials 5551 5576 +25
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 31 files with indirect coverage changes 📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
145c20b
to
107db8a
Compare
_serverConf.setProperty(QueryConfig.KEY_OF_QUERY_SERVER_PORT, NetUtils.findOpenPort()); | ||
} | ||
if (_serverConf.getProperty(QueryConfig.KEY_OF_QUERY_RUNNER_PORT, QueryConfig.DEFAULT_QUERY_RUNNER_PORT) == 0) { | ||
_serverConf.setProperty(QueryConfig.KEY_OF_QUERY_RUNNER_PORT, NetUtils.findOpenPort()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doing this can have query runner port differ from one worker to another ? In that case, how will they talk to each other ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
port configurations are stored in serverInstance and it is backed up to Helix via InstanceConfig
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It comes from the instanceConfig in Helix.
@@ -94,7 +94,6 @@ public String[] getDefaultBatchTableDirectories() { | |||
@Override | |||
public Map<String, Object> getConfigOverrides() { | |||
Map<String, Object> overrides = new HashMap<>(super.getConfigOverrides()); | |||
overrides.put("pinot.multistage.engine.enabled", "true"); | |||
overrides.put("pinot.server.instance.currentDataTableVersion", 4); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
By default data table version is 3. I think enabling multistage engine alone wouldn't be sufficient since v2 queries will fail with data-table v3.
pinot/pinot-core/src/main/java/org/apache/pinot/core/common/datatable/DataTableBuilderFactory.java
Line 37 in 29fd5d9
public static final int DEFAULT_VERSION = DataTableFactory.VERSION_3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point, any idea this doesn't fail on integration test?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc: @walterddr
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
datatable version is set to 4 in multistage integration tests
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
6081fa6
to
60a7927
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm. we can also have a restart integration test that basically
- start broker/server
- tear it down and start them again (in server/broker or broker/server order)
- see if they still can query
test failure seems reproducible in 2 CI runs. can you take a look? |
60a7927
to
a7bf88a
Compare
a7bf88a
to
a8b222c
Compare
@@ -150,15 +150,12 @@ public DataTableImplV4(ByteBuffer byteBuffer) | |||
} | |||
|
|||
// Read variable size data. | |||
_variableSizeDataBytes = new byte[variableSizeDataLength]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@walterddr Please verify this logic.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this should be ok.
Turn on v2 engine by default.
Also tested the broker/server restart with dynamic port changes, reflected in helix instance configs.