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);
}