Mikhail Efremov created IGNITE-26690:
----------------------------------------
Summary: Unable to update at least storage profiles
Key: IGNITE-26690
URL: https://issues.apache.org/jira/browse/IGNITE-26690
Project: Ignite
Issue Type: Bug
Reporter: Mikhail Efremov
*Description*
Scenario to reproduce:
# Download zip archives with CLI and DB, unzip locally and run both with
./ignite3-cli-3.1.0/bin/ignite3 and ./ignite3-db-3.0.0/bin/ignite3db with
defaults and without any changes.
# Init cluster in CLI with {{cluster init --name=test
--metastorage-group=defaultNode}}
# Try to add a new storage profile from
[docs|https://ignite.apache.org/docs/ignite3/latest/administrators-guide/storage]:
{{{}node config update
"ignite.storage.profiles:{rocksProfile{engine:rocksdb,size:10000{}}}"}}
After step 3 we will get an error:
{code:java}
[defaultNode]> node config update
"ignite.storage.profiles:{rocksProfile{engine:rocksdb,size:10000}}"
Trace ID: e0d518cf-31d2-4d5d-86bc-48abf0f17aad
Failed to apply configuration
{code}
Moreover, mostly any configuration update through CLI will lead to such error
message:
{code:java}
[defaultNode]> node config update "ignite.compute.threadPoolSize=10"
Trace ID: 1d2c7418-a1a6-4d5a-b865-0e32854a2a0d
Failed to apply configuration
{code}
Screenshot is attached.
*Workaround*
To figure out what is going on we can configure {{jvm arguments with
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:8000}}
and attach to the launched AI3 instance, add breakpoint on the single line with
an exception trowing with the message on {{HoconPresentation.java:93}} and
retry the scenario (codebase on {{{}branch ignite-3.1.0{}}}). Breakpoint will
be triggered and in e there will be the true cause:
{{{}NullPointerException{}}}. In the cause’s stacktrace we will find a
potential reason: inside {{renderHoconString}} we will fail on {{boolean
hasInjectedValues = !node.isEmpty() &&
getFirstNode(node).injectedValueFieldName() != null;}} on line
{{{}ConverterToMapVisitor.java:154{}}}. The {{node}} and {{getFirstNode(node)}}
both are possible {{null}} value, but the idea is: some read configuration node
is null (in particular – storage profiles node).
Let’s find then that from a time ago AI3's configuration file
{{etc/ignite-config.conf}} was shrink to this:
{code:java}
ignite {
network {
nodeFinder {
netClusterNodes=[
"localhost:3344"
]
type=STATIC
}
port=3344
}
}{code}
We may suspect that the node tries to read this file and insert new storage
profile, but during tree visiting cannot find {{storage.profiles}} node and got
NPE then. Let’s insert storage profiles section to the file:
{code:java}
ignite {
network {
nodeFinder {
netClusterNodes=[
"localhost:3344"
]
type=STATIC
}
port=3344
}
storage {
profiles=[
{
engine=aipersist
name=default
replacementMode=CLOCK
sizeBytes=-1
}
]
}
}
{code}
And restart the node. Check that the default profile is still there:
{code:java}
[defaultNode]> node config show ignite.storage.profiles
[
engine=aipersist
name=default
replacementMode=CLOCK
sizeBytes=-1
]
{code}
({*}NB{*}: wrong indentation level!)
Then let’s try to add new {{rocksdb}} storage profile again:
{code:java}
[defaultNode]> node config update
"ignite.storage.profiles:{rocksProfile{engine:rocksdb,size:10000}}"
Node configuration updated. Restart the node to apply changes.
{code}
So, it solved the problem, let’s restart the node and re-check profiles list:
{code:java}
[defaultNode]> node config show ignite.storage.profiles
[
engine=aipersist
name=default
replacementMode=CLOCK
sizeBytes=-1
,
engine=rocksdb
name=rocksProfile
sizeBytes=10000
writeBufferSizeBytes=67108864
]
{code}
So, workaround works, but the bug is still presented.
*Motivation*
We have to fix this because it’s definitely not normal that on release a user
is unable to change any piece of configuration and as workaround we want to
suggest to write all defaults to the configuration file manually to evade NPEs.
*Definition of Done*
User is able to make any configuration update that is described in
documentation.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)