Skip to content

[refactor](session) Replace the execution layer's ConnectType branches with protocol capabilities - #67900

Open
morningman wants to merge 5 commits into
apache:masterfrom
morningman:session-capability-bits
Open

[refactor](session) Replace the execution layer's ConnectType branches with protocol capabilities#67900
morningman wants to merge 5 commits into
apache:masterfrom
morningman:session-capability-bits

Conversation

@morningman

@morningman morningman commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: #67577

Related PR: #67883 (ResultSender), #67835 (ProtocolAdapter), #67789 (protocol goldens)

Problem Summary:

Third and last refactor step of stage 1 of #67577. After #67835 and #67883 the connection half and the result-encoding half of the two wire protocols live behind ProtocolAdapter / ResultSender, but the execution layer still asked ctx.getConnectType() in a dozen places: five times in StmtExecutor, in ConnectContext.supportHandleByFe, in nine insert / transaction Commands (each resetting the MySQL channel), in both coordinators, in the short-circuit rewrite rule and in FEOpExecutor; and the Flight-only returnResultFromLocal flag was flipped from four places outside the adapter. This PR replaces every one of them with a capability or a lifecycle hook on the adapter, one method per use:

  +---------------------------+                             +-----------------------------+
  |       MySQL client        |                             |   Arrow Flight SQL client   |
  +-------------+-------------+                             +--------------+--------------+
                |                                                          |
                v                                                          v
  +---------------------------+                             +-----------------------------+
  | MysqlServer               |                             | DorisFlightSqlProducer      |
  |   AcceptListener          |                             |   every call goes through   |
  |   ReadListener            |                             |   adapter.runCommand()      |
  +-------------+-------------+                             |   executeQueryStatement:    |
                |                                           |   adapter.beginRequest() NEW|
                v                                           +--------------+--------------+
  +---------------------------+                                            |
  |   MysqlConnectProcessor   |                                            v
  |   COM_FIELD_LIST          |                             +-----------------------------+
  |   handleExecute:          |                             |  FlightSqlConnectProcessor  |
  |     adapter.beforeStatement  NEW                        |                             |
  |   finalizeCommand() =     |                             |                             |
  |   adapter.finishCommand() |                             |                             |
  +-------------+-------------+                             +--------------+--------------+
                |                                                          |
                +----------------------------+-----------------------------+
                                             |
                                             v
  +-------------------------------------------------------------------------------------------+
  | ConnectProcessor.executeQuery  --  parse, one StmtExecutor per statement, audit           |
  |     for each statement:  adapter.beforeStatement(ctx)                   <-- NEW           |
  |                          executor.execute()                                               |
  |                          adapter.finishStatement(ctx, executor, i, n)                     |
  |   proxyExecute (master side): MysqlProtocolAdapter.restoreFromForwardRequest  <-- NEW     |
  +---------------------------------------------+---------------------------------------------+
                                                |
                                                v
  +-------------------------------------------------------------------------------------------+
  | StmtExecutor  --  plans and runs one statement, protocol-agnostic                          |
  |                                                                                           |
  |   forwarding a query to the master:   adapter.canReplayForwardedQueryResult()   <-- NEW   |
  |   retry after a failed attempt:       adapter.canRetryQuery(ctx)                <-- NEW   |
  |   executeAndSendResult:               adapter.beforeQuery(ctx), then the coordinator;     |
  |                                       relay rows unless !ctx.isReturnResultFromLocal()    |
  |   FEOpExecutor.buildStmtForwardParams: adapter.fillForwardRequest(ctx, request) <-- NEW   |
  |                                                                                           |
  |   Commands (insert / txn):  no channel reset any more, beforeStatement did it             |
  |   Coordinator / NereidsCoordinator / QueryProcessor:  ctx.isReturnResultFromLocal()       |
  |       decides receivers vs. Flight endpoints, no ConnectType assertion                    |
  |   LogicalResultSinkToShortCircuitPointQuery:  adapter.supportsShortCircuitPointQuery() NEW|
  |   no ConnectType branch and no getMysqlChannel() left in qe/** and nereids/**             |
  +---------------------------------------------+---------------------------------------------+
                                                |
                                                v
  +-------------------------------------------------------------------------------------------+
  | ConnectContext  --  the session, one per connection                                       |
  |   protocolAdapter : ProtocolAdapter          getResultSender() = adapter.resultSender(this)|
  |   supportHandleByFe() = adapter.supportsFeSideResult() && command != COM_STMT_EXECUTE     |
  |   isReturnResultFromLocal() = adapter.returnsResultFromLocal(this)   (setter is gone)     |
  +---------------------------------------------+---------------------------------------------+
                                                |
                                                v
                       +-----------------------------------------------+
                       |  <<interface>>  qe.protocol.ProtocolAdapter   |
                       |   type() remoteHostPortString(ctx)            |
                       |   resultSinkType() resultSender(ctx)          |
                       |   connectPool(scheduler) closeConnection(ctx) |
                       |                                               |
                       |   capabilities:                               |
                       |     supportsSqlCacheReplay()                  |
                       |     canReplayForwardedQueryResult()  <-- NEW  |
                       |     supportsFeSideResult()           <-- NEW  |
                       |     supportsShortCircuitPointQuery() <-- NEW  |
                       |     canRetryQuery(ctx)               <-- NEW  |
                       |                                               |
                       |   statement lifecycle:                        |
                       |     beforeStatement(ctx)             <-- NEW  |
                       |     beforeQuery(ctx)                 <-- NEW  |
                       |     returnsResultFromLocal(ctx)      <-- NEW  |
                       |     finishStatement(ctx, executor, i, n)      |
                       |     afterStatement(ctx)                       |
                       |                                               |
                       |   forwarding:                                 |
                       |     fillForwardRequest(ctx, request) <-- NEW  |
                       +-----------------------+-----------------------+
                                               |
                          +--------------------+----------------------------+
                          |                                                 |
  +-----------------------+----------------------+  +-----------------------+----------------------+
  | mysql.protocol.MysqlProtocolAdapter          |  | arrowflight.protocol.FlightProtocolAdapter   |
  |   capabilities: all true;                    |  |   capabilities: all false (the reasons are   |
  |     canRetryQuery = nothing flushed yet      |  |     documented on each method)               |
  |   beforeStatement: channel.reset()  -- drops |  |   beforeStatement: the statement's result is |
  |     what the previous statement of the       |  |     on this frontend until beforeQuery says  |
  |     request left unsent                      |  |     a backend produces it; the coordinator   |
  |   beforeQuery: nothing, rows are relayed     |  |     then registers the endpoints             |
  |   returnsResultFromLocal: true               |  |   returnsResultFromLocal: that flag          |
  |   fillForwardRequest: capability flags,      |  |   fillForwardRequest: nothing                 |
  |     deprecate-EOF, execute packet + cursor   |  |   beginRequest(): deferred executors, result |
  |   restoreFromForwardRequest (master side)    |  |     cache, endpoints, flag  (Flight-private) |
  |   proxyResultPackets() (master side)         |  |                                              |
  +-----------------------+----------------------+  +-----------------------+----------------------+
                          |                                                 |
                          v                                                 v
  +----------------------------------------------+  +----------------------------------------------+
  | <<interface>> qe.protocol.ResultSender        |  |                                              |
  |   sendResultSet(rs, fieldInfos, binaryRows)   |  |                                              |
  |   sendFields(names, fieldInfos, types)        |  |                                              |
  |   sendRow(wireRow)                            |  |                                              |
  |   reset()  -- now only for a retried query    |  |                                              |
  +----------------------------------------------+  +----------------------------------------------+
  | mysql.protocol.MysqlResultSender (unchanged) |  | arrowflight.protocol.FlightResultSender      |
  |                                              |  |   sendResultSet no longer touches the        |
  |                                              |  |   result-location flag (EXPLAIN never marks  |
  |                                              |  |   the result as coming from a backend now)   |
  +----------------------------------------------+  +----------------------------------------------+

Capabilities. canReplayForwardedQueryResult() guards the refusal to forward a query to the master on a Flight session (#67569; the message is unchanged). supportsFeSideResult() is the protocol half of ConnectContext.supportHandleByFe(); supportsShortCircuitPointQuery() is the protocol half of LogicalResultSinkToShortCircuitPointQuery.scanMatchShortCircuitCondition (#67368); canRetryQuery(ctx) is the retry condition of handleQueryWithRetry: for MySQL "nothing was flushed to the socket yet", for Flight false (the endpoints a failed attempt registered would have to be withdrawn first; nothing does that, as before). The reason each Flight answer is what it is moves onto the Flight implementation, out of the call sites.

Statement lifecycle. beforeStatement(ctx) is called by ConnectProcessor.executeQuery before each statement (and by MysqlConnectProcessor.handleExecute): the MySQL adapter resets the channel there, which is what the query path and the nine Commands did each on their own; the Flight adapter puts the statement's result on this frontend. beforeQuery(ctx) is called at the top of executeAndSendResult, before a coordinator is built: the Flight adapter marks the result as staying on the backends, and Coordinator / NereidsCoordinator / QueryProcessor keep reading ctx.isReturnResultFromLocal() to register endpoints instead of receivers (the checkState(ARROW_FLIGHT_SQL) assertions go, the decision itself does not move). Because beforeQuery runs only where a coordinator follows, an EXPLAIN -- handled earlier in handleQueryStmt -- never marks its result as coming from a backend, and the setReturnResultFromLocal(true) that FlightResultSender.sendResultSet had to do in #67883 is gone with the setter. The four flips in StmtExecutor / FlightSqlConnectProcessor are gone; what a Flight request drops from its predecessor (deferred executors, result cache, endpoints, the flag) is FlightProtocolAdapter.beginRequest().

Forwarding. fillForwardRequest(ctx, request) adds to a TMasterOpRequest what the master needs to know about the client: the MySQL adapter writes the negotiated capability flags, CLIENT_DEPRECATE_EOF and, for a COM_STMT_EXECUTE, the execute packet and the cursor flag (formerly two blocks in FEOpExecutor.buildStmtForwardParams, one of them behind if (MYSQL)); the Flight adapter writes nothing, its session consumes the master's status and rows rather than its packets (carryForwardedOutcome). The master's side, ConnectProcessor.restoreForwardedMysqlContext, becomes MysqlProtocolAdapter.restoreFromForwardRequest, and proxyExecute reads the proxy channel's packets through MysqlProtocolAdapter.proxyResultPackets() instead of StmtExecutor.getProxyQueryResultBufList() casting the channel.

After this PR grep -rn 'ConnectType\.\|getMysqlChannel()' fe-core/src/main/java/org/apache/doris/{qe,nereids} outside */protocol/ finds only the ConnectContext.getMysqlChannel() delegate itself and two lines of MysqlConnectProcessor (reading the client's packet, the auth-switch handshake), which is MySQL protocol code by definition.

One behavior change, on the MySQL side, recorded in the golden. The channel used to be reset at the start of a query and inside the insert / transaction commands, and nowhere else. A client that did not negotiate CLIENT_MULTI_STATEMENTS gets no intermediate response between the statements of a request, so whatever a query wrote stayed in the send buffer until the next query or insert reset it. When the next statement was neither -- select 1; set @a = 1 -- the buffered result set of the SELECT went out together with the OK of the SET: a result set terminated by a 0x00 OK packet, which no MySQL client parses (it reads the OK as a row and waits for more). With the reset at the start of every statement, such a request delivers only its last statement's outcome, which is what MysqlProtocolAdapter.finishStatement has documented as the intent all along. The first commit makes RecordingMysqlChannel model the send buffer (a reset drops what was written after the last flush, the way MysqlChannel.reset() clears it) and records select 1; set @a = 1 with and without the capability as it is today; the second commit's golden diff is exactly that: the three packets of select 1 disappear from multi-statement-without-capability-query-then-set, the OK keeps its sequence id 4. The existing multi-statement-without-capability case (select 1; select 2) loses the three packets of select 1 in the first commit only, because the recording channel now shows what reaches the client -- its sequence ids, 4 to 7, already were the ones on the wire. That the delivered response does not start at sequence id 1 is pre-existing and not touched here: MysqlChannel.reset() clears the buffer but does not rewind the sequence id, so a client that checks sequence ids (pymysql, libmysqlclient; Connector/J does not by default) already fails select 1; select 2 without the capability with "Packet sequence number wrong - got 5 expected 1", before and after this PR. That deserves its own small fix.

Not in this PR: an internal adapter for the no-client context (it is still a MySQL context over a DummyMysqlChannel, now with nothing in the execution layer keyed on that), and the stage 1 performance baseline.

Release note

None

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:

    FlightResultGoldenTest (9 statements) is byte-identical. MysqlPacketGoldenTest gains two cases in the first commit and changes in exactly one of them in the second, as explained above. New cases in MysqlProtocolAdapterTest (capabilities, beforeStatement / canRetryQuery against the recording channel, fillForwardRequest -> restoreFromForwardRequest round trip) and FlightProtocolAdapterTest (capabilities, fillForwardRequest writes nothing, the result-location lifecycle across beforeStatement / beforeQuery / sendResultSet / beginRequest); FEOpExecutorMysqlProtocolTest and DorisFlightSqlProducerTest follow the moved methods. The third commit adds ProtocolCapabilityWiringTest, which drives real statements through the processors and the executor to show that the adapter's answer is what decides at the call sites the adapter tests cannot reach: a query forwarded from a follower is refused on a Flight session before any rpc while a MySQL connection goes on to forward (executeByNereids), a Flight statement starts on the frontend whatever the previous statement of the request did (executeQuery -> beforeStatement), and the master answers a forwarded query with the packets and terminator the client's capabilities ask for, with and without CLIENT_DEPRECATE_EOF (proxyExecute -> restoreFromForwardRequest / proxyResultPackets); plus a golden case for a request ending in a transaction command (select 1; begin, shape only), whose command used to reset the channel itself. Not unit-tested, as before: the retry loop of handleQueryWithRetry itself (its new condition canRetryQuery is, on both adapters; the loop needs a coordinator that fails once). Local regression (single FE built from this branch, BE from f35dd8285aa): arrow_flight_sql_p0 8/8, prepared_stmt_p0 6/6, load_p0/mysql_load 7/7, point_query_p0 16/16, query_p0/cache 12/12, query_p0/explain 9/9, query_p0/dry_run 1/1, query_p0/system 13/14, insert_overwrite_p0 13/13, insert_p0/transaction 16/16, insert_p0/test_jdbc, unique_with_mow_p0/partial_update/test_partial_update_multi_stmt, mtmv_p0/ivm/test_ivm_refresh_dry_run. The one red, test_query_sys_tables, is catalog_meta_cache_statistics failing on the MAX_WEIGHT column [feature](fe) Add external metadata cache memory governance #67726 added to the FE side, which the local BE predates -- a version skew of the test setup, not of this PR.

  • Behavior changed:

    • No.
    • Yes.

    A multi-statement request from a MySQL client without CLIENT_MULTI_STATEMENTS whose last statement is not a query (select 1; set @a = 1) now returns only the last statement's response; it used to return the buffered result set of the query followed by that response, a stream no client can parse.

  • Does this need documentation?

    • No.
    • Yes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WXWFq9NqEnNjsywm5xnmu4

morningman and others added 2 commits September 12, 2026 23:09
…it ends in a SET

RecordingMysqlChannel now models the send buffer: a flush pushes everything
written so far and reset() drops what was written after the last flush, as
MysqlChannel.reset() clears the buffer. The MySQL golden therefore shows what
reaches the client rather than everything the server wrote. The only existing
case this changes is multi-statement-without-capability: the packets of
`select 1` that the reset at `select 2` throws away no longer appear, and the
gap in the sequence ids (the response now starts at seq=4) is exactly what the
client sees on the wire.

Two cases are added for a request whose last statement is not a query,
`select 1; set @A = 1`, with and without CLIENT_MULTI_STATEMENTS. They record
the current behavior before the next commit changes where the channel is
reset: without the capability the client today receives the result set of
`select 1` terminated by the OK packet of the SET, a stream no MySQL client
can parse.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WXWFq9NqEnNjsywm5xnmu4
…s with protocol capabilities

The last protocol branches outside the two adapters go: StmtExecutor, the
coordinators, FEOpExecutor, the short-circuit rewrite rule and nine Commands
no longer ask which protocol the connection speaks. ProtocolAdapter gains
what they need, one method per use:

  canReplayForwardedQueryResult()   forwarding a query to the master
  supportsFeSideResult()            ConnectContext.supportHandleByFe
  supportsShortCircuitPointQuery()  LogicalResultSinkToShortCircuitPointQuery
  canRetryQuery(ctx)                the retry condition of handleQueryWithRetry
  beforeStatement(ctx)              ConnectProcessor.executeQuery / handleExecute
  beforeQuery(ctx)                  executeAndSendResult, before the coordinator
  returnsResultFromLocal(ctx)       behind ConnectContext.isReturnResultFromLocal
  fillForwardRequest(ctx, request)  FEOpExecutor.buildStmtForwardParams

The Flight adapter's returnResultFromLocal is no longer flipped from the
outside: beforeStatement puts a statement's result on this frontend,
beforeQuery hands it to the backends, and the coordinators keep reading
ctx.isReturnResultFromLocal() to choose receivers or Flight endpoints. Since
beforeQuery is called only where a coordinator is about to be built, an
EXPLAIN never marks its result as coming from a backend and
FlightResultSender no longer has to undo that. What a Flight request drops
from its predecessor is gathered in FlightProtocolAdapter.beginRequest().

The MySQL channel is reset once, when a statement starts, instead of in the
query path and in nine insert / transaction Commands. For a client without
CLIENT_MULTI_STATEMENTS a request now delivers only its last statement's
outcome whatever the last statement is; before, `select 1; set @A = 1`
delivered the result set of the SELECT terminated by the OK packet of the
SET, which no client can parse (the golden case
multi-statement-without-capability-query-then-set shows the difference; the
previous commit recorded the old bytes). The query path still resets the
sender at every attempt, so a retry starts from an empty buffer.

The forward request's MySQL section (capability flags, deprecate-EOF, the
COM_STMT_EXECUTE packet and the cursor flag) and its restoration on the master
move into MysqlProtocolAdapter as fillForwardRequest / restoreFromForwardRequest,
and the master reads the proxy channel's packets through the adapter.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WXWFq9NqEnNjsywm5xnmu4
@hello-stephen

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 16780 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 7617069507dcebb8bb7d34c8527d74937d705cb9, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17550	2997	3002	2997
q2	2083	256	226	226
q3	10236	837	520	520
q4	4676	257	205	205
q5	7663	571	388	388
q6	136	121	96	96
q7	533	503	383	383
q8	9258	897	818	818
q9	3434	2422	2407	2407
q10	6515	856	720	720
q11	394	200	179	179
q12	608	261	199	199
q13	18149	1535	1157	1157
q14	162	145	141	141
q15	q16	435	396	374	374
q17	1389	806	781	781
q18	3165	2323	2283	2283
q19	1271	931	760	760
q20	375	282	203	203
q21	5599	1723	1841	1723
q22	323	266	220	220
Total cold run time: 93954 ms
Total hot run time: 16780 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3370	3316	3270	3270
q2	507	386	379	379
q3	2308	2541	2283	2283
q4	1193	1199	895	895
q5	2237	2178	2185	2178
q6	167	125	88	88
q7	1070	941	872	872
q8	1588	1419	1383	1383
q9	3222	3184	3197	3184
q10	1919	1844	1670	1670
q11	361	275	261	261
q12	464	428	335	335
q13	1490	1555	1169	1169
q14	177	167	163	163
q15	q16	392	397	361	361
q17	3680	3303	3295	3295
q18	4955	4535	4909	4535
q19	967	870	845	845
q20	1030	1004	860	860
q21	3736	3063	3203	3063
q22	408	337	325	325
Total cold run time: 35241 ms
Total hot run time: 31414 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 82582 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 7617069507dcebb8bb7d34c8527d74937d705cb9, data reload: false

query5	4273	418	345	345
query6	406	140	126	126
query7	4905	432	231	231
query8	294	136	115	115
query9	8692	2863	2862	2862
query10	409	225	206	206
query11	5385	1048	927	927
query12	120	73	74	73
query13	1184	442	305	305
query14	6045	2244	2140	2140
query14_1	2093	2064	1993	1993
query15	171	127	110	110
query16	906	353	346	346
query17	784	447	354	354
query18	2330	328	243	243
query19	166	144	108	108
query20	75	75	71	71
query21	201	102	87	87
query22	5521	5522	5404	5404
query23	6831	6341	6137	6137
query23_1	6215	6117	6062	6062
query24	7299	1114	771	771
query24_1	770	793	775	775
query25	399	274	236	236
query26	1217	226	122	122
query27	2802	377	247	247
query28	4727	1494	1508	1494
query29	974	426	337	337
query30	255	152	133	133
query31	841	395	325	325
query32	127	78	75	75
query33	445	212	171	171
query34	976	836	459	459
query35	401	397	352	352
query36	569	562	504	504
query37	121	78	70	70
query38	1006	861	817	817
query39	483	482	491	482
query39_1	479	476	474	474
query40	203	89	74	74
query41	53	52	54	52
query42	73	71	70	70
query43	238	239	210	210
query44	996	534	534	534
query45	112	110	103	103
query46	781	848	546	546
query47	766	781	720	720
query48	302	307	228	228
query49	573	235	186	186
query50	735	254	198	198
query51	8001	8124	8080	8080
query52	75	71	59	59
query53	186	203	142	142
query54	235	236	144	144
query55	78	58	55	55
query56	197	178	150	150
query57	713	679	682	679
query58	192	159	161	159
query59	1256	1272	1132	1132
query60	238	174	172	172
query61	129	116	113	113
query62	392	206	177	177
query63	168	138	141	138
query64	2793	653	607	607
query65	1735	1649	1661	1649
query66	1921	259	222	222
query67	10072	9931	9795	9795
query68	2777	1206	745	745
query69	337	218	178	178
query70	678	623	614	614
query71	247	182	164	164
query72	2251	1655	1514	1514
query73	659	606	326	326
query74	1576	1241	1155	1155
query75	1178	1114	963	963
query76	2275	705	523	523
query77	252	258	201	201
query78	4007	3700	3257	3257
query79	1241	834	578	578
query80	880	330	260	260
query81	465	156	131	131
query82	582	123	98	98
query83	293	210	194	194
query84	300	109	90	90
query85	913	341	297	297
query86	365	173	178	173
query87	1028	996	911	911
query88	2757	2119	2116	2116
query89	285	198	172	172
query90	1703	129	119	119
query91	128	114	93	93
query92	72	70	71	70
query93	1230	1148	703	703
query94	534	248	226	226
query95	569	256	229	229
query96	840	607	269	269
query97	1071	1063	1059	1059
query98	143	138	134	134
query99	420	341	308	308
Total cold run time: 175589 ms
Total hot run time: 82582 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 14.8 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 7617069507dcebb8bb7d34c8527d74937d705cb9, data reload: false

query1	0.00	0.01	0.01
query2	0.08	0.03	0.03
query3	0.27	0.11	0.11
query4	1.60	0.09	0.10
query5	0.18	0.15	0.16
query6	1.27	0.71	0.67
query7	0.04	0.00	0.01
query8	0.04	0.02	0.03
query9	0.29	0.21	0.22
query10	0.36	0.36	0.34
query11	0.16	0.11	0.11
query12	0.15	0.12	0.12
query13	0.31	0.30	0.30
query14	0.46	0.46	0.46
query15	0.36	0.35	0.36
query16	0.21	0.20	0.21
query17	0.69	0.69	0.70
query18	0.18	0.16	0.17
query19	1.15	1.17	1.19
query20	0.01	0.02	0.02
query21	15.43	0.16	0.12
query22	5.08	0.05	0.04
query23	16.20	0.25	0.10
query24	3.01	0.32	0.25
query25	0.11	0.04	0.04
query26	0.76	0.16	0.12
query27	0.04	0.03	0.04
query28	3.63	0.55	0.29
query29	12.42	3.15	2.56
query30	0.24	0.12	0.12
query31	2.75	0.36	0.17
query32	3.54	0.33	0.24
query33	1.39	1.45	1.43
query34	15.40	2.23	1.80
query35	1.83	1.77	1.75
query36	0.45	0.30	0.30
query37	0.07	0.04	0.04
query38	0.05	0.04	0.03
query39	0.03	0.03	0.02
query40	0.12	0.08	0.07
query41	0.07	0.03	0.02
query42	0.03	0.02	0.02
query43	0.04	0.03	0.03
Total cold run time: 90.5 s
Total hot run time: 14.8 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 84.48% (49/58) 🎉
Increment coverage report
Complete coverage report

The adapter tests pin what each adapter answers; ProtocolCapabilityWiringTest
drives real statements through the processors and the executor to show the
answer is what decides: a query forwarded from a follower is refused on a
Flight session before any rpc while a MySQL connection goes on to forward;
a Flight statement starts on the frontend whatever the previous statement of
the request did (ConnectProcessor.executeQuery -> beforeStatement); and the
master answers a forwarded query with the packets and terminator the client's
capabilities ask for (proxyExecute -> restoreFromForwardRequest,
proxyResultPackets), with and without CLIENT_DEPRECATE_EOF.

MysqlProtocolAdapterTest checks that the proxy channel's packets come back
through proxyResultPackets(), and the MySQL golden gets a request ending in a
transaction command, `select 1; begin`, whose command used to reset the channel
itself: only the OK is delivered, as before (shape only, the OK carries a
label derived from the query id).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WXWFq9NqEnNjsywm5xnmu4
@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 16693 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit a30eead352438c15fecf0eff5b2a5b9be543f14e, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17608	3047	2993	2993
q2	2071	269	225	225
q3	10240	853	508	508
q4	4672	246	203	203
q5	7681	567	388	388
q6	136	115	92	92
q7	526	498	383	383
q8	9225	922	940	922
q9	3418	2373	2349	2349
q10	6509	841	694	694
q11	391	206	177	177
q12	616	258	196	196
q13	18139	1509	1155	1155
q14	154	150	134	134
q15	q16	439	396	370	370
q17	1400	833	757	757
q18	3058	2239	2235	2235
q19	1301	904	764	764
q20	367	276	208	208
q21	5553	1714	1864	1714
q22	327	268	226	226
Total cold run time: 93831 ms
Total hot run time: 16693 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3372	3302	3291	3291
q2	505	389	376	376
q3	2269	2310	2150	2150
q4	1181	1156	890	890
q5	2146	2098	2088	2088
q6	171	119	86	86
q7	1009	897	913	897
q8	1575	1374	1382	1374
q9	3080	3062	3036	3036
q10	1832	1789	1605	1605
q11	354	268	255	255
q12	457	434	337	337
q13	1478	1517	1160	1160
q14	174	163	162	162
q15	q16	397	391	355	355
q17	3534	3285	3129	3129
q18	4776	4376	4704	4376
q19	855	767	798	767
q20	1148	966	844	844
q21	3725	3006	3159	3006
q22	395	355	312	312
Total cold run time: 34433 ms
Total hot run time: 30496 ms

… and Arrow Flight SQL

Two more wiring tests and three regression suites for what Stage 1 of the
protocol-agnostic session layer moved behind ProtocolAdapter / ResultSender.

Unit tests (ProtocolCapabilityWiringTest):
- A query whose backend rpc failed is retried under a new query id on a MySQL
  connection and not on a Flight session (canRetryQuery). The mocked backend
  gets an injection point, failNextExecPlanFragments(n), that answers the next
  n exec_plan_fragment rpcs with a TIMEOUT status: the coordinator raises that
  as the RpcException the executor retries on, without blacklisting the
  backend.
- An internal executor (the IVM dry run) answers on the caller's connection
  with the caller's capabilities: a caller that did not deprecate EOF gets the
  EOF after the column definitions although the internal session's defaults
  would not send one.

Regression suites:
- arrow_flight_sql_p0/test_arrow_flight_session_lifecycle: one Flight session,
  many requests. Frontend-side results (SHOW, SET, USE, EXPLAIN, EXPLAIN PLAN
  PROCESS, DESC, DDL) come back as text, queries come back typed from the
  backend (a literal too: supportsFeSideResult is false for Flight), the two
  alternate on one session, session state carries across requests, a request
  may only return the result of its last statement, and a failed statement
  leaves the session usable.
- query_p0/test_multi_statement_response: what a client receives for a
  multi-statement request. Connector/J without CLIENT_MULTI_STATEMENTS gets
  only the last statement's response and stays in step, also when that
  statement is a SET, an INSERT or a BEGIN. A bare MySQL protocol client in the
  suite drives the combinations Connector/J cannot negotiate (it asks for
  CLIENT_MULTI_STATEMENTS only when the server advertises it, and always for
  CLIENT_DEPRECATE_EOF): with the capability every statement's response is
  delivered, the intermediate ones flagged SERVER_MORE_RESULTS_EXISTS, with
  and without the EOF packets.
- query_p0/test_mysql_forward_to_master (docker, two FEs): the MySQL side of
  test_arrow_flight_forward_to_master. A query forwarded from a follower
  answers with the master's packets, a forwarded SHOW with its rows, a failed
  one with the master's error, and a server-prepared statement executed with
  a cursor returns the same rows forwarded as it does locally.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WXWFq9NqEnNjsywm5xnmu4
@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 81325 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit a30eead352438c15fecf0eff5b2a5b9be543f14e, data reload: false

query5	4257	436	347	347
query6	392	142	130	130
query7	4908	424	225	225
query8	292	128	139	128
query9	8723	2865	2890	2865
query10	395	224	187	187
query11	5369	1042	933	933
query12	117	74	74	74
query13	1199	459	337	337
query14	6142	2180	2094	2094
query14_1	1964	1954	1944	1944
query15	173	117	110	110
query16	926	360	376	360
query17	787	437	355	355
query18	2332	332	235	235
query19	160	137	115	115
query20	73	72	73	72
query21	203	104	90	90
query22	5331	5323	5336	5323
query23	6542	6235	5983	5983
query23_1	6090	6066	5934	5934
query24	7323	1090	745	745
query24_1	794	774	788	774
query25	425	311	266	266
query26	1220	237	132	132
query27	2786	427	249	249
query28	4684	1487	1506	1487
query29	928	449	356	356
query30	257	164	133	133
query31	826	413	327	327
query32	134	76	76	76
query33	462	238	174	174
query34	1004	831	472	472
query35	403	414	354	354
query36	588	555	517	517
query37	127	89	74	74
query38	986	849	804	804
query39	494	486	474	474
query39_1	463	488	471	471
query40	210	92	106	92
query41	53	54	51	51
query42	71	71	73	71
query43	245	235	207	207
query44	974	523	536	523
query45	105	107	107	107
query46	791	829	512	512
query47	742	760	699	699
query48	303	303	225	225
query49	536	230	186	186
query50	751	247	187	187
query51	7865	7925	7937	7925
query52	65	75	58	58
query53	191	195	145	145
query54	216	157	169	157
query55	77	57	57	57
query56	184	155	149	149
query57	712	640	660	640
query58	201	153	150	150
query59	1212	1197	1093	1093
query60	236	183	175	175
query61	104	112	113	112
query62	339	197	170	170
query63	183	135	141	135
query64	2708	705	591	591
query65	1610	1649	1585	1585
query66	1940	276	222	222
query67	10074	9627	9761	9627
query68	2767	1225	710	710
query69	325	210	192	192
query70	668	650	582	582
query71	240	169	167	167
query72	2285	1687	1506	1506
query73	631	601	323	323
query74	1573	1197	1127	1127
query75	1171	1092	947	947
query76	2293	719	532	532
query77	241	252	206	206
query78	3879	3726	3145	3145
query79	2395	787	569	569
query80	1593	320	285	285
query81	501	162	130	130
query82	611	121	96	96
query83	275	198	184	184
query84	307	106	90	90
query85	751	348	282	282
query86	388	177	175	175
query87	1008	968	886	886
query88	2744	2085	2089	2085
query89	286	197	173	173
query90	1983	128	131	128
query91	129	119	100	100
query92	79	69	70	69
query93	1434	1079	708	708
query94	624	246	226	226
query95	516	325	220	220
query96	781	602	269	269
query97	1073	1039	1039	1039
query98	141	136	127	127
query99	415	355	303	303
Total cold run time: 176503 ms
Total hot run time: 81325 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 14.74 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit a30eead352438c15fecf0eff5b2a5b9be543f14e, data reload: false

query1	0.01	0.01	0.00
query2	0.07	0.04	0.03
query3	0.25	0.11	0.11
query4	1.60	0.10	0.10
query5	0.17	0.17	0.16
query6	1.25	0.67	0.68
query7	0.03	0.00	0.01
query8	0.04	0.04	0.03
query9	0.29	0.22	0.22
query10	0.35	0.35	0.34
query11	0.17	0.12	0.11
query12	0.15	0.12	0.12
query13	0.30	0.31	0.31
query14	0.46	0.45	0.44
query15	0.37	0.34	0.34
query16	0.24	0.22	0.24
query17	0.67	0.76	0.75
query18	0.19	0.17	0.16
query19	1.24	1.16	1.17
query20	0.02	0.01	0.01
query21	15.43	0.16	0.13
query22	5.07	0.04	0.04
query23	16.20	0.25	0.10
query24	3.02	0.33	0.25
query25	0.11	0.03	0.04
query26	0.80	0.16	0.11
query27	0.04	0.04	0.04
query28	3.64	0.49	0.27
query29	12.51	3.15	2.55
query30	0.26	0.12	0.12
query31	2.76	0.37	0.17
query32	3.52	0.31	0.24
query33	1.36	1.54	1.42
query34	15.41	2.16	1.76
query35	1.77	1.74	1.74
query36	0.46	0.29	0.28
query37	0.06	0.04	0.04
query38	0.04	0.03	0.02
query39	0.03	0.03	0.02
query40	0.11	0.08	0.07
query41	0.07	0.02	0.03
query42	0.03	0.02	0.02
query43	0.03	0.02	0.02
Total cold run time: 90.6 s
Total hot run time: 14.74 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 93.10% (54/58) 🎉
Increment coverage report
Complete coverage report

@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 16857 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 5181cbac469aa22570ed33fa6f099a165c24816a, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17551	3044	3030	3030
q2	2104	260	226	226
q3	10221	857	514	514
q4	4668	253	210	210
q5	7664	561	385	385
q6	135	111	95	95
q7	516	526	379	379
q8	9250	918	875	875
q9	3511	2417	2395	2395
q10	6516	892	730	730
q11	391	194	183	183
q12	609	257	201	201
q13	18134	1550	1151	1151
q14	159	143	141	141
q15	q16	440	393	369	369
q17	1369	899	768	768
q18	3158	2569	2287	2287
q19	1268	906	693	693
q20	355	281	199	199
q21	5583	1801	1820	1801
q22	329	273	225	225
Total cold run time: 93931 ms
Total hot run time: 16857 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3398	3336	3311	3311
q2	500	395	370	370
q3	2254	2323	2258	2258
q4	1204	1191	906	906
q5	2211	2181	2168	2168
q6	174	120	85	85
q7	1018	962	915	915
q8	1571	1401	1387	1387
q9	3221	3169	3178	3169
q10	1905	1844	1672	1672
q11	357	272	252	252
q12	454	436	343	343
q13	1501	1534	1181	1181
q14	170	175	168	168
q15	q16	400	393	369	369
q17	3650	3297	3248	3248
q18	4923	4533	4983	4533
q19	977	851	878	851
q20	1026	1001	886	886
q21	3877	3223	3200	3200
q22	387	346	329	329
Total cold run time: 35178 ms
Total hot run time: 31601 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 82975 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 5181cbac469aa22570ed33fa6f099a165c24816a, data reload: false

query5	4239	412	338	338
query6	392	134	131	131
query7	4941	428	228	228
query8	284	129	125	125
query9	8695	2872	2853	2853
query10	403	226	187	187
query11	5386	1037	930	930
query12	117	74	67	67
query13	1199	450	328	328
query14	6067	2245	2137	2137
query14_1	2021	2004	1994	1994
query15	173	126	109	109
query16	920	386	323	323
query17	800	464	364	364
query18	2322	332	242	242
query19	162	142	108	108
query20	78	71	71	71
query21	207	103	87	87
query22	5555	5499	5492	5492
query23	6993	6342	6212	6212
query23_1	6114	6031	6184	6031
query24	7313	1098	777	777
query24_1	749	786	776	776
query25	430	309	246	246
query26	1238	240	127	127
query27	2782	430	257	257
query28	4674	1511	1484	1484
query29	938	443	373	373
query30	246	157	127	127
query31	829	398	338	338
query32	126	78	73	73
query33	462	218	164	164
query34	987	799	492	492
query35	392	408	346	346
query36	575	575	521	521
query37	125	76	69	69
query38	1008	854	836	836
query39	485	484	474	474
query39_1	473	452	461	452
query40	201	87	78	78
query41	52	51	51	51
query42	73	72	70	70
query43	237	239	208	208
query44	994	522	521	521
query45	109	104	107	104
query46	790	830	532	532
query47	767	778	697	697
query48	304	295	231	231
query49	532	243	208	208
query50	775	279	197	197
query51	7973	7996	8025	7996
query52	66	65	56	56
query53	193	199	149	149
query54	221	198	220	198
query55	75	56	58	56
query56	181	168	170	168
query57	693	690	656	656
query58	200	162	152	152
query59	1241	1264	1117	1117
query60	232	207	174	174
query61	113	117	109	109
query62	336	204	167	167
query63	165	142	144	142
query64	2638	699	620	620
query65	1681	1672	1688	1672
query66	1841	243	194	194
query67	9880	10015	10246	10015
query68	2752	1168	758	758
query69	345	222	190	190
query70	682	624	614	614
query71	249	178	174	174
query72	2243	1676	1505	1505
query73	647	663	345	345
query74	1570	1258	1154	1154
query75	1207	1116	986	986
query76	2293	699	492	492
query77	255	267	218	218
query78	4189	3883	3373	3373
query79	1173	817	577	577
query80	1358	333	275	275
query81	490	155	133	133
query82	646	133	94	94
query83	290	210	184	184
query84	293	108	86	86
query85	1025	324	282	282
query86	389	173	176	173
query87	1047	991	912	912
query88	2768	2112	2107	2107
query89	287	194	172	172
query90	1859	131	126	126
query91	127	115	95	95
query92	70	72	70	70
query93	1285	1108	731	731
query94	628	260	226	226
query95	514	260	220	220
query96	798	560	263	263
query97	1109	1092	1018	1018
query98	136	134	133	133
query99	425	350	306	306
Total cold run time: 176022 ms
Total hot run time: 82975 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 14.74 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 5181cbac469aa22570ed33fa6f099a165c24816a, data reload: false

query1	0.00	0.00	0.00
query2	0.08	0.04	0.04
query3	0.24	0.09	0.09
query4	1.60	0.09	0.10
query5	0.18	0.16	0.16
query6	1.24	0.68	0.69
query7	0.04	0.00	0.00
query8	0.05	0.03	0.03
query9	0.28	0.21	0.22
query10	0.35	0.35	0.36
query11	0.17	0.12	0.12
query12	0.15	0.12	0.12
query13	0.31	0.31	0.31
query14	0.47	0.45	0.47
query15	0.37	0.38	0.34
query16	0.21	0.23	0.22
query17	0.71	0.70	0.71
query18	0.19	0.17	0.17
query19	1.20	1.15	1.13
query20	0.01	0.01	0.01
query21	15.43	0.15	0.11
query22	5.17	0.04	0.05
query23	16.15	0.25	0.11
query24	2.93	0.32	0.25
query25	0.11	0.03	0.04
query26	0.78	0.16	0.11
query27	0.03	0.02	0.03
query28	3.63	0.53	0.28
query29	12.46	3.15	2.57
query30	0.26	0.11	0.11
query31	2.76	0.37	0.17
query32	3.52	0.34	0.25
query33	1.48	1.43	1.45
query34	15.39	2.18	1.78
query35	1.79	1.74	1.75
query36	0.47	0.29	0.30
query37	0.07	0.04	0.04
query38	0.04	0.03	0.03
query39	0.03	0.02	0.03
query40	0.10	0.08	0.08
query41	0.07	0.02	0.02
query42	0.03	0.02	0.02
query43	0.04	0.02	0.03
Total cold run time: 90.59 s
Total hot run time: 14.74 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 93.10% (54/58) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 41.38% (24/58) 🎉
Increment coverage report
Complete coverage report

@morningman

Copy link
Copy Markdown
Contributor Author

Local pipeline review — ✅ PASS

schema: doris-repo-review/v1
status: PASS
pr: apache/doris#67900
commit: 5181cbac469aa22570ed33fa6f099a165c24816a
base: efe7dec93d048e27b84edb0a3e2506e4cd872b53
reviewed_at: 2026-09-13T18:08+08:00
reviewer: morningman
model: claude-opus-5
effort: max
findings: {blocker: 0, major: 0, minor: 3, nit: 7}
rounds: 1
converged: true

Notes for maintainers

  • fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java:626-632 — F-02 (Minor): the base's
    per-attempt setReturnResultFromLocal(true) at the top of execute(queryId) is gone, and queryRetry
    re-enters execute(queryId) without beforeStatement, so a replan re-attempt on a Flight session that
    fails before its coordinator runs with a stale false and StatementContext.close() skips the connector
    statement-scope close. One-line fix: context.getProtocolAdapter().beforeStatement(context) before each re-attempt.
  • fe/fe-core/src/main/java/org/apache/doris/mysql/protocol/MysqlProtocolAdapter.java:133-140 — F-01 (Minor,
    pre-existing): the canRetryQuery javadoc's "packets of a failed attempt are dropped by the next reset" is
    false for the master's ProxyMysqlChannel (isSend is never set, proxyResultBuffer is never cleared), so a
    forwarded query retried on the master after a mid-stream rpc failure relays both attempts' packets. Same
    condition in the base; the adapter is now the natural place to fix it (clear the proxy buffer in a
    ProxyMysqlChannel.reset() override).
  • regression-test/suites/query_p0/test_mysql_forward_to_master.groovy:31-36 — F-03 (Minor): the 2-FE docker
    suite is skipped by every pipeline (excludeDockerTest defaults to true; P0 "passed" it in 2 ms) and the PR
    reports no local run, so the forwarded COM_STMT_EXECUTE cursor round trip has no executed evidence. Please
    run it once with excludeDockerTest = false and say so.
  • fe/fe-core/src/main/java/org/apache/doris/qe/protocol/ProtocolAdapter.java:97-102 — Nits: the
    beforeStatement / returnsResultFromLocal contracts promise more than the implementations deliver (2 MB
    auto-flush; Flight keeps the previous statement's endpoints; registration is released right away unless
    deferred); details and the remaining test/description Nits are in the local review documents.

Reviewed locally with the doris-repo-review pipeline. Repository policy may accept this receipt for the matching commit; it is not a human Apache approval.

… Groovy expression

test_mysql_forward_to_master built the follower's JDBC URL over two lines
with the `+` at the start of the second one. In a bare assignment Groovy
ends the statement at the line break, so the second line became a
statement of its own -- a unary plus on a String -- and the suite died
with

    MissingMethodException: No signature of method: java.lang.String.positive()

before reaching the COM_STMT_EXECUTE half. Nothing caught it because the
suite is a docker suite and CI never runs those. Found by running the
suite's body against a local 2-FE cluster, where it now passes end to end
(the forwarded server-side prepared statement included). Trailing `+`
keeps the concatenation inside one expression.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hRBG4Au5xYrRvs5T9y2CH
@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 17107 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit d60a614ce7923dd791c1dcbcf0f9d162c410a3a9, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17588	3059	3063	3059
q2	2108	266	228	228
q3	10216	891	515	515
q4	4677	250	208	208
q5	7664	574	389	389
q6	140	114	94	94
q7	533	510	398	398
q8	9330	910	950	910
q9	3400	2407	2421	2407
q10	6497	885	743	743
q11	398	196	184	184
q12	614	262	197	197
q13	18134	1544	1135	1135
q14	155	146	145	145
q15	q16	434	395	372	372
q17	1363	903	844	844
q18	3118	2286	2257	2257
q19	1268	839	794	794
q20	390	280	207	207
q21	5631	1791	1863	1791
q22	339	273	230	230
Total cold run time: 93997 ms
Total hot run time: 17107 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3440	3368	3363	3363
q2	502	389	375	375
q3	2203	2381	2123	2123
q4	1203	1172	906	906
q5	2176	2149	2102	2102
q6	169	120	90	90
q7	1026	916	878	878
q8	1585	1413	1421	1413
q9	3154	3121	3150	3121
q10	1875	1804	1672	1672
q11	359	268	253	253
q12	456	438	342	342
q13	1477	1533	1175	1175
q14	173	174	160	160
q15	q16	394	394	353	353
q17	3609	3354	3205	3205
q18	4854	4464	4825	4464
q19	956	884	870	870
q20	1032	967	869	869
q21	3851	3297	3305	3297
q22	393	349	308	308
Total cold run time: 34887 ms
Total hot run time: 31339 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 82504 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit d60a614ce7923dd791c1dcbcf0f9d162c410a3a9, data reload: false

query5	4245	408	346	346
query6	378	140	123	123
query7	4945	434	233	233
query8	295	124	117	117
query9	8700	2900	2886	2886
query10	401	210	184	184
query11	5380	1054	938	938
query12	125	72	69	69
query13	1189	441	321	321
query14	5955	2210	2105	2105
query14_1	1989	1997	1990	1990
query15	175	128	117	117
query16	919	371	365	365
query17	804	468	364	364
query18	2340	333	239	239
query19	169	142	111	111
query20	76	73	70	70
query21	208	105	90	90
query22	5656	5345	5313	5313
query23	7024	6282	5987	5987
query23_1	6242	6149	6248	6149
query24	7265	1093	757	757
query24_1	746	764	778	764
query25	401	281	232	232
query26	1225	229	125	125
query27	2789	427	258	258
query28	4689	1515	1496	1496
query29	906	406	332	332
query30	246	156	128	128
query31	812	405	331	331
query32	128	72	72	72
query33	454	212	176	176
query34	1001	867	491	491
query35	404	407	351	351
query36	562	547	504	504
query37	124	79	75	75
query38	1008	859	811	811
query39	497	491	473	473
query39_1	477	467	471	467
query40	200	87	74	74
query41	53	51	50	50
query42	72	69	71	69
query43	242	239	211	211
query44	995	532	538	532
query45	112	105	100	100
query46	745	843	510	510
query47	757	793	716	716
query48	321	302	238	238
query49	569	248	187	187
query50	738	265	190	190
query51	8195	8262	8088	8088
query52	70	71	62	62
query53	202	205	155	155
query54	211	176	207	176
query55	82	61	58	58
query56	215	204	173	173
query57	687	696	681	681
query58	200	171	180	171
query59	1249	1226	1114	1114
query60	227	177	173	173
query61	111	115	112	112
query62	335	208	203	203
query63	178	142	141	141
query64	2710	724	623	623
query65	1642	1592	1710	1592
query66	1828	261	202	202
query67	9952	9939	9842	9842
query68	3021	1170	757	757
query69	351	225	222	222
query70	659	640	607	607
query71	245	166	167	166
query72	2260	1653	1498	1498
query73	640	614	323	323
query74	1995	1223	1135	1135
query75	1195	1098	970	970
query76	2395	717	527	527
query77	249	278	205	205
query78	4052	3691	3261	3261
query79	2309	846	623	623
query80	1599	328	273	273
query81	493	160	132	132
query82	627	124	99	99
query83	281	212	191	191
query84	289	108	88	88
query85	771	338	280	280
query86	390	180	162	162
query87	1019	992	898	898
query88	2821	2126	2111	2111
query89	294	193	177	177
query90	1953	122	126	122
query91	126	116	95	95
query92	74	71	71	71
query93	1344	1084	714	714
query94	621	245	225	225
query95	512	327	230	230
query96	808	593	295	295
query97	1034	1033	1027	1027
query98	143	139	134	134
query99	420	346	309	309
Total cold run time: 178261 ms
Total hot run time: 82504 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 14.85 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit d60a614ce7923dd791c1dcbcf0f9d162c410a3a9, data reload: false

query1	0.01	0.01	0.00
query2	0.08	0.04	0.03
query3	0.25	0.12	0.11
query4	1.61	0.10	0.11
query5	0.18	0.16	0.16
query6	1.25	0.69	0.68
query7	0.03	0.00	0.01
query8	0.04	0.03	0.03
query9	0.29	0.22	0.21
query10	0.34	0.34	0.34
query11	0.16	0.12	0.11
query12	0.16	0.12	0.12
query13	0.30	0.31	0.31
query14	0.44	0.45	0.46
query15	0.37	0.36	0.34
query16	0.21	0.22	0.23
query17	0.69	0.68	0.71
query18	0.18	0.17	0.16
query19	1.15	1.15	1.14
query20	0.02	0.01	0.01
query21	15.46	0.15	0.11
query22	5.11	0.04	0.04
query23	16.18	0.26	0.12
query24	2.99	0.32	0.26
query25	0.12	0.04	0.03
query26	0.80	0.16	0.13
query27	0.04	0.03	0.03
query28	3.67	0.56	0.26
query29	12.44	3.18	2.60
query30	0.27	0.13	0.13
query31	2.76	0.39	0.18
query32	3.52	0.33	0.24
query33	1.49	1.46	1.40
query34	15.41	2.23	1.84
query35	1.78	1.79	1.77
query36	0.45	0.31	0.29
query37	0.06	0.04	0.04
query38	0.05	0.03	0.03
query39	0.03	0.02	0.02
query40	0.12	0.08	0.07
query41	0.07	0.02	0.02
query42	0.03	0.02	0.02
query43	0.03	0.03	0.02
Total cold run time: 90.64 s
Total hot run time: 14.85 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 93.10% (54/58) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 51.43% (36/70) 🎉
Increment coverage report
Complete coverage report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants