[ 
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)

Reply via email to