[ https://issues.apache.org/jira/browse/IGNITE-20201?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ilya Shishkov updated IGNITE-20201: ----------------------------------- Description: There are no metric name validation when we perform hitrate and historgam metrics configuration by means of control script. It can lead to impossibility to restart persistent cluster. *How to reproduce:* # Start persistent cluster # Just repeat commands from instructions [1]. {noformat} control.sh —metric —configure-histogram histogram-metric-name 1,2,3 control.sh —metric —configure-hitrate hitrate-metric-name 1000 {noformat} # Deactivate and restart cluster. # Start and activate cluster and nodes will fail with following error: {noformat} [19:47:26,981][SEVERE][main][IgniteKernal] Got exception while starting (will rollback startup routine). java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(String.java:1967) at org.apache.ignite.internal.processors.metric.impl.MetricUtils.fromFullName(MetricUtils.java:72) at org.apache.ignite.internal.processors.metric.GridMetricManager.find(GridMetricManager.java:502) at org.apache.ignite.internal.processors.metric.GridMetricManager.onHistogramConfigChanged(GridMetricManager.java:480) at org.apache.ignite.internal.processors.metric.GridMetricManager.access$300(GridMetricManager.java:73) at org.apache.ignite.internal.processors.metric.GridMetricManager$1.lambda$onReadyForRead$1(GridMetricManager.java:272) at org.apache.ignite.internal.processors.metastorage.persistence.InMemoryCachedDistributedMetaStorageBridge.iterate(InMemoryCachedDistributedMetaStorageBridge.java:87) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.iterate(DistributedMetaStorageImpl.java:542) at org.apache.ignite.internal.processors.metric.GridMetricManager$1.onReadyForRead(GridMetricManager.java:272) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.notifyReadyForRead(DistributedMetaStorageImpl.java:355) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.onMetaStorageReadyForRead(DistributedMetaStorageImpl.java:434) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.access$200(DistributedMetaStorageImpl.java:116) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl$2.onReadyForRead(DistributedMetaStorageImpl.java:259) at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.notifyMetastorageReadyForRead(GridCacheDatabaseSharedManager.java:430) at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.readMetastore(GridCacheDatabaseSharedManager.java:877) at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.notifyMetaStorageSubscribersOnReadyForRead(GridCacheDatabaseSharedManager.java:3094) at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1120) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1725) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1647) at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1089) at org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:983) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:889) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:808) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:678) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:647) at org.apache.ignite.Ignition.start(Ignition.java:325) at org.apache.ignite.startup.cmdline.CommandLineStartup.main(CommandLineStartup.java:365) {noformat} Failure occurs when {{GridMetricManager}} tries to parse entries with incorrect metric names from metastorage: {noformat} metrics.histogram.histogram-metric-name [1, 2, 3] metrics.hitrate.hitrate-metric-name 1000 {noformat} Solution: # Add extra validation of metric name into {{\-\-metric \-\-configure-*}} command. # Add exception handling into {{GridMetricManager.onHistogramConfigChanged}} and {{GridMetricManager.onHitrateConfigChanged}}. *Workaround:* Clean metastorage. Links: # https://ignite.apache.org/docs/latest/tools/control-script#metric-configure-command was: There are no metric name validation when we perform hitrate and historgam metrics configuration by means of control script. It can lead to impossibility to restart persistent cluster. *How to reproduce:* # Start persistent cluster # Just repeat commands from instructions [1]. {noformat} control.sh —metric —configure-histogram histogram-metric-name 1,2,3 control.sh —metric —configure-hitrate hitrate-metric-name 1000 {noformat} # Deactivate and restart cluster. # Start and activate cluster and nodes will fail with following error: {noformat} [19:47:26,981][SEVERE][main][IgniteKernal] Got exception while starting (will rollback startup routine). java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(String.java:1967) at org.apache.ignite.internal.processors.metric.impl.MetricUtils.fromFullName(MetricUtils.java:72) at org.apache.ignite.internal.processors.metric.GridMetricManager.find(GridMetricManager.java:502) at org.apache.ignite.internal.processors.metric.GridMetricManager.onHistogramConfigChanged(GridMetricManager.java:480) at org.apache.ignite.internal.processors.metric.GridMetricManager.access$300(GridMetricManager.java:73) at org.apache.ignite.internal.processors.metric.GridMetricManager$1.lambda$onReadyForRead$1(GridMetricManager.java:272) at org.apache.ignite.internal.processors.metastorage.persistence.InMemoryCachedDistributedMetaStorageBridge.iterate(InMemoryCachedDistributedMetaStorageBridge.java:87) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.iterate(DistributedMetaStorageImpl.java:542) at org.apache.ignite.internal.processors.metric.GridMetricManager$1.onReadyForRead(GridMetricManager.java:272) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.notifyReadyForRead(DistributedMetaStorageImpl.java:355) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.onMetaStorageReadyForRead(DistributedMetaStorageImpl.java:434) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.access$200(DistributedMetaStorageImpl.java:116) at org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl$2.onReadyForRead(DistributedMetaStorageImpl.java:259) at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.notifyMetastorageReadyForRead(GridCacheDatabaseSharedManager.java:430) at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.readMetastore(GridCacheDatabaseSharedManager.java:877) at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.notifyMetaStorageSubscribersOnReadyForRead(GridCacheDatabaseSharedManager.java:3094) at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1120) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1725) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1647) at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1089) at org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:983) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:889) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:808) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:678) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:647) at org.apache.ignite.Ignition.start(Ignition.java:325) at org.apache.ignite.startup.cmdline.CommandLineStartup.main(CommandLineStartup.java:365) {noformat} Failure occurs when {{GridMetricManager}} tries to parse entries with incorrect metric names from metastorage: {noformat} metrics.histogram.histogram-metric-name [1, 2, 3] metrics.hitrate.hitrate-metric-name 1000 {noformat} Solution: # Add extra validation of metric name into {{--metic --configure-*}} command. # Add exception handling into {{GridMetricManager.onHistogramConfigChanged}} and {{GridMetricManager.onHitrateConfigChanged}}. *Workaround:* Clean metastorage. Links: # https://ignite.apache.org/docs/latest/tools/control-script#metric-configure-command > Node failure when incorrect names are used for hitrate and histogram metrics > configuration > ------------------------------------------------------------------------------------------ > > Key: IGNITE-20201 > URL: https://issues.apache.org/jira/browse/IGNITE-20201 > Project: Ignite > Issue Type: Bug > Affects Versions: 2.15 > Reporter: Ilya Shishkov > Priority: Critical > > There are no metric name validation when we perform hitrate and historgam > metrics configuration by means of control script. It can lead to > impossibility to restart persistent cluster. > *How to reproduce:* > # Start persistent cluster > # Just repeat commands from instructions [1]. > {noformat} > control.sh —metric —configure-histogram histogram-metric-name 1,2,3 > control.sh —metric —configure-hitrate hitrate-metric-name 1000 > {noformat} > # Deactivate and restart cluster. > # Start and activate cluster and nodes will fail with following error: > {noformat} > [19:47:26,981][SEVERE][main][IgniteKernal] Got exception while starting (will > rollback startup routine). > java.lang.StringIndexOutOfBoundsException: String index out of range: -1 > at java.lang.String.substring(String.java:1967) > at > org.apache.ignite.internal.processors.metric.impl.MetricUtils.fromFullName(MetricUtils.java:72) > at > org.apache.ignite.internal.processors.metric.GridMetricManager.find(GridMetricManager.java:502) > at > org.apache.ignite.internal.processors.metric.GridMetricManager.onHistogramConfigChanged(GridMetricManager.java:480) > at > org.apache.ignite.internal.processors.metric.GridMetricManager.access$300(GridMetricManager.java:73) > at > org.apache.ignite.internal.processors.metric.GridMetricManager$1.lambda$onReadyForRead$1(GridMetricManager.java:272) > at > org.apache.ignite.internal.processors.metastorage.persistence.InMemoryCachedDistributedMetaStorageBridge.iterate(InMemoryCachedDistributedMetaStorageBridge.java:87) > at > org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.iterate(DistributedMetaStorageImpl.java:542) > at > org.apache.ignite.internal.processors.metric.GridMetricManager$1.onReadyForRead(GridMetricManager.java:272) > at > org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.notifyReadyForRead(DistributedMetaStorageImpl.java:355) > at > org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.onMetaStorageReadyForRead(DistributedMetaStorageImpl.java:434) > at > org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.access$200(DistributedMetaStorageImpl.java:116) > at > org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl$2.onReadyForRead(DistributedMetaStorageImpl.java:259) > at > org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.notifyMetastorageReadyForRead(GridCacheDatabaseSharedManager.java:430) > at > org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.readMetastore(GridCacheDatabaseSharedManager.java:877) > at > org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.notifyMetaStorageSubscribersOnReadyForRead(GridCacheDatabaseSharedManager.java:3094) > at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1120) > at > org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1725) > at > org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1647) > at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1089) > at > org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:983) > at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:889) > at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:808) > at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:678) > at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:647) > at org.apache.ignite.Ignition.start(Ignition.java:325) > at > org.apache.ignite.startup.cmdline.CommandLineStartup.main(CommandLineStartup.java:365) > {noformat} > Failure occurs when {{GridMetricManager}} tries to parse entries with > incorrect metric names from metastorage: > {noformat} > metrics.histogram.histogram-metric-name [1, 2, 3] > > > metrics.hitrate.hitrate-metric-name 1000 > {noformat} > Solution: > # Add extra validation of metric name into {{\-\-metric \-\-configure-*}} > command. > # Add exception handling into {{GridMetricManager.onHistogramConfigChanged}} > and {{GridMetricManager.onHitrateConfigChanged}}. > *Workaround:* > Clean metastorage. > Links: > # > https://ignite.apache.org/docs/latest/tools/control-script#metric-configure-command -- This message was sent by Atlassian Jira (v8.20.10#820010)