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 adc5a4ffd2 IGNITE-19180 NamedListView made iterable (#1881)
adc5a4ffd2 is described below

commit adc5a4ffd27f5b0b14422c322120425ac81e080f
Author: Ivan Bessonov <[email protected]>
AuthorDate: Sat Apr 1 17:38:13 2023 +0300

    IGNITE-19180 NamedListView made iterable (#1881)
---
 .../apache/ignite/configuration/NamedListView.java | 14 +++++++++++-
 .../internal/configuration/tree/NamedListNode.java |  9 +++++++-
 .../distributionzones/DistributionZoneManager.java | 26 ++++++++++------------
 .../apache/ignite/internal/index/IndexManager.java |  6 ++---
 .../ignite/internal/metrics/MetricManager.java     |  4 ++--
 .../configuration/ExporterConfigurationSchema.java |  4 ++++
 .../DelegatingAuthenticationProvider.java          |  4 ++--
 .../ConfigurationToSchemaDescriptorConverter.java  |  6 ++---
 .../AuthenticationProvidersValidatorImpl.java      |  9 ++++----
 .../sql/engine/exec/ddl/DdlCommandHandler.java     | 26 ++++++++--------------
 .../storage/index/SortedIndexDescriptor.java       |  8 +++----
 .../internal/table/distributed/TableManager.java   |  8 +++----
 12 files changed, 65 insertions(+), 59 deletions(-)

diff --git 
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListView.java
 
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListView.java
index 2980e6e44c..4d4f3cd49d 100644
--- 
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListView.java
+++ 
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListView.java
@@ -17,8 +17,10 @@
 
 package org.apache.ignite.configuration;
 
+import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
+import java.util.stream.Stream;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -26,7 +28,7 @@ import org.jetbrains.annotations.Nullable;
  *
  * @param <VIEWT> Type for immutable snapshots of named list elements.
  */
-public interface NamedListView<VIEWT> {
+public interface NamedListView<VIEWT> extends Iterable<VIEWT> {
     /**
      * Returns an immutable collection of keys contained within this list.
      *
@@ -67,4 +69,14 @@ public interface NamedListView<VIEWT> {
      * @return Number of elements.
      */
     int size();
+
+    /**
+     * Returns an ordered stream of values from the named list.
+     */
+    Stream<VIEWT> stream();
+
+    @Override
+    default Iterator<VIEWT> iterator() {
+        return stream().iterator();
+    }
 }
diff --git 
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/tree/NamedListNode.java
 
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/tree/NamedListNode.java
index 8db9ac3960..f37525eb89 100644
--- 
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/tree/NamedListNode.java
+++ 
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/tree/NamedListNode.java
@@ -29,6 +29,8 @@ import java.util.Objects;
 import java.util.UUID;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
 import org.apache.ignite.configuration.ConfigurationNodeAlreadyExistException;
 import org.apache.ignite.configuration.ConfigurationNodeDoesNotExistException;
 import org.apache.ignite.configuration.ConfigurationNodeRemovedException;
@@ -156,6 +158,11 @@ public final class NamedListNode<N> implements 
NamedListChange<N, N>, Traversabl
         return map.size();
     }
 
+    @Override
+    public Stream<N> stream() {
+        return IntStream.range(0, 
map.size()).mapToObj(map::get).map(this::specificNode);
+    }
+
     /** {@inheritDoc} */
     @Override
     public NamedListChange<N, N> create(String key, Consumer<N> valConsumer) {
@@ -367,7 +374,7 @@ public final class NamedListNode<N> implements 
NamedListChange<N, N>, Traversabl
 
     /**
      * Sets an internal id for the value associated with the passed key. 
Should not be used in arbitrary code. Refer to {@link
-     * ConfigurationUtil#fillFromPrefixMap} for further details on the usage.
+     * ConfigurationUtil#fillFromPrefixMap(InnerNode, Map)} for further 
details on the usage.
      *
      * @param key        Key to update. Should be present in the named list. 
Nothing will happen if the key is missing.
      * @param internalId New id to associate with the key.
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 08ceb1accb..bfac9d56ac 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
@@ -521,12 +521,11 @@ public class DistributionZoneManager implements 
IgniteComponent {
             // Init timers after restart.
             zonesState.putIfAbsent(DEFAULT_ZONE_ID, new ZoneState(executor));
 
-            zonesConfiguration.distributionZones().value().namedListKeys()
-                    .forEach(zoneName -> {
-                        int zoneId = 
zonesConfiguration.distributionZones().get(zoneName).zoneId().value();
+            zonesConfiguration.distributionZones().value().forEach(zone -> {
+                int zoneId = zone.zoneId();
 
-                        zonesState.putIfAbsent(zoneId, new 
ZoneState(executor));
-                    });
+                zonesState.putIfAbsent(zoneId, new ZoneState(executor));
+            });
 
             logicalTopologyService.addEventListener(topologyEventListener);
 
@@ -909,16 +908,15 @@ public class DistributionZoneManager implements 
IgniteComponent {
                                         logicalTopology
                                 );
 
-                                
zonesConfiguration.distributionZones().value().namedListKeys()
-                                        .forEach(zoneName -> {
-                                            int zoneId = 
zonesConfiguration.distributionZones().get(zoneName).zoneId().value();
+                                
zonesConfiguration.distributionZones().value().forEach(zone -> {
+                                    int zoneId = zone.zoneId();
 
-                                            
saveDataNodesAndUpdateTriggerKeysInMetaStorage(
-                                                    zoneId,
-                                                    appliedRevision,
-                                                    logicalTopology
-                                            );
-                                        });
+                                    
saveDataNodesAndUpdateTriggerKeysInMetaStorage(
+                                            zoneId,
+                                            appliedRevision,
+                                            logicalTopology
+                                    );
+                                });
                             }
                         } finally {
                             busyLock.leaveBusy();
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 4b0caa0ccf..d06ec3f143 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
@@ -462,14 +462,12 @@ public class IndexManager extends Producer<IndexEvent, 
IndexEventParameters> imp
         var indexedColumns = new ArrayList<String>(colsCount);
         var collations = new ArrayList<ColumnCollation>(colsCount);
 
-        for (var columnName : indexView.columns().namedListKeys()) {
-            IndexColumnView columnView = indexView.columns().get(columnName);
-
+        for (IndexColumnView columnView : indexView.columns()) {
             //TODO IGNITE-15141: Make null-order configurable.
             // NULLS FIRST for DESC, NULLS LAST for ASC by default.
             boolean nullsFirst = !columnView.asc();
 
-            indexedColumns.add(columnName);
+            indexedColumns.add(columnView.name());
             collations.add(ColumnCollation.get(columnView.asc(), nullsFirst));
         }
 
diff --git 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/MetricManager.java
 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/MetricManager.java
index 64fb1d31c8..0801a799a8 100644
--- 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/MetricManager.java
+++ 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/MetricManager.java
@@ -106,8 +106,8 @@ public class MetricManager implements IgniteComponent {
 
         MetricView conf = metricConfiguration.value();
 
-        for (String exporterName : conf.exporters().namedListKeys()) {
-            checkAndStartExporter(exporterName, 
metricConfiguration.exporters().get(exporterName).value());
+        for (ExporterView exporter : conf.exporters()) {
+            checkAndStartExporter(exporter.exporterName(), exporter);
         }
 
         metricConfiguration.exporters().listenElements(new 
ExporterConfigurationListener());
diff --git 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/exporters/configuration/ExporterConfigurationSchema.java
 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/exporters/configuration/ExporterConfigurationSchema.java
index 1a2f35bdbe..5ceee5f2be 100644
--- 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/exporters/configuration/ExporterConfigurationSchema.java
+++ 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/exporters/configuration/ExporterConfigurationSchema.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.metrics.exporters.configuration;
 
+import org.apache.ignite.configuration.annotation.InjectedName;
 import org.apache.ignite.configuration.annotation.PolymorphicConfig;
 import org.apache.ignite.configuration.annotation.PolymorphicId;
 import org.apache.ignite.internal.metrics.exporters.MetricExporter;
@@ -33,4 +34,7 @@ public class ExporterConfigurationSchema {
      */
     @PolymorphicId
     public String exporterName;
+
+    @InjectedName
+    public String name;
 }
diff --git 
a/modules/rest/src/main/java/org/apache/ignite/internal/rest/authentication/DelegatingAuthenticationProvider.java
 
b/modules/rest/src/main/java/org/apache/ignite/internal/rest/authentication/DelegatingAuthenticationProvider.java
index 1d21b0618e..6c2093b450 100644
--- 
a/modules/rest/src/main/java/org/apache/ignite/internal/rest/authentication/DelegatingAuthenticationProvider.java
+++ 
b/modules/rest/src/main/java/org/apache/ignite/internal/rest/authentication/DelegatingAuthenticationProvider.java
@@ -107,8 +107,8 @@ public class DelegatingAuthenticationProvider implements 
AuthenticationProvider,
 
     private static List<Authenticator> 
providersFromAuthView(AuthenticationView view) {
         NamedListView<? extends AuthenticationProviderView> providers = 
view.providers();
-        return providers.namedListKeys().stream()
-                .map(providers::get)
+
+        return providers.stream()
                 .map(AuthenticatorFactory::create)
                 .collect(Collectors.toList());
     }
diff --git 
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/ConfigurationToSchemaDescriptorConverter.java
 
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/ConfigurationToSchemaDescriptorConverter.java
index b470d5f648..b2cae01a10 100644
--- 
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/ConfigurationToSchemaDescriptorConverter.java
+++ 
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/ConfigurationToSchemaDescriptorConverter.java
@@ -159,15 +159,13 @@ public final class 
ConfigurationToSchemaDescriptorConverter {
 
         int idx = 0;
 
-        for (String columnName : tableView.columns().namedListKeys()) {
-            ColumnView column = tableView.columns().get(columnName);
-
+        for (ColumnView column : tableView.columns()) {
             if (column == null) {
                 // columns was removed, so let's skip it
                 continue;
             }
 
-            if (keyColumnsNames.contains(columnName)) {
+            if (keyColumnsNames.contains(column.name())) {
                 keyCols.add(convert(idx, column));
             } else {
                 valCols.add(convert(idx, column));
diff --git 
a/modules/security/src/main/java/org/apache/ignite/internal/configuration/AuthenticationProvidersValidatorImpl.java
 
b/modules/security/src/main/java/org/apache/ignite/internal/configuration/AuthenticationProvidersValidatorImpl.java
index fa73de817a..5e6abbd2bf 100644
--- 
a/modules/security/src/main/java/org/apache/ignite/internal/configuration/AuthenticationProvidersValidatorImpl.java
+++ 
b/modules/security/src/main/java/org/apache/ignite/internal/configuration/AuthenticationProvidersValidatorImpl.java
@@ -35,13 +35,12 @@ public class AuthenticationProvidersValidatorImpl implements
 
     @Override
     public void validate(AuthenticationProvidersValidator annotation, 
ValidationContext<NamedListView<AuthenticationProviderView>> ctx) {
-        NamedListView<AuthenticationProviderView> providers = 
ctx.getNewValue();
-        providers.namedListKeys()
-                .forEach(it -> validateProvider(it, providers.get(it), ctx));
-
+        for (AuthenticationProviderView provider : ctx.getNewValue()) {
+            validateProvider(provider.name(), provider, ctx);
+        }
     }
 
-    private void validateProvider(String key, AuthenticationProviderView view,
+    private static void validateProvider(String key, 
AuthenticationProviderView view,
             ValidationContext<NamedListView<AuthenticationProviderView>> ctx) {
         try {
             AuthenticationType authenticationType = 
AuthenticationType.parse(view.type());
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ddl/DdlCommandHandler.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ddl/DdlCommandHandler.java
index a5acc047ac..c485592d53 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ddl/DdlCommandHandler.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ddl/DdlCommandHandler.java
@@ -25,10 +25,8 @@ import static 
org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
 import static 
org.apache.ignite.lang.ErrorGroups.Sql.DEL_PK_COMUMN_CONSTRAINT_ERR;
 import static 
org.apache.ignite.lang.ErrorGroups.Sql.UNSUPPORTED_DDL_OPERATION_ERR;
 
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
@@ -379,13 +377,13 @@ public class DdlCommandHandler {
                     chng.changeColumns(cols -> {
                         retUsr.set(true); // Reset state if closure have been 
restarted.
 
-                        Map<String, String> colNamesToOrders = 
columnOrdersToNames(chng.columns());
+                        Set<String> colNamesToOrders = 
columnNames(chng.columns());
 
                         List<ColumnDefinition> colsDef0;
 
                         if (ignoreColumnExistance) {
                             colsDef0 = colsDef.stream().filter(k -> {
-                                if (colNamesToOrders.containsKey(k.name())) {
+                                if (colNamesToOrders.contains(k.name())) {
                                     retUsr.set(false);
 
                                     return false;
@@ -395,7 +393,7 @@ public class DdlCommandHandler {
                             }).collect(Collectors.toList());
                         } else {
                             colsDef.stream()
-                                    .filter(k -> 
colNamesToOrders.containsKey(k.name()))
+                                    .filter(k -> 
colNamesToOrders.contains(k.name()))
                                     .findAny()
                                     .ifPresent(c -> {
                                         throw new 
ColumnAlreadyExistsException(c.name());
@@ -469,14 +467,14 @@ public class DdlCommandHandler {
 
                         PrimaryKeyView priKey = chng.primaryKey();
 
-                        Map<String, String> colNamesToOrders = 
columnOrdersToNames(chng.columns());
+                        Set<String> colNamesToOrders = 
columnNames(chng.columns());
 
                         Set<String> colNames0 = new HashSet<>();
 
                         Set<String> primaryCols = Set.of(priKey.columns());
 
                         for (String colName : colNames) {
-                            if (!colNamesToOrders.containsKey(colName)) {
+                            if (!colNamesToOrders.contains(colName)) {
                                 ret.set(false);
 
                                 if (!ignoreColumnExistence) {
@@ -492,7 +490,7 @@ public class DdlCommandHandler {
                             }
                         }
 
-                        colNames0.forEach(k -> 
cols.delete(colNamesToOrders.get(k)));
+                        colNames0.forEach(cols::delete);
                     });
 
                     return ret.get();
@@ -561,14 +559,8 @@ public class DdlCommandHandler {
         }
     }
 
-    /** Map column name to order. */
-    private static Map<String, String> columnOrdersToNames(NamedListView<? 
extends ColumnView> cols) {
-        Map<String, String> colNames = new HashMap<>(cols.size());
-
-        for (String colOrder : cols.namedListKeys()) {
-            colNames.put(cols.get(colOrder).name(), colOrder);
-        }
-
-        return colNames;
+    /** Column names set. */
+    private static Set<String> columnNames(NamedListView<? extends ColumnView> 
cols) {
+        return new HashSet<>(cols.namedListKeys());
     }
 }
diff --git 
a/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/SortedIndexDescriptor.java
 
b/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/SortedIndexDescriptor.java
index 661d69cd76..1acc31ae02 100644
--- 
a/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/SortedIndexDescriptor.java
+++ 
b/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/SortedIndexDescriptor.java
@@ -159,14 +159,14 @@ public class SortedIndexDescriptor implements 
IndexDescriptor {
 
         NamedListView<? extends IndexColumnView> indexColumns = 
((SortedIndexView) indexConfig).columns();
 
-        return indexColumns.namedListKeys().stream()
-                .map(columnName -> {
+        return indexColumns.stream()
+                .map(indexColumnView -> {
+                    String columnName = indexColumnView.name();
+
                     ColumnView columnView = 
tableConfig.columns().get(columnName);
 
                     assert columnView != null : "Incorrect index column 
configuration. " + columnName + " column does not exist";
 
-                    IndexColumnView indexColumnView = 
indexColumns.get(columnName);
-
                     return new SortedIndexColumnDescriptor(columnView, 
indexColumnView);
                 })
                 .collect(toUnmodifiableList());
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 7848b4931a..430c8ebcf3 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
@@ -1517,11 +1517,9 @@ public class TableManager extends Producer<TableEvent, 
TableEventParameters> imp
                                 tblChg.delete(name);
                             })
                             .changeIndexes(idxChg -> {
-                                NamedListView<? extends TableIndexView> 
indexes = chg.indexes();
-
-                                for (String indexName : 
indexes.namedListKeys()) {
-                                    if 
(indexes.get(indexName).tableId().equals(tbl.tableId())) {
-                                        idxChg.delete(indexName);
+                                for (TableIndexView index : idxChg) {
+                                    if (index.tableId().equals(tbl.tableId())) 
{
+                                        idxChg.delete(index.name());
                                     }
                                 }
                             }))

Reply via email to