Skip to content

[fix](file) Align V2 condition cache and avoid profile race#66056

Open
Gabriel39 wants to merge 2 commits into
apache:masterfrom
Gabriel39:agent/parquet-v2-condition-cache-range-coalescing
Open

[fix](file) Align V2 condition cache and avoid profile race#66056
Gabriel39 wants to merge 2 commits into
apache:masterfrom
Gabriel39:agent/parquet-v2-condition-cache-range-coalescing

Conversation

@Gabriel39

@Gabriel39 Gabriel39 commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary:

  1. FileScannerV2 split every selected Parquet range at each 2048-row condition-cache granule. Unlike the V1 RowRanges implementation, it did not merge adjacent surviving granules. An all-true cache hit therefore capped physical batches at the cache granule size and inflated reader calls. This change merges adjacent intersections while preserving gaps for false granules, aligning V2 range semantics with V1.
  2. External regression exposed a race while parallel Iceberg position-delete splits initialized a shared scanner profile. Each split performed a separate child lookup and creation; two misses could therefore create the same named child and abort the BE. This change adds an atomic get-or-create operation and makes the position-delete reader reuse the shared child safely.

The condition-cache regression test configures a 4096-row batch over two adjacent true granules. It returned only 2048 rows before the fix and returns 4096 rows after the fix. The profile regression test starts 16 callers together and verifies that concurrent initialization creates exactly one shared child.

Release note

Condition-cache hits no longer split adjacent surviving Parquet ranges at cache granule boundaries. Parallel Iceberg position-delete scans no longer race while creating their nested runtime profile.

Check List (For Author)

  • Test
    • Unit Test
      • ./run-be-ut.sh --run --filter='*ConditionCache*' -j 32 (29 tests passed)
      • ./run-be-ut.sh --run --filter='RuntimeProfileTest.ConcurrentGetOrCreateChildReturnsSameProfile:IcebergPositionDeleteSysTableV2ProfileTest.*' -j 32 (2 tests passed)
      • Concurrent profile test repeated 100 times under ASAN
    • Regression test
    • Manual test
  • Additional checks
    • build-support/check-format.sh
    • git diff --check
    • run-clang-tidy.sh was attempted; the local analyzer could not find the system stddef.h header. The actionable changed-line diagnostic was fixed, and the unit-test build completed with warnings treated as errors.
  • Behavior changed:
    • Yes. Adjacent true cache granules retain the original read-range batch boundary; false-granule gaps are unchanged. Concurrent Iceberg splits atomically reuse their nested reader profile.
  • Does this need documentation?
    • No.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

### What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: FileScannerV2 split every selected Parquet range at each 2048-row condition-cache granule. Unlike the V1 RowRanges implementation, it did not merge adjacent surviving granules, so an all-true cache hit capped physical batches at the cache granule size and inflated reader calls. Merge adjacent intersections while preserving gaps for false granules.

### Release note

Condition-cache hits no longer split adjacent surviving Parquet ranges at cache granule boundaries.

### Check List (For Author)

- Test: Unit Test
    - ./run-be-ut.sh --run --filter=*ConditionCache* -j 32
- Behavior changed: Yes. Adjacent true cache granules retain the original read-range batch boundary.
- Does this need documentation: No.
@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?

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review result: no blocking issues found.

Critical checkpoints:

  • Goal and correctness: The change coalesces only touching half-open Condition Cache survivor ranges. It preserves the exact selected row set, retains false-granule and deferred PageIndex gaps, and restores the V1 RowRanges batching semantics described by the PR.
  • Scope and focus: The production change is small and localized to range normalization, with one focused BE unit regression test.
  • Concurrency: No concurrent state or lock behavior changes. The scheduler rewrites its local plan before row-group readers are created.
  • Lifecycle and memory safety: No ownership or static-lifecycle changes. Native reader cursors, lazy-column lag, retained scratch, row-group reset, and EOF remain row-count driven rather than cache-granule driven.
  • Configuration and compatibility: No configuration, protocol, symbol, storage-format, or rolling-upgrade surface changes. V1 already canonicalizes touching ranges, and parallel PageIndex logic preserves semantic gaps.
  • Conditions and error handling: The adjacency condition is exact and cannot bridge a false cache granule. No Status or exception path changes.
  • Test coverage and results: The added test directly distinguishes the old 2048-row first batch from the intended 4096-row batch. Existing adjacent Condition Cache coverage checks false gaps, survivor values, filtered-row accounting, and follow-up EOF. No repository build or test was run in this review environment because the review contract prohibits builds; the author reports 29 targeted Condition Cache tests passed.
  • Observability: Existing Condition Cache filtered-row, raw/selected-row, TotalBatches, reader, profile-flush, and EOF accounting remain consistent. TotalBatches intentionally decreases for adjacent survivors.
  • Transactions, persistence, data writes, and FE-BE variable propagation: Not applicable to this reader-side range normalization.
  • Performance: The patch removes artificial 2048-row fragmentation on all-true adjacent granules without adding per-row work or extra allocations.
  • Other issues: No actionable correctness, compatibility, lifecycle, performance, observability, or coverage defect remained after two review rounds.

User focus: No additional user-provided focus points were supplied.

Overall opinion: From the code-review perspective, this focused fix is safe to merge once the normal project CI gates complete.

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17812	4308	4292	4292
q2	1999	324	197	197
q3	10371	1381	802	802
q4	4680	476	343	343
q5	7502	855	566	566
q6	185	177	138	138
q7	757	809	604	604
q8	9807	1587	1582	1582
q9	6002	4244	4305	4244
q10	6785	1751	1440	1440
q11	534	352	316	316
q12	762	595	474	474
q13	18391	3369	2727	2727
q14	270	264	263	263
q15	q16	792	778	723	723
q17	1054	1020	1046	1020
q18	6984	5765	5503	5503
q19	1357	1308	1138	1138
q20	798	671	581	581
q21	5838	2619	2424	2424
q22	438	361	309	309
Total cold run time: 103118 ms
Total hot run time: 29686 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4580	4486	4467	4467
q2	299	318	224	224
q3	4565	5003	4538	4538
q4	2086	2212	1397	1397
q5	4445	4327	4369	4327
q6	234	176	130	130
q7	2345	1914	1681	1681
q8	2661	2124	2225	2124
q9	7756	7907	7780	7780
q10	4679	4697	4253	4253
q11	755	446	412	412
q12	775	788	567	567
q13	3283	3624	2974	2974
q14	303	304	285	285
q15	q16	729	762	695	695
q17	1408	1395	1364	1364
q18	8083	7338	6950	6950
q19	1110	1063	1082	1063
q20	2246	2218	1952	1952
q21	5370	4788	4617	4617
q22	529	471	416	416
Total cold run time: 58241 ms
Total hot run time: 52216 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 178180 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 cb7579f4dc8fbe79932739fbdf56c86ab42e3dee, data reload: false

query5	4342	636	506	506
query6	477	241	211	211
query7	4842	589	341	341
query8	345	194	192	192
query9	8774	4149	4077	4077
query10	475	376	307	307
query11	5938	2361	2129	2129
query12	161	107	104	104
query13	1250	621	421	421
query14	6255	5208	4899	4899
query14_1	4265	4232	4266	4232
query15	212	202	177	177
query16	1024	501	458	458
query17	1125	718	588	588
query18	2453	485	353	353
query19	216	195	150	150
query20	116	108	109	108
query21	239	173	143	143
query22	13625	13703	13407	13407
query23	17331	16390	16153	16153
query23_1	16149	16278	16241	16241
query24	7673	1755	1290	1290
query24_1	1284	1311	1305	1305
query25	565	477	419	419
query26	1341	388	214	214
query27	2544	621	393	393
query28	4455	2043	1992	1992
query29	1095	645	477	477
query30	332	282	244	244
query31	1142	1103	992	992
query32	111	68	64	64
query33	554	341	255	255
query34	1169	1105	633	633
query35	773	791	680	680
query36	1185	1223	1103	1103
query37	156	108	97	97
query38	1880	1733	1651	1651
query39	887	869	863	863
query39_1	830	852	880	852
query40	258	161	141	141
query41	66	61	64	61
query42	95	92	93	92
query43	332	327	286	286
query44	1454	801	765	765
query45	195	182	178	178
query46	1107	1238	743	743
query47	2105	2110	1963	1963
query48	389	410	290	290
query49	585	419	321	321
query50	1037	441	332	332
query51	10715	10972	10741	10741
query52	85	88	75	75
query53	281	278	201	201
query54	281	226	226	226
query55	78	74	66	66
query56	314	311	280	280
query57	1289	1267	1173	1173
query58	316	263	253	253
query59	1595	1674	1526	1526
query60	302	281	258	258
query61	149	150	152	150
query62	545	498	431	431
query63	249	215	206	206
query64	2848	1046	887	887
query65	4741	4575	4599	4575
query66	1844	498	385	385
query67	29353	29334	29176	29176
query68	3385	1583	1040	1040
query69	414	304	279	279
query70	1064	955	958	955
query71	398	336	309	309
query72	3053	2706	2406	2406
query73	828	736	406	406
query74	5103	4901	4714	4714
query75	2538	2499	2135	2135
query76	2340	1156	760	760
query77	357	380	276	276
query78	11805	11977	11327	11327
query79	1443	1097	770	770
query80	1320	553	480	480
query81	541	328	282	282
query82	616	156	119	119
query83	375	325	303	303
query84	271	165	133	133
query85	998	633	527	527
query86	433	313	285	285
query87	1839	1820	1772	1772
query88	3697	2828	2747	2747
query89	448	376	340	340
query90	1896	201	192	192
query91	203	194	170	170
query92	67	62	56	56
query93	1663	1563	948	948
query94	712	342	326	326
query95	782	500	560	500
query96	1124	823	367	367
query97	2667	2638	2485	2485
query98	226	217	203	203
query99	1086	1115	978	978
Total cold run time: 264236 ms
Total hot run time: 178180 ms

@hello-stephen

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

query1	0.00	0.00	0.00
query2	0.09	0.04	0.08
query3	0.25	0.14	0.14
query4	1.61	0.15	0.14
query5	0.25	0.22	0.23
query6	1.30	1.09	1.02
query7	0.04	0.01	0.00
query8	0.05	0.04	0.03
query9	0.39	0.32	0.32
query10	0.60	0.57	0.58
query11	0.20	0.15	0.14
query12	0.19	0.14	0.14
query13	0.48	0.49	0.48
query14	1.02	1.03	1.02
query15	0.62	0.60	0.61
query16	0.32	0.33	0.33
query17	1.09	1.11	1.14
query18	0.24	0.22	0.22
query19	2.04	1.89	1.93
query20	0.02	0.01	0.01
query21	15.40	0.23	0.15
query22	4.79	0.05	0.05
query23	16.13	0.30	0.12
query24	2.99	0.39	0.33
query25	0.12	0.05	0.04
query26	0.72	0.20	0.15
query27	0.03	0.04	0.04
query28	3.54	0.96	0.55
query29	12.56	4.18	3.33
query30	0.28	0.15	0.15
query31	2.78	0.61	0.31
query32	3.22	0.60	0.50
query33	3.13	3.25	3.18
query34	15.45	4.22	3.54
query35	3.57	3.54	3.53
query36	0.55	0.44	0.44
query37	0.09	0.06	0.07
query38	0.06	0.04	0.04
query39	0.04	0.03	0.04
query40	0.19	0.17	0.16
query41	0.09	0.03	0.03
query42	0.04	0.03	0.02
query43	0.04	0.04	0.03
Total cold run time: 96.61 s
Total hot run time: 25.2 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100.00% (7/7) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 73.87% (30518/41315)
Line Coverage 57.99% (336095/579563)
Region Coverage 54.32% (279874/515257)
Branch Coverage 55.23% (124292/225026)

@Gabriel39
Gabriel39 marked this pull request as ready for review July 26, 2026 10:17
@Gabriel39
Gabriel39 requested a review from yiguolei as a code owner July 26, 2026 10:17
@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@Gabriel39 Gabriel39 changed the title [fix](parquet) Coalesce adjacent condition cache ranges [fix](file) Align V2 condition cache and avoid profile race Jul 26, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review result: no blocking issues found.

Critical checkpoints:

  • Goal and correctness: The patch restores V1-style coalescing for touching Parquet Condition Cache survivor ranges without changing the selected row set, and atomically reuses the nested Iceberg position-delete profile across parallel scanners.
  • Scope and focus: The production changes are small and localized to range normalization plus one reusable RuntimeProfile primitive and its Iceberg call site.
  • Concurrency: FileScannerV2 instances share the local-state scanner profile. get_or_create_child() holds _children_lock across lookup, allocation, and insertion; counter registration is locked and counter updates are atomic. No reverse lock order or per-block lock work was introduced.
  • Lifecycle and memory safety: The parent profile owns the shared child; each outer reader uniquely owns and closes its inner reader; scanner-profile lifetime outlives scanner readers. No static-initialization, ownership-cycle, cache-handle, or untracked large-allocation issue is introduced.
  • Configuration, compatibility, and parallel paths: No configuration, FE/BE protocol, persisted/storage format, symbol removal, rolling-upgrade, transaction, or data-write behavior changes. Parquet Page Index, partial-cache, false-gap, lazy-read, row-position, ORC position-delete, and mixed Parquet/ORC profile paths remain consistent.
  • Conditions and errors: Exact adjacency cannot bridge a false granule, uncovered cache coordinates remain conservative, and Status/error propagation is unchanged.
  • Tests and expected results: The new Parquet test distinguishes the old 2048-row first batch from the intended 4096-row batch; the new latch-based 16-thread test proves one shared child. Existing neighboring tests cover false gaps, survivor values, cache accounting/EOF, and distinct Iceberg inner profiles. The review environment prohibited builds/tests; the author reports the targeted BE tests passed. Current formatting, CheckStyle, license, dependency, title, and secret checks pass, while broader BE/compile/external/performance checks are still pending.
  • Observability and performance: Existing filtered/raw/selected row and reader/profile counters keep their meanings. Adjacent true granules now avoid artificial batch fragmentation, and profile locking occurs only during child lookup/creation rather than the scan hot path.
  • Other issues: No actionable correctness, compatibility, lifecycle, performance, observability, or coverage defect remained after the main review plus normal Parquet, normal RuntimeProfile/Iceberg, and risk-focused convergence passes.

User focus: No additional user-provided focus points were supplied.

Overall opinion: From the code-review perspective, this focused fix is safe to merge once the normal project CI gates complete.

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17683	4051	4170	4051
q2	2049	339	199	199
q3	10411	1428	826	826
q4	4745	472	342	342
q5	8000	871	575	575
q6	268	169	138	138
q7	779	817	627	627
q8	10669	1571	1556	1556
q9	6036	4321	4354	4321
q10	6811	1732	1471	1471
q11	517	349	326	326
q12	745	579	468	468
q13	18135	3426	2715	2715
q14	262	263	246	246
q15	q16	787	783	708	708
q17	1024	996	1077	996
q18	6876	5801	5449	5449
q19	1169	1299	1080	1080
q20	801	721	581	581
q21	5658	2653	2325	2325
q22	421	348	299	299
Total cold run time: 103846 ms
Total hot run time: 29299 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4403	4332	4316	4316
q2	284	310	207	207
q3	4577	4978	4355	4355
q4	2330	2119	1338	1338
q5	4405	4225	4343	4225
q6	227	174	126	126
q7	2169	1941	1570	1570
q8	2474	2167	2128	2128
q9	7702	7741	7795	7741
q10	4631	4632	4219	4219
q11	551	409	365	365
q12	724	857	634	634
q13	3282	3622	2948	2948
q14	304	315	276	276
q15	q16	702	738	651	651
q17	1353	1319	1324	1319
q18	8075	7400	6678	6678
q19	1114	1066	1132	1066
q20	2222	2200	1937	1937
q21	5148	4466	4308	4308
q22	522	438	410	410
Total cold run time: 57199 ms
Total hot run time: 50817 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 176986 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 921b998923fe9dc8cf62993fe62af0f7dc25a964, data reload: false

query5	4332	627	495	495
query6	452	210	199	199
query7	4914	563	350	350
query8	340	184	171	171
query9	8764	4008	3994	3994
query10	448	359	301	301
query11	5922	2321	2163	2163
query12	168	101	100	100
query13	1254	624	423	423
query14	6252	5195	4825	4825
query14_1	4247	4243	4216	4216
query15	219	208	185	185
query16	999	477	483	477
query17	1140	711	576	576
query18	2520	469	357	357
query19	208	192	150	150
query20	111	106	106	106
query21	237	156	130	130
query22	13590	13623	13316	13316
query23	17367	16513	16057	16057
query23_1	16269	16275	16257	16257
query24	7648	1724	1263	1263
query24_1	1278	1283	1267	1267
query25	568	469	400	400
query26	1369	349	211	211
query27	2600	590	390	390
query28	4463	1994	2002	1994
query29	1075	638	508	508
query30	338	263	230	230
query31	1110	1093	970	970
query32	115	65	63	63
query33	530	323	249	249
query34	1158	1133	630	630
query35	781	812	672	672
query36	1214	1173	1050	1050
query37	156	114	94	94
query38	1876	1704	1667	1667
query39	885	868	858	858
query39_1	840	828	831	828
query40	260	203	152	152
query41	68	63	64	63
query42	92	92	90	90
query43	320	314	293	293
query44	1415	767	762	762
query45	198	181	175	175
query46	1033	1193	720	720
query47	2185	2123	1961	1961
query48	408	396	283	283
query49	574	429	296	296
query50	1090	403	334	334
query51	11172	10781	10649	10649
query52	87	85	75	75
query53	260	289	204	204
query54	277	231	222	222
query55	74	69	66	66
query56	294	286	289	286
query57	1324	1262	1211	1211
query58	274	250	251	250
query59	1531	1618	1430	1430
query60	304	282	254	254
query61	158	148	143	143
query62	541	495	467	467
query63	241	204	213	204
query64	2832	1041	846	846
query65	4744	4600	4630	4600
query66	1821	496	373	373
query67	28588	29059	29066	29059
query68	3295	1467	992	992
query69	422	300	277	277
query70	1068	969	973	969
query71	368	338	317	317
query72	3017	2748	2364	2364
query73	789	738	433	433
query74	5064	4886	4741	4741
query75	2533	2487	2137	2137
query76	2337	1200	744	744
query77	351	367	276	276
query78	11898	11898	11283	11283
query79	1389	1106	737	737
query80	1266	571	456	456
query81	574	332	293	293
query82	620	153	122	122
query83	366	319	295	295
query84	283	162	129	129
query85	1001	649	516	516
query86	414	283	262	262
query87	1826	1820	1775	1775
query88	3788	2855	2824	2824
query89	441	372	330	330
query90	1873	193	196	193
query91	199	187	159	159
query92	63	59	53	53
query93	1648	1458	971	971
query94	731	356	306	306
query95	795	613	472	472
query96	1093	806	351	351
query97	2639	2636	2514	2514
query98	213	207	204	204
query99	1089	1120	969	969
Total cold run time: 263707 ms
Total hot run time: 176986 ms

@hello-stephen

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

query1	0.01	0.01	0.00
query2	0.10	0.05	0.05
query3	0.26	0.13	0.13
query4	1.61	0.14	0.13
query5	0.24	0.22	0.22
query6	1.27	1.07	1.11
query7	0.04	0.01	0.01
query8	0.06	0.04	0.04
query9	0.38	0.30	0.30
query10	0.55	0.58	0.57
query11	0.20	0.14	0.14
query12	0.18	0.15	0.14
query13	0.48	0.47	0.48
query14	1.02	1.02	1.00
query15	0.61	0.59	0.58
query16	0.32	0.32	0.33
query17	1.08	1.07	1.11
query18	0.24	0.22	0.21
query19	2.01	2.00	1.89
query20	0.01	0.01	0.01
query21	15.40	0.22	0.14
query22	4.83	0.05	0.06
query23	16.11	0.30	0.12
query24	3.00	0.42	0.32
query25	0.11	0.05	0.04
query26	0.73	0.21	0.15
query27	0.05	0.04	0.02
query28	3.61	0.95	0.55
query29	12.50	4.11	3.29
query30	0.28	0.16	0.15
query31	2.77	0.59	0.31
query32	3.22	0.60	0.49
query33	3.15	3.18	3.35
query34	15.71	4.23	3.53
query35	3.52	3.49	3.51
query36	0.56	0.42	0.43
query37	0.09	0.06	0.06
query38	0.06	0.05	0.03
query39	0.04	0.04	0.03
query40	0.20	0.17	0.15
query41	0.09	0.04	0.04
query42	0.04	0.03	0.03
query43	0.04	0.04	0.04
Total cold run time: 96.78 s
Total hot run time: 24.98 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 80.00% (20/25) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 75.34% (31126/41316)
Line Coverage 59.90% (347166/579577)
Region Coverage 56.73% (292309/515267)
Branch Coverage 58.01% (130549/225032)

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