This is an automated email from the ASF dual-hosted git repository.
ibessonov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 3043bec6c0 IGNITE-19181 ConfigurationNotificationEvent API modified to
include both old and new node/name values. (#1883)
3043bec6c0 is described below
commit 3043bec6c010b5ebd897ea2f2346b8c3308f9a00
Author: Ivan Bessonov <[email protected]>
AuthorDate: Mon Apr 3 15:30:37 2023 +0300
IGNITE-19181 ConfigurationNotificationEvent API modified to include both
old and new node/name values. (#1883)
---
.../ignite/configuration/NamedListChange.java | 2 +-
.../ConfigurationNamedListListener.java | 8 +-
.../ConfigurationNotificationEvent.java | 36 +-
.../configuration/DynamicConfiguration.java | 17 -
.../asm/ConfigurationImplAsmGenerator.java | 19 +-
.../notifications/ConfigurationContainer.java | 86 +++--
.../ConfigurationNotificationContext.java | 21 +-
.../ConfigurationNotificationEventImpl.java | 39 +--
.../notifications/ConfigurationNotifier.java | 55 ++-
.../ConfigurationAnyListenerTest.java | 162 ++++-----
.../notifications/ConfigurationListenerTest.java | 373 ++++++++++-----------
.../ConfigurationListenerTestUtils.java | 2 +-
.../testframework/ConfigurationExtension.java | 2 +
.../distributionzones/DistributionZoneManager.java | 8 +-
.../apache/ignite/internal/index/IndexManager.java | 2 -
.../placementdriver/AssignmentsTracker.java | 7 +-
.../StubAuthenticationViewEvent.java | 17 +-
.../ignite/internal/schema/SchemaManager.java | 2 +-
.../PersistentPageMemoryStorageEngine.java | 15 +-
.../VolatilePageMemoryStorageEngine.java | 15 +-
.../storage/rocksdb/RocksDbStorageEngine.java | 12 +-
.../internal/table/distributed/TableManager.java | 13 +-
22 files changed, 446 insertions(+), 467 deletions(-)
diff --git
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListChange.java
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListChange.java
index 912a56572a..1c3e819be7 100644
---
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListChange.java
+++
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListChange.java
@@ -103,7 +103,7 @@ public interface NamedListChange<VIEWT, CHANGET extends
VIEWT> extends NamedList
* Element with key {@code oldKey} must exist and key {@code newKey} must
not.
* Error will occur if {@code newKey} has just been deleted on the same
* {@link NamedListChange} instance (to distinguish between
- * {@link ConfigurationNamedListListener#onRename(String, String,
ConfigurationNotificationEvent)} and
+ * {@link
ConfigurationNamedListListener#onRename(ConfigurationNotificationEvent)} and
* {@link
ConfigurationNamedListListener#onUpdate(ConfigurationNotificationEvent)} on
{@code newKey}).
*
* @param oldKey Key for the value to be updated.
diff --git
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/notifications/ConfigurationNamedListListener.java
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/notifications/ConfigurationNamedListListener.java
index 3d9986f5ad..667bbbd51f 100644
---
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/notifications/ConfigurationNamedListListener.java
+++
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/notifications/ConfigurationNamedListListener.java
@@ -40,14 +40,12 @@ public interface ConfigurationNamedListListener<VIEWT>
extends ConfigurationList
/**
* Called when a named list element is renamed. Semantically equivalent to
{@link #onUpdate(ConfigurationNotificationEvent)} with the
* difference that the content of the element might have not been changed.
No separate {@link #onUpdate(ConfigurationNotificationEvent)}
- * call is performed when {@link #onRename(String, String,
ConfigurationNotificationEvent)} is already invoked.
+ * call is performed when {@link
#onRename(ConfigurationNotificationEvent)} is already invoked.
*
- * @param oldName Name, previously assigned to the element.
- * @param newName New name of the element.
- * @param ctx Notification context.
+ * @param ctx Notification context.
* @return Future that signifies the end of the listener execution.
*/
- default CompletableFuture<?> onRename(String oldName, String newName,
ConfigurationNotificationEvent<VIEWT> ctx) {
+ default CompletableFuture<?>
onRename(ConfigurationNotificationEvent<VIEWT> ctx) {
return completedFuture(null);
}
diff --git
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/notifications/ConfigurationNotificationEvent.java
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/notifications/ConfigurationNotificationEvent.java
index 3d61d65c39..d5dca3f68f 100644
---
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/notifications/ConfigurationNotificationEvent.java
+++
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/notifications/ConfigurationNotificationEvent.java
@@ -35,11 +35,31 @@ public interface ConfigurationNotificationEvent<VIEWT> {
*/
@Nullable VIEWT oldValue();
+ /**
+ * Returns old value of the parent (any from the root) or current
configuration.
+ *
+ * <p>For example, if we changed the child configuration, then we can get
both the parent and the current child configuration.
+ *
+ * @param viewClass Configuration interface, for example {@code
RootView.class}.
+ * @param <T> Configuration type.
+ */
+ @Nullable <T> T oldValue(Class<T> viewClass);
+
/**
* Returns updated value of the configuration.
*/
@Nullable VIEWT newValue();
+ /**
+ * Returns new value of the parent (any from the root) or current
configuration.
+ *
+ * <p>For example, if we changed the child configuration, then we can get
both the parent and the current child configuration.
+ *
+ * @param viewClass Configuration interface, for example {@code
RootView.class}.
+ * @param <T> Configuration type.
+ */
+ @Nullable <T> T newValue(Class<T> viewClass);
+
/**
* Returns monotonously increasing counter, linked to the specific storage
for current configuration values. Gives a unique change
* identifier inside a specific configuration storage.
@@ -49,22 +69,22 @@ public interface ConfigurationNotificationEvent<VIEWT> {
long storageRevision();
/**
- * Returns the parent (any from the root) or current configuration.
+ * Returns old value of the key of a named list item for the parent (any
from the root) or current configuration.
*
- * <p>For example, if we changed the child configuration, then we can get
both the parent and the current child configuration.
+ * <p>For example, if a column of a table has changed, then we can get the
name of the table and columns for which the changes have
+ * occurred.
*
- * @param configClass Configuration interface, for example {@code
RootConfiguration}.
- * @param <T> Configuration type.
+ * @param viewClass Configuration interface, for example {@code
TableView.class}.
*/
- @Nullable <T extends ConfigurationProperty> T config(Class<T> configClass);
+ @Nullable String oldName(Class<?> viewClass);
/**
- * Returns the key of a named list item for the parent (any from the root)
or current configuration.
+ * Returns new value of the key of a named list item for the parent (any
from the root) or current configuration.
*
* <p>For example, if a column of a table has changed, then we can get the
name of the table and columns for which the changes have
* occurred.
*
- * @param configClass Configuration interface, for example {@code
TableConfiguration}.
+ * @param viewClass Configuration interface, for example {@code
TableView.class}.
*/
- @Nullable String name(Class<? extends ConfigurationProperty> configClass);
+ @Nullable String newName(Class<?> viewClass);
}
diff --git
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/DynamicConfiguration.java
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/DynamicConfiguration.java
index a94ecf5132..fc56103149 100644
---
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/DynamicConfiguration.java
+++
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/DynamicConfiguration.java
@@ -47,9 +47,6 @@ public abstract class DynamicConfiguration<VIEWT, CHANGET
extends VIEWT> extends
/** Configuration members (leaves and nodes). */
protected volatile Map<String, ConfigurationProperty<?>> members = new
LinkedHashMap<>();
- /** Removed from the named list. */
- protected boolean removedFromNamedList;
-
/**
* Constructor.
*
@@ -265,18 +262,4 @@ public abstract class DynamicConfiguration<VIEWT, CHANGET
extends VIEWT> extends
) {
members.remove(member.key());
}
-
- /**
- * Mark that the configuration has been removed from the named list.
- */
- public void removedFromNamedList() {
- removedFromNamedList = true;
- }
-
- /**
- * Return {@code true} if the configuration has been removed from the
named list.
- */
- public boolean isRemovedFromNamedList() {
- return removedFromNamedList;
- }
}
diff --git
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/asm/ConfigurationImplAsmGenerator.java
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/asm/ConfigurationImplAsmGenerator.java
index 6f982dfe69..3dc8e89d3c 100644
---
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/asm/ConfigurationImplAsmGenerator.java
+++
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/asm/ConfigurationImplAsmGenerator.java
@@ -29,7 +29,6 @@ import static
com.facebook.presto.bytecode.expression.BytecodeExpressions.consta
import static
com.facebook.presto.bytecode.expression.BytecodeExpressions.constantClass;
import static
com.facebook.presto.bytecode.expression.BytecodeExpressions.constantInt;
import static
com.facebook.presto.bytecode.expression.BytecodeExpressions.constantString;
-import static
com.facebook.presto.bytecode.expression.BytecodeExpressions.inlineIf;
import static
com.facebook.presto.bytecode.expression.BytecodeExpressions.invokeDynamic;
import static
com.facebook.presto.bytecode.expression.BytecodeExpressions.newArray;
import static
com.facebook.presto.bytecode.expression.BytecodeExpressions.newInstance;
@@ -115,12 +114,6 @@ class ConfigurationImplAsmGenerator extends
AbstractAsmGenerator {
/** {@link DynamicConfiguration#specificConfigTree} method. */
private static final Method SPECIFIC_CONFIG_TREE_MTD;
- /** {@code ConfigurationNode#currentValue}. */
- private static final Method CURRENT_VALUE_MTD;
-
- /** {@link DynamicConfiguration#isRemovedFromNamedList}. */
- private static final Method IS_REMOVED_FROM_NAMED_LIST_MTD;
-
/** Field name for method {@link
DynamicConfiguration#internalConfigTypes}. */
private static final String INTERNAL_CONFIG_TYPES_FIELD_NAME =
"_internalConfigTypes";
@@ -146,10 +139,6 @@ class ConfigurationImplAsmGenerator extends
AbstractAsmGenerator {
REMOVE_MEMBER_MTD =
DynamicConfiguration.class.getDeclaredMethod("removeMember", Map.class,
ConfigurationProperty.class);
SPECIFIC_CONFIG_TREE_MTD =
DynamicConfiguration.class.getDeclaredMethod("specificConfigTree");
-
- CURRENT_VALUE_MTD =
ConfigurationNode.class.getDeclaredMethod("currentValue");
-
- IS_REMOVED_FROM_NAMED_LIST_MTD =
DynamicConfiguration.class.getDeclaredMethod("isRemovedFromNamedList");
} catch (NoSuchMethodException nsme) {
throw new ExceptionInInitializerError(nsme);
}
@@ -687,15 +676,11 @@ class ConfigurationImplAsmGenerator extends
AbstractAsmGenerator {
// this;
Variable thisVar = polymorphicInstanceConfigTypeMtd.getThis();
- // tmpObj = this.isRemovedFromNamedList() ? this.currentValue() :
this.refreshValue();
+ // tmpObj = this.refreshValue();
// tmpStr = ((ConfigNode) tmpObj).typeId;
// switch(tmpStr) ...
polymorphicInstanceConfigTypeMtd.getBody()
- .append(tmpObjVar.set(inlineIf(
- thisVar.invoke(IS_REMOVED_FROM_NAMED_LIST_MTD),
- thisVar.invoke(CURRENT_VALUE_MTD),
- thisVar.invoke(REFRESH_VALUE_MTD))
- ))
+ .append(tmpObjVar.set(thisVar.invoke(REFRESH_VALUE_MTD)))
.append(tmpStrVar.set(tmpObjVar.cast(nodeType).getField(polymorphicTypeIdFieldDef.getName(),
String.class)))
.append(switchBuilder.build())
.ret();
diff --git
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationContainer.java
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationContainer.java
index c688a64138..3d8a58c688 100644
---
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationContainer.java
+++
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationContainer.java
@@ -17,60 +17,92 @@
package org.apache.ignite.internal.configuration.notifications;
-import org.apache.ignite.configuration.ConfigurationProperty;
import
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
-import org.apache.ignite.internal.configuration.DynamicConfiguration;
import org.apache.ignite.internal.configuration.tree.InnerNode;
import org.jetbrains.annotations.Nullable;
/**
- * Configuration container for {@link ConfigurationNotificationEvent}.
+ * Configuration container for {@link ConfigurationNotificationEvent}. Stores
old and new nodes for the event, as well as their names.
+ * Represents a stack, where current pair of nodes is at the top, and roots
pair is at the bottom.
*/
class ConfigurationContainer {
- /**
- * Configuration.
- *
- * <p>For {@link ConfigurationNotificationEvent#config} use {@link
this#specificConfig()}.
- */
- final DynamicConfiguration<InnerNode, ?> config;
+ /** Parent container. */
+ public final @Nullable ConfigurationContainer prev;
- /** Key in named list, for {@link ConfigurationNotificationEvent#name}. */
+ /** {@link InnerNode#specificNode()} for the old value. */
@Nullable
- final String name;
+ private final Object oldNode;
- /** Previous container. */
+ /** {@link InnerNode#specificNode()} for the new value. */
@Nullable
- final ConfigurationContainer prev;
+ private final Object newNode;
+
+ /** Old name, if the node is a part of named list. */
+ private final String oldName;
+
+ /** New name, if the node is a part of named list. */
+ private final String newName;
/**
* Constructor.
*
- * @param config Configuration.
- * @param name Key in named list.
+ * @param prev Parent container.
+ * @param oldNode Old inner node value.
+ * @param newNode New inner node value.
+ * @param oldName Name of the old value, if part of the named list.
+ * @param newName Name of the new value, if part of the named list.
*/
ConfigurationContainer(
- DynamicConfiguration<InnerNode, ?> config,
- @Nullable String name,
- @Nullable ConfigurationContainer prev
+ @Nullable ConfigurationContainer prev,
+ @Nullable InnerNode oldNode,
+ @Nullable InnerNode newNode,
+ @Nullable String oldName,
+ @Nullable String newName
) {
- this.config = config;
- this.name = name;
this.prev = prev;
+ this.oldNode = oldNode == null ? null : oldNode.specificNode();
+ this.newNode = newNode == null ? null : newNode.specificNode();
+ this.oldName = oldName;
+ this.newName = newName;
}
/**
- * Returns the configuration for {@link
ConfigurationNotificationEvent#config}.
+ * Finds a node value that corresponds to a given {@code View} class.
+ *
+ * @param clazz Class instance of the {@code *View} type.
+ * @param old Whether an old or a new value is asked.
*/
- @Nullable ConfigurationProperty<InnerNode> specificConfig() {
- return config.isRemovedFromNamedList() ? null :
config.specificConfigTree();
+ public @Nullable <T> T find(Class<T> clazz, boolean old) {
+ Object specificNode = node(old);
+
+ if (clazz.isInstance(specificNode)) {
+ return (T) specificNode;
+ }
+
+ return prev == null ? null : prev.find(clazz, old);
}
/**
- * Returns the configuration class.
+ * Finds a name of the value that corresponds to a given {@code View}
class.
+ *
+ * @param clazz Class instance of the {@code *View} type.
+ * @param old Whether an old or a new value is asked.
*/
- Class<?> configClass() {
- Class<?> polymorphicInstanceConfigType =
config.polymorphicInstanceConfigType();
+ public @Nullable String name(Class<?> clazz, boolean old) {
+ Object specificNode = node(old);
+
+ if (clazz.isInstance(specificNode)) {
+ return name(old);
+ }
+
+ return prev == null ? null : prev.name(clazz, old);
+ }
+
+ private @Nullable String name(boolean old) {
+ return old ? oldName : newName;
+ }
- return polymorphicInstanceConfigType != null ?
polymorphicInstanceConfigType : config.getClass();
+ private @Nullable Object node(boolean old) {
+ return old ? oldNode : newNode;
}
}
diff --git
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotificationContext.java
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotificationContext.java
index c9ed0cb1e5..ae5858d930 100644
---
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotificationContext.java
+++
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotificationContext.java
@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
-import org.apache.ignite.internal.configuration.DynamicConfiguration;
import org.apache.ignite.internal.configuration.tree.InnerNode;
import org.jetbrains.annotations.Nullable;
@@ -56,21 +55,25 @@ class ConfigurationNotificationContext {
/**
* Adds {@link ConfigurationContainer container}.
*
- * @param config Configuration.
- * @param name Key in named list.
+ * @param oldNode Old node value.
+ * @param newNode New node value.
+ * @param oldName Old name of the node, only applicable to named list
elements.
+ * @param newName New name of the node, only applicable to named list
elements.
*/
- void addContainer(DynamicConfiguration<InnerNode, ?> config, @Nullable
String name) {
- tailContainers = new ConfigurationContainer(config, name,
tailContainers);
+ void addContainer(
+ @Nullable InnerNode oldNode,
+ @Nullable InnerNode newNode,
+ @Nullable String oldName,
+ @Nullable String newName
+ ) {
+ tailContainers = new ConfigurationContainer(tailContainers, oldNode,
newNode, oldName, newName);
}
/**
* Removes {@link ConfigurationContainer container}.
- *
- * @param config Configuration.
*/
- void removeContainer(DynamicConfiguration<InnerNode, ?> config) {
+ void removeContainer() {
assert tailContainers != null;
- assert tailContainers.config == config;
tailContainers = tailContainers.prev;
}
diff --git
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotificationEventImpl.java
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotificationEventImpl.java
index 91e8dc99f5..6ebc14e7cb 100644
---
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotificationEventImpl.java
+++
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotificationEventImpl.java
@@ -17,7 +17,6 @@
package org.apache.ignite.internal.configuration.notifications;
-import org.apache.ignite.configuration.ConfigurationProperty;
import
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
import org.jetbrains.annotations.Nullable;
@@ -67,45 +66,35 @@ class ConfigurationNotificationEventImpl<VIEWT> implements
ConfigurationNotifica
return oldValue;
}
+ @Override
+ public <T> @Nullable T oldValue(Class<T> viewClass) {
+ return tail.find(viewClass, true);
+ }
+
/** {@inheritDoc} */
@Override
public @Nullable VIEWT newValue() {
return newValue;
}
- /** {@inheritDoc} */
@Override
- public long storageRevision() {
- return storageRevision;
+ public <T> @Nullable T newValue(Class<T> viewClass) {
+ return tail.find(viewClass, false);
}
/** {@inheritDoc} */
@Override
- public <T extends ConfigurationProperty> @Nullable T config(Class<T>
configClass) {
- ConfigurationContainer container = findContainer(configClass);
-
- return container == null ? null : (T) container.specificConfig();
+ public long storageRevision() {
+ return storageRevision;
}
- /** {@inheritDoc} */
@Override
- public @Nullable String name(Class<? extends ConfigurationProperty>
configClass) {
- ConfigurationContainer container = findContainer(configClass);
-
- return container == null ? null : container.name;
+ public @Nullable String oldName(Class<?> viewClass) {
+ return tail.name(viewClass, true);
}
- private @Nullable ConfigurationContainer findContainer(Class<?>
configClass) {
- ConfigurationContainer curr = tail;
-
- while (curr != null) {
- if (configClass.isAssignableFrom(curr.configClass())) {
- return curr;
- } else {
- curr = curr.prev;
- }
- }
-
- return null;
+ @Override
+ public @Nullable String newName(Class<?> viewClass) {
+ return tail.name(viewClass, false);
}
}
diff --git
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotifier.java
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotifier.java
index 2d255c914e..fe17e37fc0 100644
---
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotifier.java
+++
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/notifications/ConfigurationNotifier.java
@@ -80,19 +80,19 @@ public class ConfigurationNotifier {
return List.of();
}
- ConfigurationNotificationContext notificationCtx = new
ConfigurationNotificationContext(storageRevision, notificationNumber);
+ ConfigurationNotificationContext ctx = new
ConfigurationNotificationContext(storageRevision, notificationNumber);
- notificationCtx.addContainer(config, null);
+ ctx.addContainer(oldInnerNode, newInnerNode, null, null);
if (oldInnerNode == null) {
- notifyListeners(newInnerNode, config, List.of(), notificationCtx);
+ notifyListeners(newInnerNode, config, List.of(), ctx);
} else {
- notifyListeners(oldInnerNode, newInnerNode, config, List.of(),
notificationCtx);
+ notifyListeners(oldInnerNode, newInnerNode, config, List.of(),
ctx);
}
- notificationCtx.removeContainer(config);
+ ctx.removeContainer();
- return notificationCtx.futures;
+ return ctx.futures;
}
private static void notifyListeners(
@@ -152,7 +152,7 @@ public class ConfigurationNotifier {
DynamicConfiguration<InnerNode, ?> newConfig =
dynamicConfig(config, key);
- ctx.addContainer(newConfig, null);
+ ctx.addContainer(oldNode, newNode, null, null);
notifyListeners(
oldNode,
@@ -162,7 +162,7 @@ public class ConfigurationNotifier {
ctx
);
- ctx.removeContainer(newConfig);
+ ctx.removeContainer();
return null;
}
@@ -198,10 +198,10 @@ public class ConfigurationNotifier {
touch(newNodeCfg);
- ctx.addContainer(newNodeCfg, name);
-
InnerNode newVal = newNamedList.getInnerNode(name);
+ ctx.addContainer(null, newVal, null, name);
+
notifyPublicListeners(
extendedListeners(namedDynamicConfig(config,
key), ctx.notificationNum),
concat(viewReadOnly(
@@ -228,19 +228,17 @@ public class ConfigurationNotifier {
ctx
);
- ctx.removeContainer(newNodeCfg);
+ ctx.removeContainer();
}
for (String name : namedListChanges.deleted) {
DynamicConfiguration<InnerNode, ?> delNodeCfg =
(DynamicConfiguration<InnerNode, ?>)
namedListCfgMembers.get(name);
- delNodeCfg.removedFromNamedList();
-
- ctx.addContainer(delNodeCfg, name);
-
InnerNode oldVal = oldNamedList.getInnerNode(name);
+ ctx.addContainer(oldVal, null, name, null);
+
notifyPublicListeners(
extendedListeners(namedDynamicConfig(config,
key), ctx.notificationNum),
concat(viewReadOnly(
@@ -267,18 +265,15 @@ public class ConfigurationNotifier {
ConfigurationListener::onUpdate
);
- ctx.removeContainer(delNodeCfg);
+ ctx.removeContainer();
}
for (Map.Entry<String, String> entry :
namedListChanges.renamed.entrySet()) {
- DynamicConfiguration<InnerNode, ?> renNodeCfg =
- (DynamicConfiguration<InnerNode, ?>)
namedListCfg.members().get(entry.getValue());
-
- ctx.addContainer(renNodeCfg, entry.getValue());
-
InnerNode oldVal =
oldNamedList.getInnerNode(entry.getKey());
InnerNode newVal =
newNamedList.getInnerNode(entry.getValue());
+ ctx.addContainer(oldVal, newVal, entry.getKey(),
entry.getValue());
+
notifyPublicListeners(
extendedListeners(namedDynamicConfig(config,
key), ctx.notificationNum),
concat(viewReadOnly(
@@ -288,10 +283,10 @@ public class ConfigurationNotifier {
oldVal.specificNode(),
newVal.specificNode(),
ctx,
- (listener, event) ->
listener.onRename(entry.getKey(), entry.getValue(), event)
+ (listener, event) -> listener.onRename(event)
);
- ctx.removeContainer(renNodeCfg);
+ ctx.removeContainer();
}
for (String name : namedListChanges.updated) {
@@ -305,7 +300,7 @@ public class ConfigurationNotifier {
DynamicConfiguration<InnerNode, ?> updNodeCfg =
(DynamicConfiguration<InnerNode, ?>)
namedListCfgMembers.get(name);
- ctx.addContainer(updNodeCfg, name);
+ ctx.addContainer(oldVal, newVal, name, name);
notifyPublicListeners(
extendedListeners(namedDynamicConfig(config,
key), ctx.notificationNum),
@@ -334,7 +329,7 @@ public class ConfigurationNotifier {
ctx
);
- ctx.removeContainer(updNodeCfg);
+ ctx.removeContainer();
}
}
@@ -391,7 +386,7 @@ public class ConfigurationNotifier {
public Void visitInnerNode(String key, InnerNode nestedInnerNode) {
DynamicConfiguration<InnerNode, ?> nestedNodeConfig =
dynamicConfig(config, key);
- ctx.addContainer(nestedNodeConfig, null);
+ ctx.addContainer(null, nestedInnerNode, null, null);
notifyListeners(
nestedInnerNode,
@@ -400,7 +395,7 @@ public class ConfigurationNotifier {
ctx
);
- ctx.removeContainer(nestedNodeConfig);
+ ctx.removeContainer();
return null;
}
@@ -434,10 +429,10 @@ public class ConfigurationNotifier {
DynamicConfiguration<InnerNode, ?> namedNodeConfig =
(DynamicConfiguration<InnerNode, ?>)
namedListCfg.getConfig(name);
- ctx.addContainer(namedNodeConfig, name);
-
InnerNode namedInnerNode = newNamedList.getInnerNode(name);
+ ctx.addContainer(null, namedInnerNode, null, name);
+
notifyPublicListeners(
extendedListeners(namedDynamicConfig(config, key),
ctx.notificationNum),
concat(viewReadOnly(
@@ -464,7 +459,7 @@ public class ConfigurationNotifier {
ctx
);
- ctx.removeContainer(namedNodeConfig);
+ ctx.removeContainer();
}
return null;
diff --git
a/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationAnyListenerTest.java
b/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationAnyListenerTest.java
index 259f89ad27..ddcc821e1f 100644
---
a/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationAnyListenerTest.java
+++
b/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationAnyListenerTest.java
@@ -39,6 +39,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
import org.apache.ignite.configuration.ConfigurationListenOnlyException;
import org.apache.ignite.configuration.NamedConfigurationTree;
import org.apache.ignite.configuration.annotation.Config;
@@ -51,6 +52,7 @@ import
org.apache.ignite.configuration.annotation.PolymorphicId;
import org.apache.ignite.configuration.annotation.Value;
import org.apache.ignite.configuration.notifications.ConfigurationListener;
import
org.apache.ignite.configuration.notifications.ConfigurationNamedListListener;
+import
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
import org.apache.ignite.internal.configuration.ConfigurationRegistry;
import
org.apache.ignite.internal.configuration.storage.TestConfigurationStorage;
import org.junit.jupiter.api.AfterEach;
@@ -539,27 +541,22 @@ public class ConfigurationAnyListenerTest {
String key1 = UUID.randomUUID().toString();
rootConfig.elements().any().listen(configListener(ctx -> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ assertNotNull(ctx.newValue(FirstSubView.class));
+ assertEquals(key0, ctx.newName(FirstSubView.class));
}));
rootConfig.elements().change(c -> c.create(key0,
doNothingConsumer())).get(1, SECONDS);
-
rootConfig.elements().any().elements2().listenElements(configNamedListenerOnCreate(ctx
-> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ Consumer<ConfigurationNotificationEvent<SecondSubView>> assertions =
ctx -> {
+ assertNotNull(ctx.newValue(FirstSubView.class));
+ assertEquals(key0, ctx.newName(FirstSubView.class));
- assertNotNull(ctx.config(SecondSubConfiguration.class));
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
- }));
-
-
rootConfig.elements().any().elements2().any().listen(configListener(ctx -> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ assertNotNull(ctx.newValue(SecondSubView.class));
+ assertEquals(key1, ctx.newName(SecondSubView.class));
+ };
- assertNotNull(ctx.config(SecondSubConfiguration.class));
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
- }));
+
rootConfig.elements().any().elements2().listenElements(configNamedListenerOnCreate(assertions));
+
rootConfig.elements().any().elements2().any().listen(configListener(assertions));
rootConfig.elements().get(key0).elements2().change(c -> c.create(key1,
doNothingConsumer())).get(1, SECONDS);
}
@@ -571,29 +568,25 @@ public class ConfigurationAnyListenerTest {
String newKey1 = UUID.randomUUID().toString();
rootConfig.elements().any().listen(configListener(ctx -> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ assertNotNull(ctx.newValue(FirstSubView.class));
+ assertEquals(key0, ctx.newName(FirstSubView.class));
}));
rootConfig.elements()
.change(c -> c.create(key0, c1 -> c1.changeElements2(c2 ->
c2.create(oldKey1, doNothingConsumer()))))
.get(1, SECONDS);
-
rootConfig.elements().get(key0).elements2().listenElements(configNamedListenerOnRename(ctx
-> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ Consumer<ConfigurationNotificationEvent<SecondSubView>> assertions =
ctx -> {
+ assertNotNull(ctx.newValue(FirstSubView.class));
+ assertEquals(key0, ctx.newName(FirstSubView.class));
- assertNotNull(ctx.config(SecondSubConfiguration.class));
- assertEquals(newKey1, ctx.name(SecondSubConfiguration.class));
- }));
+ assertNotNull(ctx.newValue(SecondSubView.class));
+ assertEquals(oldKey1, ctx.oldName(SecondSubView.class));
+ assertEquals(newKey1, ctx.newName(SecondSubView.class));
+ };
-
rootConfig.elements().any().elements2().listenElements(configNamedListenerOnRename(ctx
-> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
-
- assertNotNull(ctx.config(SecondSubConfiguration.class));
- assertEquals(newKey1, ctx.name(SecondSubConfiguration.class));
- }));
+
rootConfig.elements().get(key0).elements2().listenElements(configNamedListenerOnRename(assertions));
+
rootConfig.elements().any().elements2().listenElements(configNamedListenerOnRename(assertions));
rootConfig.elements().get(key0).elements2().change(c ->
c.rename(oldKey1, newKey1)).get(1, SECONDS);
}
@@ -604,45 +597,28 @@ public class ConfigurationAnyListenerTest {
String key1 = UUID.randomUUID().toString();
rootConfig.elements().any().listen(configListener(ctx -> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ assertNotNull(ctx.newValue(FirstSubView.class));
+ assertEquals(key0, ctx.newName(FirstSubView.class));
}));
rootConfig.elements()
.change(c -> c.create(key0, c1 -> c1.changeElements2(c2 ->
c2.create(key1, doNothingConsumer()))))
.get(1, SECONDS);
-
rootConfig.elements().any().elements2().listenElements(configNamedListenerOnDelete(ctx
-> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
-
- assertNull(ctx.config(SecondSubConfiguration.class));
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
- }));
-
-
rootConfig.elements().get(key0).elements2().listenElements(configNamedListenerOnDelete(ctx
-> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ Consumer<ConfigurationNotificationEvent<SecondSubView>> assertions =
ctx -> {
+ assertNotNull(ctx.newValue(FirstSubView.class));
+ assertEquals(key0, ctx.newName(FirstSubView.class));
- assertNull(ctx.config(SecondSubConfiguration.class));
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
- }));
+ assertNotNull(ctx.oldValue(SecondSubView.class));
+ assertNull(ctx.newValue(SecondSubView.class));
+ assertEquals(key1, ctx.oldName(SecondSubView.class));
+ assertNull(ctx.newName(SecondSubView.class));
+ };
-
rootConfig.elements().any().elements2().any().listen(configListener(ctx -> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
-
- assertNull(ctx.config(SecondSubConfiguration.class));
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
- }));
-
-
rootConfig.elements().get(key0).elements2().any().listen(configListener(ctx -> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
-
- assertNull(ctx.config(SecondSubConfiguration.class));
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
- }));
+
rootConfig.elements().any().elements2().listenElements(configNamedListenerOnDelete(assertions));
+
rootConfig.elements().get(key0).elements2().listenElements(configNamedListenerOnDelete(assertions));
+
rootConfig.elements().any().elements2().any().listen(configListener(assertions));
+
rootConfig.elements().get(key0).elements2().any().listen(configListener(assertions));
rootConfig.elements().get(key0).elements2().change(c ->
c.delete(key1)).get(1, SECONDS);
}
@@ -657,41 +633,21 @@ public class ConfigurationAnyListenerTest {
.change(c -> c.create(key0, c1 -> c1.changeElements2(c2 ->
c2.create(key1, doNothingConsumer()))))
.get(1, SECONDS);
-
rootConfig.elements().any().elements2().listenElements(configNamedListenerOnUpdate(ctx
-> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ Consumer<ConfigurationNotificationEvent<SecondSubView>> assertions =
ctx -> {
+ assertNotNull(ctx.newValue(FirstSubView.class));
+ assertEquals(key0, ctx.newName(FirstSubView.class));
- SecondSubConfiguration second =
ctx.config(SecondSubConfiguration.class);
+ SecondSubView second = ctx.newValue(SecondSubView.class);
assertNotNull(second);
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
-
- assertEquals(newVal, second.intVal().value());
- }));
-
-
rootConfig.elements().any().elements2().any().listen(configListener(ctx -> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
+ assertEquals(key1, ctx.newName(SecondSubView.class));
- SecondSubConfiguration second =
ctx.config(SecondSubConfiguration.class);
+ assertEquals(newVal, second.intVal());
+ };
- assertNotNull(second);
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
-
- assertEquals(newVal, second.intVal().value());
- }));
-
-
rootConfig.elements().get(key0).elements2().any().listen(configListener(ctx -> {
- assertNotNull(ctx.config(FirstSubConfiguration.class));
- assertEquals(key0, ctx.name(FirstSubConfiguration.class));
-
- SecondSubConfiguration second =
ctx.config(SecondSubConfiguration.class);
-
- assertNotNull(second);
- assertEquals(key1, ctx.name(SecondSubConfiguration.class));
-
- assertEquals(newVal, second.intVal().value());
- }));
+
rootConfig.elements().any().elements2().listenElements(configNamedListenerOnUpdate(assertions));
+
rootConfig.elements().any().elements2().any().listen(configListener(assertions));
+
rootConfig.elements().get(key0).elements2().any().listen(configListener(assertions));
rootConfig.elements().get(key0).elements2().get(key1).intVal().update(newVal).get(1,
SECONDS);
}
@@ -708,15 +664,15 @@ public class ConfigurationAnyListenerTest {
assertNull(ctx.oldValue());
- assertEquals("0", ctx.name(PolyAnyConfiguration.class));
- assertEquals("0", ctx.name(FirstPolyAnyConfiguration.class));
+ assertEquals("0", ctx.newName(PolyAnyView.class));
+ assertEquals("0", ctx.newName(FirstPolyAnyView.class));
- assertNull(ctx.name(SecondPolyAnyConfiguration.class));
+ assertNull(ctx.newName(SecondPolyAnyView.class));
- assertInstanceOf(PolyAnyConfiguration.class,
ctx.config(PolyAnyConfiguration.class));
- assertInstanceOf(FirstPolyAnyConfiguration.class,
ctx.config(FirstPolyAnyConfiguration.class));
+ assertInstanceOf(PolyAnyView.class,
ctx.newValue(PolyAnyView.class));
+ assertInstanceOf(FirstPolyAnyView.class,
ctx.newValue(FirstPolyAnyView.class));
- assertNull(ctx.config(SecondPolyAnyConfiguration.class));
+ assertNull(ctx.newValue(SecondPolyAnyView.class));
}));
rootConfig.polyNamed()
@@ -743,15 +699,15 @@ public class ConfigurationAnyListenerTest {
assertInstanceOf(FirstPolyAnyView.class, ctx.oldValue());
assertInstanceOf(PolyAnyView.class, ctx.oldValue());
- assertEquals("0", ctx.name(PolyAnyConfiguration.class));
- assertEquals("0", ctx.name(SecondPolyAnyConfiguration.class));
+ assertEquals("0", ctx.newName(PolyAnyView.class));
+ assertEquals("0", ctx.newName(SecondPolyAnyView.class));
- assertNull(ctx.name(FirstPolyAnyConfiguration.class));
+ assertNull(ctx.newName(FirstPolyAnyView.class));
- assertInstanceOf(PolyAnyConfiguration.class,
ctx.config(PolyAnyConfiguration.class));
- assertInstanceOf(SecondPolyAnyConfiguration.class,
ctx.config(SecondPolyAnyConfiguration.class));
+ assertInstanceOf(PolyAnyView.class,
ctx.newValue(PolyAnyView.class));
+ assertInstanceOf(SecondPolyAnyView.class,
ctx.newValue(SecondPolyAnyView.class));
- assertNull(ctx.config(FirstPolyAnyConfiguration.class));
+ assertNull(ctx.newValue(FirstPolyAnyView.class));
}));
rootConfig.polyNamed()
diff --git
a/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationListenerTest.java
b/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationListenerTest.java
index 6101732fad..f331b925da 100644
---
a/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationListenerTest.java
+++
b/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationListenerTest.java
@@ -56,6 +56,7 @@ import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
import org.apache.ignite.configuration.annotation.Config;
import org.apache.ignite.configuration.annotation.ConfigValue;
import org.apache.ignite.configuration.annotation.ConfigurationRoot;
@@ -284,8 +285,6 @@ public class ConfigurationListenerTest {
/** {@inheritDoc} */
@Override
public CompletableFuture<?> onRename(
- String oldName,
- String newName,
ConfigurationNotificationEvent<ChildView> ctx
) {
log.add("rename");
@@ -381,8 +380,6 @@ public class ConfigurationListenerTest {
/** {@inheritDoc} */
@Override
public CompletableFuture<?> onRename(
- String oldName,
- String newName,
ConfigurationNotificationEvent<ChildView> ctx
) {
log.add("rename");
@@ -469,12 +466,10 @@ public class ConfigurationListenerTest {
/** {@inheritDoc} */
@Override
public CompletableFuture<?> onRename(
- String oldName,
- String newName,
ConfigurationNotificationEvent<ChildView> ctx
) {
- assertEquals("name", oldName);
- assertEquals("newName", newName);
+ assertEquals("name", ctx.oldName(ChildView.class));
+ assertEquals("newName", ctx.newName(ChildView.class));
ChildView oldValue = ctx.oldValue();
@@ -570,12 +565,10 @@ public class ConfigurationListenerTest {
/** {@inheritDoc} */
@Override
public CompletableFuture<?> onRename(
- String oldName,
- String newName,
ConfigurationNotificationEvent<ChildView> ctx
) {
- assertEquals("name", oldName);
- assertEquals("newName", newName);
+ assertEquals("name", ctx.oldName(ChildView.class));
+ assertEquals("newName", ctx.newName(ChildView.class));
ChildView oldValue = ctx.oldValue();
@@ -668,8 +661,6 @@ public class ConfigurationListenerTest {
/** {@inheritDoc} */
@Override
public CompletableFuture<?> onRename(
- String oldName,
- String newName,
ConfigurationNotificationEvent<ChildView> ctx
) {
log.add("rename");
@@ -739,7 +730,7 @@ public class ConfigurationListenerTest {
return completedFuture(null);
});
- final Future<Void> fut = config.change(parent ->
parent.changeChildren(elements ->
+ Future<Void> fut = config.change(parent ->
parent.changeChildren(elements ->
elements.delete("name"))
);
@@ -762,7 +753,7 @@ public class ConfigurationListenerTest {
ConfigurationListener<ParentView> listener1 = configListener(ctx ->
events.add("1"));
ConfigurationNamedListListener<ChildView> listener2 =
configNamedListenerOnUpdate(ctx -> events.add("2"));
- final ConfigurationNamedListListener<ChildView> listener3 =
configNamedListenerOnUpdate(ctx -> events.add("3"));
+ ConfigurationNamedListListener<ChildView> listener3 =
configNamedListenerOnUpdate(ctx -> events.add("3"));
config.listen(listener0);
config.listen(listener1);
@@ -805,34 +796,34 @@ public class ConfigurationListenerTest {
String newVal = randomUuid();
config.listen(configListener(ctx -> {
- ParentConfiguration parent = ctx.config(ParentConfiguration.class);
+ ParentView parent = ctx.newValue(ParentView.class);
assertNotNull(parent);
- assertNull(ctx.name(ParentConfiguration.class));
+ assertNull(ctx.newName(ParentView.class));
- assertEquals(newVal, parent.child().str().value());
+ assertEquals(newVal, parent.child().str());
}));
config.child().listen(configListener(ctx -> {
- assertNotNull(ctx.config(ParentConfiguration.class));
+ assertNotNull(ctx.newValue(ParentView.class));
- ChildConfiguration child = ctx.config(ChildConfiguration.class);
+ ChildView child = ctx.newValue(ChildView.class);
assertNotNull(child);
- assertNull(ctx.name(ChildConfiguration.class));
+ assertNull(ctx.newName(ChildView.class));
- assertEquals(newVal, child.str().value());
+ assertEquals(newVal, child.str());
}));
config.child().str().listen(configListener(ctx -> {
- assertNotNull(ctx.config(ParentConfiguration.class));
+ assertNotNull(ctx.newValue(ParentView.class));
- ChildConfiguration child = ctx.config(ChildConfiguration.class);
+ ChildView child = ctx.newValue(ChildView.class);
assertNotNull(child);
- assertNull(ctx.name(ChildConfiguration.class));
+ assertNull(ctx.newName(ChildView.class));
- assertEquals(newVal, child.str().value());
+ assertEquals(newVal, child.str());
}));
config.change(c0 -> c0.changeChild(c1 -> c1.changeStr(newVal))).get(1,
SECONDS);
@@ -844,27 +835,27 @@ public class ConfigurationListenerTest {
String key = randomUuid();
config.children().listen(configListener(ctx -> {
- ParentConfiguration parent = ctx.config(ParentConfiguration.class);
+ ParentView parent = ctx.newValue(ParentView.class);
assertNotNull(parent);
- assertNull(ctx.name(ParentConfiguration.class));
+ assertNull(ctx.newName(ParentView.class));
- assertNull(ctx.config(ChildConfiguration.class));
- assertNull(ctx.name(ChildConfiguration.class));
+ assertNull(ctx.newValue(ChildView.class));
+ assertNull(ctx.newName(ChildView.class));
- assertEquals(newVal, parent.children().get(key).str().value());
+ assertEquals(newVal, parent.children().get(key).str());
}));
config.children().listenElements(configNamedListenerOnCreate(ctx -> {
- assertNotNull(ctx.config(ParentConfiguration.class));
- assertNull(ctx.name(ParentConfiguration.class));
+ assertNotNull(ctx.newValue(ParentView.class));
+ assertNull(ctx.newName(ParentView.class));
- ChildConfiguration child = ctx.config(ChildConfiguration.class);
+ ChildView child = ctx.newValue(ChildView.class);
assertNotNull(child);
- assertEquals(key, ctx.name(ChildConfiguration.class));
+ assertEquals(key, ctx.newName(ChildView.class));
- assertEquals(newVal, child.str().value());
+ assertEquals(newVal, child.str());
}));
config.children().change(c -> c.create(key, c1 ->
c1.changeStr(newVal))).get(1, SECONDS);
@@ -879,28 +870,28 @@ public class ConfigurationListenerTest {
config.children().change(c -> c.create(oldKey,
doNothingConsumer())).get(1, SECONDS);
config.children().listen(configListener(ctx -> {
- ParentConfiguration parent = ctx.config(ParentConfiguration.class);
+ ParentView parent = ctx.newValue(ParentView.class);
assertNotNull(parent);
- assertNull(ctx.name(ParentConfiguration.class));
+ assertNull(ctx.newName(ParentView.class));
- assertNull(ctx.config(ChildConfiguration.class));
- assertNull(ctx.name(ChildConfiguration.class));
+ assertNull(ctx.newValue(ChildView.class));
+ assertNull(ctx.newName(ChildView.class));
assertNull(parent.children().get(oldKey));
- assertEquals(val, parent.children().get(newKey).str().value());
+ assertEquals(val, parent.children().get(newKey).str());
}));
config.children().listenElements(configNamedListenerOnRename(ctx -> {
- assertNotNull(ctx.config(ParentConfiguration.class));
- assertNull(ctx.name(ParentConfiguration.class));
+ assertNotNull(ctx.newValue(ParentView.class));
+ assertNull(ctx.newName(ParentView.class));
- ChildConfiguration child = ctx.config(ChildConfiguration.class);
+ ChildView child = ctx.newValue(ChildView.class);
assertNotNull(child);
- assertEquals(newKey, ctx.name(ChildConfiguration.class));
+ assertEquals(newKey, ctx.newName(ChildView.class));
- assertEquals(val, child.str().value());
+ assertEquals(val, child.str());
}));
config.children().change(c -> c.rename(oldKey, newKey));
@@ -913,32 +904,33 @@ public class ConfigurationListenerTest {
config.children().change(c -> c.create(key,
doNothingConsumer())).get(1, SECONDS);
config.children().listen(configListener(ctx -> {
- ParentConfiguration parent = ctx.config(ParentConfiguration.class);
+ ParentView parent = ctx.newValue(ParentView.class);
assertNotNull(parent);
- assertNull(ctx.name(ParentConfiguration.class));
+ assertNull(ctx.newName(ParentView.class));
- assertNull(ctx.config(ChildConfiguration.class));
- assertNull(ctx.name(ChildConfiguration.class));
+ assertNull(ctx.oldValue(ChildView.class));
+ assertNull(ctx.oldName(ChildView.class));
+
+ assertNull(ctx.newValue(ChildView.class));
+ assertNull(ctx.newName(ChildView.class));
assertNull(parent.children().get(key));
}));
- config.children().listenElements(configNamedListenerOnDelete(ctx -> {
- assertNotNull(ctx.config(ParentConfiguration.class));
- assertNull(ctx.name(ParentConfiguration.class));
+ Consumer<ConfigurationNotificationEvent<ChildView>> assertions = ctx
-> {
+ assertNotNull(ctx.newValue(ParentView.class));
+ assertNull(ctx.newName(ParentView.class));
- assertNull(ctx.config(ChildConfiguration.class));
- assertEquals(key, ctx.name(ChildConfiguration.class));
- }));
+ assertNotNull(ctx.oldValue(ChildView.class));
+ assertEquals(key, ctx.oldName(ChildView.class));
- config.children().get(key).listen(configListener(ctx -> {
- assertNotNull(ctx.config(ParentConfiguration.class));
- assertNull(ctx.name(ParentConfiguration.class));
+ assertNull(ctx.newValue(ChildView.class));
+ assertNull(ctx.newName(ChildView.class));
+ };
- assertNull(ctx.config(ChildConfiguration.class));
- assertEquals(key, ctx.name(ChildConfiguration.class));
- }));
+
config.children().listenElements(configNamedListenerOnDelete(assertions));
+ config.children().get(key).listen(configListener(assertions));
config.children().change(c -> c.delete(key)).get(1, SECONDS);
}
@@ -951,40 +943,34 @@ public class ConfigurationListenerTest {
config.children().change(c -> c.create(key,
doNothingConsumer())).get(1, SECONDS);
config.children().listen(configListener(ctx -> {
- ParentConfiguration parent = ctx.config(ParentConfiguration.class);
+ ParentView parent = ctx.newValue(ParentView.class);
assertNotNull(parent);
- assertNull(ctx.name(ParentConfiguration.class));
-
- assertNull(ctx.config(ChildConfiguration.class));
- assertNull(ctx.name(ChildConfiguration.class));
-
- assertEquals(newVal, parent.children().get(key).str().value());
- }));
+ assertNull(ctx.newName(ParentView.class));
- config.children().listenElements(configNamedListenerOnUpdate(ctx -> {
- assertNotNull(ctx.config(ParentConfiguration.class));
- assertNull(ctx.name(ParentConfiguration.class));
+ assertNull(ctx.oldValue(ChildView.class));
+ assertNull(ctx.oldName(ChildView.class));
- ChildConfiguration child = ctx.config(ChildConfiguration.class);
+ assertNull(ctx.newValue(ChildView.class));
+ assertNull(ctx.newName(ChildView.class));
- assertNotNull(child);
- assertEquals(key, ctx.name(ChildConfiguration.class));
-
- assertEquals(newVal, child.str().value());
+ assertEquals(newVal, parent.children().get(key).str());
}));
- config.children().get(key).listen(configListener(ctx -> {
- assertNotNull(ctx.config(ParentConfiguration.class));
- assertNull(ctx.name(ParentConfiguration.class));
+ Consumer<ConfigurationNotificationEvent<ChildView>> assertions = ctx
-> {
+ assertNotNull(ctx.newValue(ParentView.class));
+ assertNull(ctx.newName(ParentView.class));
- ChildConfiguration child = ctx.config(ChildConfiguration.class);
+ ChildView child = ctx.newValue(ChildView.class);
assertNotNull(child);
- assertEquals(key, ctx.name(ChildConfiguration.class));
+ assertEquals(key, ctx.newName(ChildView.class));
- assertEquals(newVal, child.str().value());
- }));
+ assertEquals(newVal, child.str());
+ };
+
+
config.children().listenElements(configNamedListenerOnUpdate(assertions));
+ config.children().get(key).listen(configListener(assertions));
config.children().get(key).str().update(newVal).get(1, SECONDS);
}
@@ -995,7 +981,7 @@ public class ConfigurationListenerTest {
config.polyChild().commonIntVal().listen(event -> {
intHolder.set(event.newValue());
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
});
config.polyChild().commonIntVal().update(42).get(1, SECONDS);
@@ -1006,13 +992,13 @@ public class ConfigurationListenerTest {
@Test
void testNotificationEventConfigForNestedConfiguration() throws Exception {
config.child().listen(ctx -> {
- assertInstanceOf(ChildConfiguration.class,
ctx.config(ChildConfiguration.class));
- assertInstanceOf(InternalChildConfiguration.class,
ctx.config(InternalChildConfiguration.class));
+ assertInstanceOf(ChildView.class, ctx.newValue(ChildView.class));
+ assertInstanceOf(InternalChildView.class,
ctx.newValue(InternalChildView.class));
- assertNull(ctx.name(ChildConfiguration.class));
- assertNull(ctx.name(InternalChildConfiguration.class));
+ assertNull(ctx.newName(ChildView.class));
+ assertNull(ctx.newName(InternalChildView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
});
config.child().str().update(randomUuid()).get(1, SECONDS);
@@ -1024,49 +1010,52 @@ public class ConfigurationListenerTest {
/** {@inheritDoc} */
@Override
public CompletableFuture<?>
onCreate(ConfigurationNotificationEvent<ChildView> ctx) {
- assertInstanceOf(ChildConfiguration.class,
ctx.config(ChildConfiguration.class));
- assertInstanceOf(InternalChildConfiguration.class,
ctx.config(InternalChildConfiguration.class));
+ assertInstanceOf(ChildView.class,
ctx.newValue(ChildView.class));
+ assertInstanceOf(InternalChildView.class,
ctx.newValue(InternalChildView.class));
- assertEquals("0", ctx.name(ChildConfiguration.class));
- assertEquals("0", ctx.name(InternalChildConfiguration.class));
+ assertEquals("0", ctx.newName(ChildView.class));
+ assertEquals("0", ctx.newName(InternalChildView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
}
/** {@inheritDoc} */
@Override
- public CompletableFuture<?> onRename(String oldName, String
newName, ConfigurationNotificationEvent<ChildView> ctx) {
- assertInstanceOf(ChildConfiguration.class,
ctx.config(ChildConfiguration.class));
- assertInstanceOf(InternalChildConfiguration.class,
ctx.config(InternalChildConfiguration.class));
+ public CompletableFuture<?>
onRename(ConfigurationNotificationEvent<ChildView> ctx) {
+ assertInstanceOf(ChildView.class,
ctx.newValue(ChildView.class));
+ assertInstanceOf(InternalChildView.class,
ctx.newValue(InternalChildView.class));
- assertEquals("1", ctx.name(ChildConfiguration.class));
- assertEquals("1", ctx.name(InternalChildConfiguration.class));
+ assertEquals("1", ctx.newName(ChildView.class));
+ assertEquals("1", ctx.newName(InternalChildView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
}
/** {@inheritDoc} */
@Override
public CompletableFuture<?>
onDelete(ConfigurationNotificationEvent<ChildView> ctx) {
- assertNull(ctx.config(ChildConfiguration.class));
- assertNull(ctx.config(InternalChildConfiguration.class));
+ assertNull(ctx.newValue(ChildView.class));
+ assertNull(ctx.newValue(InternalChildView.class));
+
+ assertEquals("1", ctx.oldName(ChildView.class));
+ assertEquals("1", ctx.oldName(InternalChildView.class));
- assertEquals("1", ctx.name(ChildConfiguration.class));
- assertEquals("1", ctx.name(InternalChildConfiguration.class));
+ assertNull(ctx.newName(ChildView.class));
+ assertNull(ctx.newName(InternalChildView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
}
/** {@inheritDoc} */
@Override
public CompletableFuture<?>
onUpdate(ConfigurationNotificationEvent<ChildView> ctx) {
- assertInstanceOf(ChildConfiguration.class,
ctx.config(ChildConfiguration.class));
- assertInstanceOf(InternalChildConfiguration.class,
ctx.config(InternalChildConfiguration.class));
+ assertInstanceOf(ChildView.class,
ctx.newValue(ChildView.class));
+ assertInstanceOf(InternalChildView.class,
ctx.newValue(InternalChildView.class));
- assertEquals("1", ctx.name(ChildConfiguration.class));
- assertEquals("1", ctx.name(InternalChildConfiguration.class));
+ assertEquals("1", ctx.newName(ChildView.class));
+ assertEquals("1", ctx.newName(InternalChildView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
}
});
@@ -1079,16 +1068,16 @@ public class ConfigurationListenerTest {
@Test
void testNotificationEventConfigForNestedPolymorphicConfiguration() throws
Exception {
config.polyChild().listen(ctx -> {
- assertInstanceOf(PolyConfiguration.class,
ctx.config(PolyConfiguration.class));
- assertInstanceOf(StringPolyConfiguration.class,
ctx.config(StringPolyConfiguration.class));
+ assertInstanceOf(PolyView.class, ctx.newValue(PolyView.class));
+ assertInstanceOf(StringPolyView.class,
ctx.newValue(StringPolyView.class));
- assertNull(ctx.config(LongPolyConfiguration.class));
+ assertNull(ctx.newValue(LongPolyView.class));
- assertNull(ctx.name(PolyConfiguration.class));
- assertNull(ctx.name(StringPolyConfiguration.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
+ assertNull(ctx.newName(PolyView.class));
+ assertNull(ctx.newName(StringPolyView.class));
+ assertNull(ctx.newName(LongPolyView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
});
config.polyChild().commonIntVal().update(22).get(1, SECONDS);
@@ -1100,64 +1089,67 @@ public class ConfigurationListenerTest {
/** {@inheritDoc} */
@Override
public CompletableFuture<?>
onCreate(ConfigurationNotificationEvent<PolyView> ctx) {
- assertInstanceOf(PolyConfiguration.class,
ctx.config(PolyConfiguration.class));
- assertInstanceOf(StringPolyConfiguration.class,
ctx.config(StringPolyConfiguration.class));
+ assertInstanceOf(PolyView.class, ctx.newValue(PolyView.class));
+ assertInstanceOf(StringPolyView.class,
ctx.newValue(StringPolyView.class));
- assertNull(ctx.config(LongPolyConfiguration.class));
+ assertNull(ctx.newValue(LongPolyView.class));
- assertEquals("0", ctx.name(PolyConfiguration.class));
- assertEquals("0", ctx.name(StringPolyConfiguration.class));
+ assertEquals("0", ctx.newName(PolyView.class));
+ assertEquals("0", ctx.newName(StringPolyView.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
+ assertNull(ctx.newName(LongPolyView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
}
/** {@inheritDoc} */
@Override
- public CompletableFuture<?> onRename(String oldName, String
newName, ConfigurationNotificationEvent<PolyView> ctx) {
- assertInstanceOf(PolyConfiguration.class,
ctx.config(PolyConfiguration.class));
- assertInstanceOf(StringPolyConfiguration.class,
ctx.config(StringPolyConfiguration.class));
+ public CompletableFuture<?>
onRename(ConfigurationNotificationEvent<PolyView> ctx) {
+ assertInstanceOf(PolyView.class, ctx.newValue(PolyView.class));
+ assertInstanceOf(StringPolyView.class,
ctx.newValue(StringPolyView.class));
- assertNull(ctx.config(LongPolyConfiguration.class));
+ assertNull(ctx.newValue(LongPolyView.class));
- assertEquals("1", ctx.name(PolyConfiguration.class));
- assertEquals("1", ctx.name(StringPolyConfiguration.class));
+ assertEquals("1", ctx.newName(PolyView.class));
+ assertEquals("1", ctx.newName(StringPolyView.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
+ assertNull(ctx.newName(LongPolyView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
}
/** {@inheritDoc} */
@Override
public CompletableFuture<?>
onDelete(ConfigurationNotificationEvent<PolyView> ctx) {
- assertNull(ctx.config(PolyConfiguration.class));
- assertNull(ctx.config(StringPolyConfiguration.class));
- assertNull(ctx.config(LongPolyConfiguration.class));
+ assertNull(ctx.newValue(PolyView.class));
+ assertNull(ctx.newValue(StringPolyView.class));
+ assertNull(ctx.newValue(LongPolyView.class));
+
+ assertNull(ctx.newName(PolyView.class));
+ assertNull(ctx.newName(StringPolyView.class));
- assertEquals("1", ctx.name(PolyConfiguration.class));
- assertEquals("1", ctx.name(StringPolyConfiguration.class));
+ assertEquals("1", ctx.oldName(PolyView.class));
+ assertEquals("1", ctx.oldName(StringPolyView.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
+ assertNull(ctx.newName(LongPolyView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
}
/** {@inheritDoc} */
@Override
public CompletableFuture<?>
onUpdate(ConfigurationNotificationEvent<PolyView> ctx) {
- assertInstanceOf(PolyConfiguration.class,
ctx.config(PolyConfiguration.class));
- assertInstanceOf(StringPolyConfiguration.class,
ctx.config(StringPolyConfiguration.class));
+ assertInstanceOf(PolyView.class, ctx.newValue(PolyView.class));
+ assertInstanceOf(StringPolyView.class,
ctx.newValue(StringPolyView.class));
- assertNull(ctx.config(LongPolyConfiguration.class));
+ assertNull(ctx.newValue(LongPolyView.class));
- assertEquals("1", ctx.name(PolyConfiguration.class));
- assertEquals("1", ctx.name(StringPolyConfiguration.class));
+ assertEquals("1", ctx.newName(PolyView.class));
+ assertEquals("1", ctx.newName(StringPolyView.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
+ assertNull(ctx.newName(LongPolyView.class));
- return CompletableFuture.completedFuture(null);
+ return completedFuture(null);
}
});
@@ -1180,14 +1172,14 @@ public class ConfigurationListenerTest {
assertInstanceOf(PolyView.class, ctx.oldValue());
assertInstanceOf(StringPolyView.class, ctx.oldValue());
- assertInstanceOf(PolyConfiguration.class,
ctx.config(PolyConfiguration.class));
- assertInstanceOf(LongPolyConfiguration.class,
ctx.config(LongPolyConfiguration.class));
+ assertInstanceOf(PolyView.class, ctx.newValue(PolyView.class));
+ assertInstanceOf(LongPolyView.class,
ctx.newValue(LongPolyView.class));
- assertNull(ctx.config(StringPolyConfiguration.class));
+ assertNull(ctx.newValue(StringPolyView.class));
- assertNull(ctx.name(PolyConfiguration.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
- assertNull(ctx.name(StringPolyConfiguration.class));
+ assertNull(ctx.newName(PolyView.class));
+ assertNull(ctx.newName(LongPolyView.class));
+ assertNull(ctx.newName(StringPolyView.class));
}));
config.polyChild()
@@ -1209,15 +1201,15 @@ public class ConfigurationListenerTest {
assertNull(ctx.oldValue());
- assertInstanceOf(PolyConfiguration.class,
ctx.config(PolyConfiguration.class));
- assertInstanceOf(StringPolyConfiguration.class,
ctx.config(StringPolyConfiguration.class));
+ assertInstanceOf(PolyView.class, ctx.newValue(PolyView.class));
+ assertInstanceOf(StringPolyView.class,
ctx.newValue(StringPolyView.class));
- assertNull(ctx.config(LongPolyConfiguration.class));
+ assertNull(ctx.newValue(LongPolyView.class));
- assertEquals("0", ctx.name(PolyConfiguration.class));
- assertEquals("0", ctx.name(StringPolyConfiguration.class));
+ assertEquals("0", ctx.newName(PolyView.class));
+ assertEquals("0", ctx.newName(StringPolyView.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
+ assertNull(ctx.newName(LongPolyView.class));
}));
config.polyChildren()
@@ -1244,15 +1236,15 @@ public class ConfigurationListenerTest {
assertInstanceOf(PolyView.class, ctx.oldValue());
assertInstanceOf(StringPolyView.class, ctx.oldValue());
- assertInstanceOf(PolyConfiguration.class,
ctx.config(PolyConfiguration.class));
- assertInstanceOf(LongPolyConfiguration.class,
ctx.config(LongPolyConfiguration.class));
+ assertInstanceOf(PolyView.class, ctx.newValue(PolyView.class));
+ assertInstanceOf(LongPolyView.class,
ctx.newValue(LongPolyView.class));
- assertNull(ctx.config(StringPolyConfiguration.class));
+ assertNull(ctx.newValue(StringPolyView.class));
- assertEquals("0", ctx.name(PolyConfiguration.class));
- assertEquals("0", ctx.name(LongPolyConfiguration.class));
+ assertEquals("0", ctx.newName(PolyView.class));
+ assertEquals("0", ctx.newName(LongPolyView.class));
- assertNull(ctx.name(StringPolyConfiguration.class));
+ assertNull(ctx.newName(StringPolyView.class));
}));
config.polyChildren()
@@ -1279,15 +1271,15 @@ public class ConfigurationListenerTest {
assertInstanceOf(PolyView.class, ctx.oldValue());
assertInstanceOf(StringPolyView.class, ctx.oldValue());
- assertInstanceOf(PolyConfiguration.class,
ctx.config(PolyConfiguration.class));
- assertInstanceOf(StringPolyConfiguration.class,
ctx.config(StringPolyConfiguration.class));
+ assertInstanceOf(PolyView.class, ctx.newValue(PolyView.class));
+ assertInstanceOf(StringPolyView.class,
ctx.newValue(StringPolyView.class));
- assertNull(ctx.config(LongPolyConfiguration.class));
+ assertNull(ctx.newValue(LongPolyView.class));
- assertEquals("1", ctx.name(PolyConfiguration.class));
- assertEquals("1", ctx.name(StringPolyConfiguration.class));
+ assertEquals("1", ctx.newName(PolyView.class));
+ assertEquals("1", ctx.newName(StringPolyView.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
+ assertNull(ctx.newName(LongPolyView.class));
}));
config.polyChildren()
@@ -1313,14 +1305,17 @@ public class ConfigurationListenerTest {
assertInstanceOf(PolyView.class, ctx.oldValue());
assertInstanceOf(StringPolyView.class, ctx.oldValue());
- assertNull(ctx.config(PolyConfiguration.class));
- assertNull(ctx.config(StringPolyConfiguration.class));
- assertNull(ctx.config(LongPolyConfiguration.class));
+ assertNull(ctx.newValue(PolyView.class));
+ assertNull(ctx.newValue(StringPolyView.class));
+ assertNull(ctx.newValue(LongPolyView.class));
+
+ assertNull(ctx.newName(PolyView.class));
+ assertNull(ctx.newName(StringPolyView.class));
- assertEquals("0", ctx.name(PolyConfiguration.class));
- assertEquals("0", ctx.name(StringPolyConfiguration.class));
+ assertEquals("0", ctx.oldName(PolyView.class));
+ assertEquals("0", ctx.oldName(StringPolyView.class));
- assertNull(ctx.name(LongPolyConfiguration.class));
+ assertNull(ctx.newName(LongPolyView.class));
}));
config.polyChildren()
@@ -1348,13 +1343,13 @@ public class ConfigurationListenerTest {
assertInstanceOf(ChildView.class, event.oldValue());
assertInstanceOf(InternalChildView.class, event.oldValue());
- assertInstanceOf(ChildConfiguration.class,
event.config(ChildConfiguration.class));
- assertInstanceOf(InternalChildConfiguration.class,
event.config(InternalChildConfiguration.class));
+ assertInstanceOf(ChildView.class, event.newValue(ChildView.class));
+ assertInstanceOf(InternalChildView.class,
event.newValue(InternalChildView.class));
- assertInstanceOf(ParentConfiguration.class,
event.config(ParentConfiguration.class));
+ assertInstanceOf(ParentView.class, event.newValue(ParentView.class));
- assertNull(event.name(ChildConfiguration.class));
- assertNull(event.name(InternalChildConfiguration.class));
+ assertNull(event.newName(ChildView.class));
+ assertNull(event.newName(InternalChildView.class));
}
@Test
@@ -1374,13 +1369,13 @@ public class ConfigurationListenerTest {
assertNull(event.oldValue());
- assertInstanceOf(ChildConfiguration.class,
event.config(ChildConfiguration.class));
- assertInstanceOf(InternalChildConfiguration.class,
event.config(InternalChildConfiguration.class));
+ assertInstanceOf(ChildView.class, event.newValue(ChildView.class));
+ assertInstanceOf(InternalChildView.class,
event.newValue(InternalChildView.class));
- assertInstanceOf(ParentConfiguration.class,
event.config(ParentConfiguration.class));
+ assertInstanceOf(ParentView.class, event.newValue(ParentView.class));
- assertEquals("0", event.name(ChildConfiguration.class));
- assertEquals("0", event.name(InternalChildConfiguration.class));
+ assertEquals("0", event.newName(ChildView.class));
+ assertEquals("0", event.newName(InternalChildView.class));
}
@Test
diff --git
a/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationListenerTestUtils.java
b/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationListenerTestUtils.java
index da96c0c6fe..cbeca66d81 100644
---
a/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationListenerTestUtils.java
+++
b/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/notifications/ConfigurationListenerTestUtils.java
@@ -151,7 +151,7 @@ class ConfigurationListenerTestUtils {
return new ConfigurationNamedListListener<>() {
/** {@inheritDoc} */
@Override
- public CompletableFuture<?> onRename(String oldName, String
newName, ConfigurationNotificationEvent<T> ctx) {
+ public CompletableFuture<?>
onRename(ConfigurationNotificationEvent<T> ctx) {
try {
consumer.accept(ctx);
} catch (Throwable t) {
diff --git
a/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
b/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
index 7e2967b84d..d1d20213e4 100644
---
a/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
+++
b/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
@@ -296,6 +296,8 @@ public class ConfigurationExtension implements
BeforeEachCallback, AfterEachCall
root.setInjectedNameFieldValue(annotation.name());
}
+ superRoot.makeImmutable();
+
// Reference to the super root is required to make
DynamicConfigurationChanger#change method atomic.
var superRootRef = new AtomicReference<>(superRoot);
diff --git
a/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/DistributionZoneManager.java
b/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/DistributionZoneManager.java
index 1d87f04024..acb0b31747 100644
---
a/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/DistributionZoneManager.java
+++
b/modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/DistributionZoneManager.java
@@ -547,13 +547,13 @@ public class DistributionZoneManager implements
IgniteComponent {
*/
private ConfigurationListener<Integer> onUpdateScaleUp() {
return ctx -> {
- int zoneId =
ctx.config(DistributionZoneConfiguration.class).zoneId().value();
-
if (ctx.oldValue() == null) {
// zone creation, already handled in a separate listener.
return completedFuture(null);
}
+ int zoneId = ctx.newValue(DistributionZoneView.class).zoneId();
+
int newScaleUp = ctx.newValue().intValue();
// It is safe to zonesTimers.get(zoneId) in term of NPE because
meta storage notifications are one-threaded
@@ -585,13 +585,13 @@ public class DistributionZoneManager implements
IgniteComponent {
*/
private ConfigurationListener<Integer> onUpdateScaleDown() {
return ctx -> {
- int zoneId =
ctx.config(DistributionZoneConfiguration.class).zoneId().value();
-
if (ctx.oldValue() == null) {
// zone creation, already handled in a separate listener.
return completedFuture(null);
}
+ int zoneId = ctx.newValue(DistributionZoneView.class).zoneId();
+
int newScaleDown = ctx.newValue().intValue();
// It is safe to zonesTimers.get(zoneId) in term of NPE because
meta storage notifications are one-threaded
diff --git
a/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
b/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
index d06ec3f143..4408b5ffc0 100644
---
a/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
+++
b/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
@@ -572,8 +572,6 @@ public class IndexManager extends Producer<IndexEvent,
IndexEventParameters> imp
/** {@inheritDoc} */
@Override
public @NotNull CompletableFuture<?> onRename(
- String oldName,
- String newName,
ConfigurationNotificationEvent<TableIndexView> ctx
) {
return failedFuture(new
UnsupportedOperationException("https://issues.apache.org/jira/browse/IGNITE-16196"));
diff --git
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/AssignmentsTracker.java
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/AssignmentsTracker.java
index 71ce16672b..9d7389b2f4 100644
---
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/AssignmentsTracker.java
+++
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/AssignmentsTracker.java
@@ -41,6 +41,7 @@ import org.apache.ignite.internal.metastorage.WatchEvent;
import org.apache.ignite.internal.metastorage.WatchListener;
import org.apache.ignite.internal.replicator.ReplicationGroupId;
import
org.apache.ignite.internal.schema.configuration.ExtendedTableConfiguration;
+import org.apache.ignite.internal.schema.configuration.ExtendedTableView;
import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
import
org.apache.ignite.internal.table.distributed.replicator.TablePartitionId;
import org.apache.ignite.internal.util.ByteUtils;
@@ -152,12 +153,12 @@ public class AssignmentsTracker {
private class AssignmentsCfgListener implements
ConfigurationListener<byte[]> {
@Override
public CompletableFuture<?>
onUpdate(ConfigurationNotificationEvent<byte[]> assignmentsCtx) {
- ExtendedTableConfiguration tblCfg =
assignmentsCtx.config(ExtendedTableConfiguration.class);
+ ExtendedTableView tblCfg =
assignmentsCtx.newValue(ExtendedTableView.class);
DistributionZoneView distributionZoneView =
- getZoneById(distributionZonesConfiguration,
tblCfg.zoneId().value()).value();
+ getZoneById(distributionZonesConfiguration,
tblCfg.zoneId()).value();
- UUID tblId = tblCfg.id().value();
+ UUID tblId = tblCfg.id();
LOG.debug("Table assignments configuration update for placement
driver [revision={}, tblId={}]",
assignmentsCtx.storageRevision(), tblId);
diff --git
a/modules/rest/src/test/java/org/apache/ignite/internal/rest/authentication/StubAuthenticationViewEvent.java
b/modules/rest/src/test/java/org/apache/ignite/internal/rest/authentication/StubAuthenticationViewEvent.java
index 7aa17380e3..bb1b1edfbd 100644
---
a/modules/rest/src/test/java/org/apache/ignite/internal/rest/authentication/StubAuthenticationViewEvent.java
+++
b/modules/rest/src/test/java/org/apache/ignite/internal/rest/authentication/StubAuthenticationViewEvent.java
@@ -17,7 +17,6 @@
package org.apache.ignite.internal.rest.authentication;
-import org.apache.ignite.configuration.ConfigurationProperty;
import
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
import org.apache.ignite.internal.configuration.AuthenticationView;
import org.jetbrains.annotations.Nullable;
@@ -38,26 +37,34 @@ public class StubAuthenticationViewEvent implements
ConfigurationNotificationEve
return oldValue;
}
+ @Override
+ public <T> @Nullable T oldValue(Class<T> viewClass) {
+ return null;
+ }
+
@Override
@Nullable
public AuthenticationView newValue() {
return newValue;
}
+ @Override
+ public <T> @Nullable T newValue(Class<T> viewClass) {
+ return null;
+ }
+
@Override
public long storageRevision() {
return 0;
}
@Override
- @Nullable
- public <T extends ConfigurationProperty> T config(Class<T> configClass) {
+ public @Nullable String oldName(Class<?> viewClass) {
return null;
}
@Override
- @Nullable
- public String name(Class<? extends ConfigurationProperty> configClass) {
+ public @Nullable String newName(Class<?> viewClass) {
return null;
}
}
diff --git
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
index e76941a418..5554f229a3 100644
---
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
+++
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
@@ -118,7 +118,7 @@ public class SchemaManager extends Producer<SchemaEvent,
SchemaEventParameters>
}
try {
- ExtendedTableView tblCfg = (ExtendedTableView)
ctx.config(ExtendedTableConfiguration.class).value();
+ ExtendedTableView tblCfg = ctx.newValue(ExtendedTableView.class);
int newSchemaVersion = tblCfg.schemaId();
diff --git
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
index 5ecc7f854e..2c210fc62d 100644
---
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
+++
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.storage.pagememory;
import static java.util.concurrent.CompletableFuture.completedFuture;
+import static
org.apache.ignite.internal.storage.pagememory.configuration.schema.BasePageMemoryStorageEngineConfigurationSchema.DEFAULT_DATA_REGION_NAME;
import static org.apache.ignite.internal.util.IgniteUtils.closeAll;
import java.nio.file.Path;
@@ -153,13 +154,13 @@ public class PersistentPageMemoryStorageEngine implements
StorageEngine {
throw new StorageException("Error starting checkpoint manager", e);
}
- addDataRegion(engineConfig.defaultRegion());
+ addDataRegion(DEFAULT_DATA_REGION_NAME);
// TODO: IGNITE-17066 Add handling deleting/updating data regions
configuration
engineConfig.regions().listenElements(new
ConfigurationNamedListListener<>() {
@Override
public CompletableFuture<?>
onCreate(ConfigurationNotificationEvent<PersistentPageMemoryDataRegionView>
ctx) {
-
addDataRegion(ctx.config(PersistentPageMemoryDataRegionConfiguration.class));
+
addDataRegion(ctx.newName(PersistentPageMemoryDataRegionView.class));
return completedFuture(null);
}
@@ -205,12 +206,14 @@ public class PersistentPageMemoryStorageEngine implements
StorageEngine {
/**
* Creates, starts and adds a new data region to the engine.
*
- * @param dataRegionConfig Data region configuration.
+ * @param name Data region name.
*/
- private void addDataRegion(PersistentPageMemoryDataRegionConfiguration
dataRegionConfig) {
- int pageSize = engineConfig.pageSize().value();
+ private void addDataRegion(String name) {
+ PersistentPageMemoryDataRegionConfiguration dataRegionConfig =
DEFAULT_DATA_REGION_NAME.equals(name)
+ ? engineConfig.defaultRegion()
+ : engineConfig.regions().get(name);
- String name = dataRegionConfig.name().value();
+ int pageSize = engineConfig.pageSize().value();
PersistentPageMemoryDataRegion dataRegion = new
PersistentPageMemoryDataRegion(
dataRegionConfig,
diff --git
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryStorageEngine.java
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryStorageEngine.java
index 99322031c3..de4d80907c 100644
---
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryStorageEngine.java
+++
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryStorageEngine.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.storage.pagememory;
import static java.util.concurrent.CompletableFuture.completedFuture;
+import static
org.apache.ignite.internal.storage.pagememory.configuration.schema.BasePageMemoryStorageEngineConfigurationSchema.DEFAULT_DATA_REGION_NAME;
import static org.apache.ignite.internal.util.IgniteUtils.closeAll;
import java.util.Map;
@@ -92,14 +93,14 @@ public class VolatilePageMemoryStorageEngine implements
StorageEngine {
/** {@inheritDoc} */
@Override
public void start() throws StorageException {
- addDataRegion(engineConfig.defaultRegion());
+ addDataRegion(DEFAULT_DATA_REGION_NAME);
// TODO: IGNITE-17066 Add handling deleting/updating data regions
configuration
engineConfig.regions().listenElements(new
ConfigurationNamedListListener<>() {
/** {@inheritDoc} */
@Override
public CompletableFuture<?>
onCreate(ConfigurationNotificationEvent<VolatilePageMemoryDataRegionView> ctx) {
-
addDataRegion(ctx.config(VolatilePageMemoryDataRegionConfiguration.class));
+
addDataRegion(ctx.newName(VolatilePageMemoryDataRegionView.class));
return completedFuture(null);
}
@@ -142,12 +143,14 @@ public class VolatilePageMemoryStorageEngine implements
StorageEngine {
/**
* Creates, starts and adds a new data region to the engine.
*
- * @param dataRegionConfig Data region configuration.
+ * @param name Data region name.
*/
- private void addDataRegion(VolatilePageMemoryDataRegionConfiguration
dataRegionConfig) {
- int pageSize = engineConfig.pageSize().value();
+ private void addDataRegion(String name) {
+ VolatilePageMemoryDataRegionConfiguration dataRegionConfig =
DEFAULT_DATA_REGION_NAME.equals(name)
+ ? engineConfig.defaultRegion()
+ : engineConfig.regions().get(name);
- String name = dataRegionConfig.name().value();
+ int pageSize = engineConfig.pageSize().value();
VolatilePageMemoryDataRegion dataRegion = new
VolatilePageMemoryDataRegion(
dataRegionConfig,
diff --git
a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngine.java
b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngine.java
index 2e595b343b..66e09efe10 100644
---
a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngine.java
+++
b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngine.java
@@ -17,6 +17,8 @@
package org.apache.ignite.internal.storage.rocksdb;
+import static
org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfigurationSchema.DEFAULT_DATA_REGION_NAME;
+
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -115,20 +117,24 @@ public class RocksDbStorageEngine implements
StorageEngine {
/** {@inheritDoc} */
@Override
public void start() throws StorageException {
- registerDataRegion(engineConfig.defaultRegion());
+ registerDataRegion(DEFAULT_DATA_REGION_NAME);
// TODO: IGNITE-17066 Add handling deleting/updating data regions
configuration
engineConfig.regions().listenElements(new
ConfigurationNamedListListener<>() {
@Override
public CompletableFuture<?>
onCreate(ConfigurationNotificationEvent<RocksDbDataRegionView> ctx) {
-
registerDataRegion(ctx.config(RocksDbDataRegionConfiguration.class));
+ registerDataRegion(ctx.newName(RocksDbDataRegionView.class));
return CompletableFuture.completedFuture(null);
}
});
}
- private void registerDataRegion(RocksDbDataRegionConfiguration
dataRegionConfig) {
+ private void registerDataRegion(String name) {
+ RocksDbDataRegionConfiguration dataRegionConfig =
DEFAULT_DATA_REGION_NAME.equals(name)
+ ? engineConfig.defaultRegion()
+ : engineConfig.regions().get(name);
+
var region = new RocksDbDataRegion(dataRegionConfig);
region.start();
diff --git
a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
index 430c8ebcf3..ea43056438 100644
---
a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
+++
b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
@@ -121,6 +121,7 @@ import
org.apache.ignite.internal.schema.configuration.TableConfiguration;
import org.apache.ignite.internal.schema.configuration.TableView;
import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
import org.apache.ignite.internal.schema.configuration.index.TableIndexView;
+import
org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
import org.apache.ignite.internal.schema.event.SchemaEvent;
import org.apache.ignite.internal.schema.event.SchemaEventParameters;
import org.apache.ignite.internal.storage.DataStorageManager;
@@ -451,7 +452,7 @@ public class TableManager extends Producer<TableEvent,
TableEventParameters> imp
}
@Override
- public CompletableFuture<?> onRename(String oldName, String
newName, ConfigurationNotificationEvent<TableView> ctx) {
+ public CompletableFuture<?>
onRename(ConfigurationNotificationEvent<TableView> ctx) {
// TODO: IGNITE-15485 Support table rename operation.
return completedFuture(null);
@@ -591,7 +592,7 @@ public class TableManager extends Producer<TableEvent,
TableEventParameters> imp
try {
if (replicasCtx.oldValue() != null && replicasCtx.oldValue() > 0) {
- DistributionZoneView zoneCfg =
replicasCtx.config(DistributionZoneConfiguration.class).value();
+ DistributionZoneView zoneCfg =
replicasCtx.newValue(DistributionZoneView.class);
List<TableConfiguration> tblsCfg = new ArrayList<>();
@@ -666,9 +667,11 @@ public class TableManager extends Producer<TableEvent,
TableEventParameters> imp
* @param assignmentsCtx Change assignment event.
*/
private CompletableFuture<?>
updateAssignmentInternal(ConfigurationNotificationEvent<byte[]> assignmentsCtx)
{
- ExtendedTableConfiguration tblCfg =
assignmentsCtx.config(ExtendedTableConfiguration.class);
+ ExtendedTableView tblCfg =
assignmentsCtx.newValue(ExtendedTableView.class);
- UUID tblId = tblCfg.id().value();
+ UUID tblId = tblCfg.id();
+
+ DataStorageConfiguration dsCfg =
tablesCfg.tables().get(tblId).dataStorage();
long causalityToken = assignmentsCtx.storageRevision();
@@ -732,7 +735,7 @@ public class TableManager extends Producer<TableEvent,
TableEventParameters> imp
partId,
storage,
table.indexStorageAdapters(partId),
- tblCfg.dataStorage()
+ dsCfg
);
mvGc.addStorage(replicaGrpId,
storageUpdateHandler);