[
https://issues.apache.org/jira/browse/IGNITE-28932?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Maksim Davydov updated IGNITE-28932:
------------------------------------
Description:
The garbage collector used by ducktest nodes is hardcoded to G1 in
_jvm_utils.create_jvm_settings()_, whose _gc_settings_ parameter no caller ever
passes - so comparing Ignite's behaviour under a different collector currently
means editing that constant.
Passing the collector through jvm_opts does not work either:
_merge_jvm_settings() _overwrites
per option, keyed on the substring before the first =, so -XX:+UseG1GC and
-XX:+UseZGC are different keys and both survive the merge, producing a JVM that
aborts at startup with "Multiple garbage collectors selected". GC selection is
really mutually-exclusive group replacement — the collector and its tuning
flags travel together — so it has
to be chosen before the default option list is assembled rather than patched
afterwards.
The proposal is a gc global backed by a named profile registry (G1, PARALLEL,
SERIAL, ZGC, SHENANDOAH), selectable independently for the server and client
roles, with G1 remaining the default and conflicting selectors raising in
Python instead of failing later in a remote JVM. This also fixes two latent
issues it exposes:
-XX:+UseStringDeduplication currently sits in the generic parameter block
although it is G1-only through JDK 17, and CDC copies a server cluster's fully
resolved option list into the client-role KafkaToIgniteService, which would put
two collectors on one command line.
was:
The garbage collector used by ducktest nodes is hardcoded to G1 in
_jvm_utils.create_jvm_settings()_, whose _gc_settings _parameter no caller ever
passes - so comparing Ignite's behaviour under a different collector currently
means editing that constant.
Passing the collector through jvm_opts does not work either:
_merge_jvm_settings() _overwrites
per option, keyed on the substring before the first =, so -XX:+UseG1GC and
-XX:+UseZGC are different keys and both survive the merge, producing a JVM that
aborts at startup with "Multiple garbage collectors selected". GC selection is
really mutually-exclusive group replacement — the collector and its tuning
flags travel together — so it has
to be chosen before the default option list is assembled rather than patched
afterwards.
The proposal is a gc global backed by a named profile registry (G1, PARALLEL,
SERIAL, ZGC, SHENANDOAH), selectable independently for the server and client
roles, with G1 remaining the default and conflicting selectors raising in
Python instead of failing later in a remote JVM. This also fixes two latent
issues it exposes:
-XX:+UseStringDeduplication currently sits in the generic parameter block
although it is G1-only through JDK 17, and CDC copies a server cluster's fully
resolved option list into the client-role KafkaToIgniteService, which would put
two collectors on one command line.
> [ducktests] Make garbage collector selectable via globals
> ---------------------------------------------------------
>
> Key: IGNITE-28932
> URL: https://issues.apache.org/jira/browse/IGNITE-28932
> Project: Ignite
> Issue Type: Task
> Reporter: Maksim Davydov
> Assignee: Maksim Davydov
> Priority: Minor
>
> The garbage collector used by ducktest nodes is hardcoded to G1 in
> _jvm_utils.create_jvm_settings()_, whose _gc_settings_ parameter no caller
> ever passes - so comparing Ignite's behaviour under a different collector
> currently means editing that constant.
> Passing the collector through jvm_opts does not work either:
> _merge_jvm_settings() _overwrites
> per option, keyed on the substring before the first =, so -XX:+UseG1GC and
> -XX:+UseZGC are different keys and both survive the merge, producing a JVM
> that aborts at startup with "Multiple garbage collectors selected". GC
> selection is really mutually-exclusive group replacement — the collector and
> its tuning flags travel together — so it has
> to be chosen before the default option list is assembled rather than
> patched afterwards.
> The proposal is a gc global backed by a named profile registry (G1,
> PARALLEL, SERIAL, ZGC, SHENANDOAH), selectable independently for the server
> and client roles, with G1 remaining the default and conflicting selectors
> raising in Python instead of failing later in a remote JVM. This also fixes
> two latent issues it exposes:
> -XX:+UseStringDeduplication currently sits in the generic parameter block
> although it is G1-only through JDK 17, and CDC copies a server cluster's
> fully resolved option list into the client-role KafkaToIgniteService, which
> would put two collectors on one command line.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)