This is an automated email from the ASF dual-hosted git repository.

amashenkov 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 e31ee03bc6 IGNITE-20411 IndexOutOfBoundsException in 
SqlRowHandler$BinaryTupleRowWrapper (#2634)
e31ee03bc6 is described below

commit e31ee03bc6e32e07fff06d481e8d9eb2fba18990
Author: Max Zhuravkov <[email protected]>
AuthorDate: Wed Oct 4 17:04:52 2023 +0300

    IGNITE-20411 IndexOutOfBoundsException in 
SqlRowHandler$BinaryTupleRowWrapper (#2634)
---
 .../engine/exec/ExecutableTableRegistryImpl.java   |  9 +------
 .../sql/engine/prepare/PrepareServiceImpl.java     |  9 +------
 .../sql/engine/schema/SchemaUpdateListener.java    | 29 ---------------------
 .../exec/ExecutableTableRegistrySelfTest.java      | 30 +++-------------------
 4 files changed, 6 insertions(+), 71 deletions(-)

diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistryImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistryImpl.java
index 7012d6fcf4..819f67f7a9 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistryImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistryImpl.java
@@ -26,7 +26,6 @@ import org.apache.ignite.internal.replicator.ReplicaService;
 import org.apache.ignite.internal.schema.CatalogSchemaManager;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
 import org.apache.ignite.internal.schema.SchemaRegistry;
-import org.apache.ignite.internal.sql.engine.schema.SchemaUpdateListener;
 import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
 import org.apache.ignite.internal.table.InternalTable;
 import org.apache.ignite.internal.table.distributed.TableManager;
@@ -34,7 +33,7 @@ import 
org.apache.ignite.internal.table.distributed.TableManager;
 /**
  * Implementation of {@link ExecutableTableRegistry}.
  */
-public class ExecutableTableRegistryImpl implements ExecutableTableRegistry, 
SchemaUpdateListener {
+public class ExecutableTableRegistryImpl implements ExecutableTableRegistry {
 
     private final TableManager tableManager;
 
@@ -66,12 +65,6 @@ public class ExecutableTableRegistryImpl implements 
ExecutableTableRegistry, Sch
         return tableCache.computeIfAbsent(cacheKey(tableId, tableVersion), (k) 
-> loadTable(tableId, tableVersion, tableDescriptor));
     }
 
-    /** {@inheritDoc} */
-    @Override
-    public void onSchemaUpdated() {
-        tableCache.clear();
-    }
-
     private CompletableFuture<ExecutableTable> loadTable(int tableId, int 
tableVersion, TableDescriptor tableDescriptor) {
         return tableManager.tableAsync(tableId)
                 .thenApply((table) -> {
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
index 51305ca469..f82b8807d5 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
@@ -49,7 +49,6 @@ import 
org.apache.ignite.internal.sql.api.ResultSetMetadataImpl;
 import org.apache.ignite.internal.sql.engine.SqlQueryType;
 import 
org.apache.ignite.internal.sql.engine.prepare.ddl.DdlSqlToCommandConverter;
 import org.apache.ignite.internal.sql.engine.rel.IgniteRel;
-import org.apache.ignite.internal.sql.engine.schema.SchemaUpdateListener;
 import org.apache.ignite.internal.sql.engine.sql.ParsedResult;
 import org.apache.ignite.internal.sql.engine.util.BaseQueryContext;
 import org.apache.ignite.internal.sql.engine.util.TypeUtils;
@@ -68,7 +67,7 @@ import org.jetbrains.annotations.Nullable;
 /**
  * An implementation of the {@link PrepareService} that uses a Calcite-based 
query planner to validate and optimize a given query.
  */
-public class PrepareServiceImpl implements PrepareService, 
SchemaUpdateListener {
+public class PrepareServiceImpl implements PrepareService {
     private static final IgniteLogger LOG = 
Loggers.forClass(PrepareServiceImpl.class);
 
     /** DML metadata holder. */
@@ -213,12 +212,6 @@ public class PrepareServiceImpl implements PrepareService, 
SchemaUpdateListener
         }
     }
 
-    /** {@inheritDoc} */
-    @Override
-    public void onSchemaUpdated() {
-        cache.clear();
-    }
-
     private CompletableFuture<QueryPlan> prepareDdl(ParsedResult parsedResult, 
PlanningContext ctx) {
         SqlNode sqlNode = parsedResult.parsedTree();
 
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SchemaUpdateListener.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SchemaUpdateListener.java
deleted file mode 100644
index ef22b1df26..0000000000
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SchemaUpdateListener.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.sql.engine.schema;
-
-/**
- * A schema change listener.
- */
-@FunctionalInterface
-public interface SchemaUpdateListener {
-    /**
-     * A callback that will be fired when the SQL schema changes.
-     */
-    void onSchemaUpdated();
-}
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistrySelfTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistrySelfTest.java
index 81d27aee05..f61257b737 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistrySelfTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistrySelfTest.java
@@ -19,10 +19,9 @@ package org.apache.ignite.internal.sql.engine.exec;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.when;
 
-import java.util.List;
+import java.util.Collections;
 import java.util.concurrent.CompletableFuture;
 import org.apache.ignite.internal.TestHybridClock;
 import org.apache.ignite.internal.hlc.HybridClock;
@@ -32,7 +31,6 @@ import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
 import org.apache.ignite.internal.schema.SchemaRegistry;
-import org.apache.ignite.internal.sql.engine.schema.ColumnDescriptor;
 import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
 import org.apache.ignite.internal.table.InternalTable;
 import org.apache.ignite.internal.table.TableImpl;
@@ -105,22 +103,6 @@ public class ExecutableTableRegistrySelfTest extends 
BaseIgniteAbstractTest {
         assertTrue(done, "Failed to clear the cache");
     }
 
-    /** Table cache is purged on schema update. */
-    @Test
-    public void testCacheIsClearedOnSchemaUpdate() {
-        Tester tester = new Tester();
-
-        CompletableFuture<ExecutableTable> f1 = tester.getTable(1);
-        CompletableFuture<ExecutableTable> f2 = tester.getTable(2);
-
-        f1.join();
-        f2.join();
-
-        tester.schemaUpdated();
-
-        assertTrue(tester.registry.tableCache.isEmpty());
-    }
-
     private static SchemaDescriptor newDescriptor(int schemaVersion) {
         return new SchemaDescriptor(
                 schemaVersion,
@@ -141,20 +123,16 @@ public class ExecutableTableRegistrySelfTest extends 
BaseIgniteAbstractTest {
             registry = new ExecutableTableRegistryImpl(tableManager, 
schemaManager, replicaService, clock, cacheSize);
         }
 
-        void schemaUpdated() {
-            registry.onSchemaUpdated();
-        }
-
         CompletableFuture<ExecutableTable> getTable(int tableId) {
             TableImpl table = new TableImpl(internalTable, schemaRegistry, new 
HeapLockManager());
             int schemaVersion = 1;
-            int tableVersion = 1;
+            int tableVersion = 10;
             SchemaDescriptor schemaDescriptor = newDescriptor(schemaVersion);
 
             
when(tableManager.tableAsync(tableId)).thenReturn(CompletableFuture.completedFuture(table));
             
when(schemaManager.schemaRegistry(tableId)).thenReturn(schemaRegistry);
-            when(schemaRegistry.schema(anyInt())).thenReturn(schemaDescriptor);
-            
when(descriptor.iterator()).thenReturn(List.<ColumnDescriptor>of().iterator());
+            
when(schemaRegistry.schema(tableVersion)).thenReturn(schemaDescriptor);
+            
when(descriptor.iterator()).thenReturn(Collections.emptyIterator());
 
             return registry.getTable(tableId, tableVersion, descriptor);
         }

Reply via email to