ibessonov commented on a change in pull request #41:
URL: https://github.com/apache/ignite-3/pull/41#discussion_r568593458
##########
File path:
modules/configuration/src/main/java/org/apache/ignite/configuration/ConfigurationChanger.java
##########
@@ -0,0 +1,133 @@
+package org.apache.ignite.configuration;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import org.apache.ignite.configuration.storage.ConfigurationStorage;
+import org.apache.ignite.configuration.storage.Data;
+import org.apache.ignite.configuration.tree.ConfigurationVisitor;
+import org.apache.ignite.configuration.tree.InnerNode;
+import org.apache.ignite.configuration.tree.NamedListNode;
+import org.apache.ignite.configuration.tree.TraversableTreeNode;
+import
org.apache.ignite.configuration.validation.ConfigurationValidationException;
+import org.apache.ignite.configuration.validation.ValidationIssue;
+
+// TODO: stupid stub name, think later
+public class ConfigurationChanger {
+
+ private Map<RootKey<?>, Configurator<?>> registry = new HashMap<>();
+
+ private ConfigurationStorage configurationStorage;
+
+ private final AtomicInteger version = new AtomicInteger(0);
+
+ public ConfigurationChanger(ConfigurationStorage configurationStorage) {
+ this.configurationStorage = configurationStorage;
+ }
+
+ public void init() {
+ final Data data = configurationStorage.readAll();
+ version.set(data.version());
+
+ configurationStorage.addListener(changedEntries -> {
+ // TODO: add tree update
+ version.set(changedEntries.version());
+ });
+
+ // TODO: iterate over data and fill Configurators
+ }
+
+ public void registerConfiguration(RootKey<?> key, Configurator<?>
configurator) {
+ registry.put(key, configurator);
+ }
+
+ public <T extends ConfigurationTree<?, ?>> void change(Map<RootKey<?>,
TraversableTreeNode> changes) {
+ Map<String, Serializable> allChanges = changes.entrySet().stream()
+ .map((Map.Entry<RootKey<?>, TraversableTreeNode> change) ->
convertChangesToMap(change.getKey(), change.getValue()))
+ .flatMap(map -> map.entrySet().stream())
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+
+ boolean success = false;
+
+ List<ValidationIssue> validationIssues = Collections.emptyList();
+
+ while (!success) {
+ validationIssues = validate(changes);
+
+ final int version = this.version.get();
Review comment:
I don't see how this version is synchronized with the one that you
validated on. We'll discuss it later.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]