You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tl...@apache.org on 2022/03/10 09:44:49 UTC
[ignite-3] branch main updated: IGNITE-16593 Schema should keep colocation information (#708)
This is an automated email from the ASF dual-hosted git repository.
tledkov 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 66f5136 IGNITE-16593 Schema should keep colocation information (#708)
66f5136 is described below
commit 66f5136cb16ff988bd0da9b4884762d2b51ced61
Author: Taras Ledkov <tl...@gridgain.com>
AuthorDate: Thu Mar 10 12:44:43 2022 +0300
IGNITE-16593 Schema should keep colocation information (#708)
---
.../table/PrimaryKeyConfigurationSchema.java | 4 +--
.../schema/definition/PrimaryKeyDefinition.java | 7 +++--
.../ignite/schema/definition/TableDefinition.java | 2 +-
.../builder/PrimaryKeyDefinitionBuilder.java | 12 ++++----
.../runner/app/ItDynamicTableCreationTest.java | 6 ++--
.../ignite/internal/schema/SchemaDescriptor.java | 20 ++++++-------
.../SchemaConfigurationConverter.java | 4 +--
.../configuration/SchemaDescriptorConverter.java | 2 +-
.../schema/configuration/TableValidatorImpl.java | 4 +--
.../schema/definition/TableDefinitionImpl.java | 10 +++----
.../builder/PrimaryKeyDefinitionBuilderImpl.java | 30 ++++++++-----------
.../builder/TableDefinitionBuilderImpl.java | 17 ++++++-----
.../definition/index/PrimaryKeyDefinitionImpl.java | 28 +++++++++++------
.../marshaller/schema/SchemaSerializerImpl.java | 20 ++++++-------
.../internal/schema/SchemaConfigurationTest.java | 35 ++++++++++++++++++++--
.../PrimaryKeyDefinitionDefinitionBuilderTest.java | 20 ++++++-------
.../SchemaConfigurationConverterTest.java | 2 +-
.../SchemaDescriptorConverterTest.java | 8 ++---
.../configuration/TableValidatorImplTest.java | 2 +-
.../schema/serializer/AbstractSerializerTest.java | 2 +-
.../sql/engine/exec/ddl/DdlCommandHandler.java | 2 +-
21 files changed, 139 insertions(+), 98 deletions(-)
diff --git a/modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/PrimaryKeyConfigurationSchema.java b/modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/PrimaryKeyConfigurationSchema.java
index 792a40a..414874c 100644
--- a/modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/PrimaryKeyConfigurationSchema.java
+++ b/modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/PrimaryKeyConfigurationSchema.java
@@ -31,8 +31,8 @@ public class PrimaryKeyConfigurationSchema {
@Immutable
public String[] columns;
- /** Primary key affinity columns names. */
+ /** Primary key colocation columns names. */
@Value(hasDefault = true)
@Immutable
- public String[] affinityColumns = new String[0];
+ public String[] colocationColumns = new String[0];
}
diff --git a/modules/api/src/main/java/org/apache/ignite/schema/definition/PrimaryKeyDefinition.java b/modules/api/src/main/java/org/apache/ignite/schema/definition/PrimaryKeyDefinition.java
index e3249f0..9554f5f 100644
--- a/modules/api/src/main/java/org/apache/ignite/schema/definition/PrimaryKeyDefinition.java
+++ b/modules/api/src/main/java/org/apache/ignite/schema/definition/PrimaryKeyDefinition.java
@@ -17,6 +17,7 @@
package org.apache.ignite.schema.definition;
+import java.util.List;
import java.util.Set;
/**
@@ -34,9 +35,9 @@ public interface PrimaryKeyDefinition extends SchemaObject {
Set<String> columns();
/**
- * Returns affinity columns.
+ * Returns colocation columns.
*
- * @return Affinity columns.
+ * @return Colocation columns.
*/
- Set<String> affinityColumns();
+ List<String> colocationColumns();
}
diff --git a/modules/api/src/main/java/org/apache/ignite/schema/definition/TableDefinition.java b/modules/api/src/main/java/org/apache/ignite/schema/definition/TableDefinition.java
index 7cf0e95..f82bd45 100644
--- a/modules/api/src/main/java/org/apache/ignite/schema/definition/TableDefinition.java
+++ b/modules/api/src/main/java/org/apache/ignite/schema/definition/TableDefinition.java
@@ -48,7 +48,7 @@ public interface TableDefinition extends SchemaObject {
*
* @return List of columns.
*/
- Set<String> affinityColumns();
+ List<String> colocationColumns();
/**
* Returns table columns in user-defined order.
diff --git a/modules/api/src/main/java/org/apache/ignite/schema/definition/builder/PrimaryKeyDefinitionBuilder.java b/modules/api/src/main/java/org/apache/ignite/schema/definition/builder/PrimaryKeyDefinitionBuilder.java
index d78873c..ff4ab00 100644
--- a/modules/api/src/main/java/org/apache/ignite/schema/definition/builder/PrimaryKeyDefinitionBuilder.java
+++ b/modules/api/src/main/java/org/apache/ignite/schema/definition/builder/PrimaryKeyDefinitionBuilder.java
@@ -25,20 +25,20 @@ import org.apache.ignite.schema.definition.PrimaryKeyDefinition;
*/
public interface PrimaryKeyDefinitionBuilder extends SchemaObjectBuilder {
/**
- * Sets affinity columns.
+ * Sets colocation columns.
*
- * @param cols Affinity columns. Must be a valid subset of key columns.
+ * @param cols Colocation columns. Must be a valid subset of key columns.
* @return Primary index builder.
*/
- PrimaryKeyDefinitionBuilder withAffinityColumns(String... cols);
+ PrimaryKeyDefinitionBuilder withColocationColumns(String... cols);
/**
- * Sets affinity columns.
+ * Sets colocation columns.
*
- * @param cols Affinity columns. Must be a valid subset of key columns.
+ * @param cols Colocation columns. Must be a valid subset of key columns.
* @return Primary index builder.
*/
- PrimaryKeyDefinitionBuilder withAffinityColumns(List<String> cols);
+ PrimaryKeyDefinitionBuilder withColocationColumns(List<String> cols);
/**
* Sets primary key columns.
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItDynamicTableCreationTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItDynamicTableCreationTest.java
index e8d814e..fec8f27 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItDynamicTableCreationTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItDynamicTableCreationTest.java
@@ -209,7 +209,7 @@ class ItDynamicTableCreationTest {
).withPrimaryKey(
SchemaBuilders.primaryKey()
.withColumns("key", "affKey")
- .withAffinityColumns("affKey")
+ .withColocationColumns("affKey")
.build()
).build();
@@ -353,7 +353,7 @@ class ItDynamicTableCreationTest {
cols.create("1",
col -> col.changeName("val").changeNullable(true).changeType(t -> t.changeType("INT32")));
})
- .changePrimaryKey(pk -> pk.changeAffinityColumns("key"))
+ .changePrimaryKey(pk -> pk.changeColocationColumns("key"))
.changeReplicas(1)
.changePartitions(10)
);
@@ -381,7 +381,7 @@ class ItDynamicTableCreationTest {
cols.create("1", col -> colChanger.accept(col.changeName("val").changeNullable(true)));
})
- .changePrimaryKey(pk -> pk.changeColumns("key").changeAffinityColumns("key"))
+ .changePrimaryKey(pk -> pk.changeColumns("key").changeColocationColumns("key"))
.changeReplicas(1)
.changePartitions(10)
);
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaDescriptor.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaDescriptor.java
index fc5ffb1..0f316d8 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaDescriptor.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaDescriptor.java
@@ -44,8 +44,8 @@ public class SchemaDescriptor {
/** Value columns in serialization order. */
private final Columns valCols;
- /** Affinity columns. */
- private final Column[] affCols;
+ /** Colocation columns. */
+ private final Column[] colocationCols;
/** Mapping 'Column name' -> Column. */
private final Map<String, Column> colMap;
@@ -69,10 +69,10 @@ public class SchemaDescriptor {
*
* @param ver Schema version.
* @param keyCols Key columns.
- * @param affCols Affinity column names.
+ * @param colocationCols Colocation column names.
* @param valCols Value columns.
*/
- public SchemaDescriptor(int ver, Column[] keyCols, @Nullable String[] affCols, Column[] valCols) {
+ public SchemaDescriptor(int ver, Column[] keyCols, @Nullable String[] colocationCols, Column[] valCols) {
assert keyCols.length > 0 : "No key columns are configured.";
this.ver = ver;
@@ -89,8 +89,8 @@ public class SchemaDescriptor {
// Preserving key chunk column order is not actually required.
// It is sufficient to has same column order for all nodes.
- this.affCols = (ArrayUtils.nullOrEmpty(affCols)) ? keyCols :
- Arrays.stream(affCols).map(colMap::get).toArray(Column[]::new);
+ this.colocationCols = (ArrayUtils.nullOrEmpty(colocationCols)) ? keyCols :
+ Arrays.stream(colocationCols).map(colMap::get).toArray(Column[]::new);
}
/**
@@ -164,12 +164,12 @@ public class SchemaDescriptor {
}
/**
- * Get affinity columns.
+ * Get colocation columns.
*
- * @return Key affinity columns chunk.
+ * @return Key colocation columns chunk.
*/
- public Column[] affinityColumns() {
- return affCols;
+ public Column[] colocationColumns() {
+ return colocationCols;
}
/**
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverter.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverter.java
index 59bd705..0d5ec8c 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverter.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverter.java
@@ -230,7 +230,7 @@ public class SchemaConfigurationConverter {
* @return TableIn.
*/
public static PrimaryKeyDefinition convert(PrimaryKeyView primaryKey) {
- return new PrimaryKeyDefinitionImpl(Set.of(primaryKey.columns()), Set.of(primaryKey.affinityColumns()));
+ return new PrimaryKeyDefinitionImpl(Set.of(primaryKey.columns()), List.of(primaryKey.colocationColumns()));
}
/**
@@ -401,7 +401,7 @@ public class SchemaConfigurationConverter {
tblChg.changePrimaryKey(pkCng -> {
pkCng.changeColumns(tbl.keyColumns().toArray(String[]::new))
- .changeAffinityColumns(tbl.affinityColumns().toArray(String[]::new));
+ .changeColocationColumns(tbl.colocationColumns().toArray(String[]::new));
});
return tblChg;
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaDescriptorConverter.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaDescriptorConverter.java
index 48d2c7b..3892301 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaDescriptorConverter.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaDescriptorConverter.java
@@ -186,7 +186,7 @@ public class SchemaDescriptorConverter {
return new SchemaDescriptor(
schemaVer,
keyCols.toArray(Column[]::new),
- tblCfg.affinityColumns().toArray(String[]::new),
+ tblCfg.colocationColumns().toArray(String[]::new),
valCols.toArray(Column[]::new));
}
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TableValidatorImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TableValidatorImpl.java
index 535ff87..83f4b42 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TableValidatorImpl.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TableValidatorImpl.java
@@ -55,9 +55,9 @@ public class TableValidatorImpl implements Validator<TableValidator, NamedListVi
TableDefinitionImpl tbl = SchemaConfigurationConverter.convert(newTable);
assert !tbl.keyColumns().isEmpty();
- assert !tbl.affinityColumns().isEmpty();
+ assert !tbl.colocationColumns().isEmpty();
- TableDefinitionBuilderImpl.validateIndices(tbl.indices(), tbl.columns(), tbl.affinityColumns());
+ TableDefinitionBuilderImpl.validateIndices(tbl.indices(), tbl.columns(), tbl.colocationColumns());
} catch (IllegalArgumentException e) {
ctx.addIssue(new ValidationIssue("Validator works success by key " + ctx.currentKey() + ". Found "
+ newTable.columns().size() + " columns"));
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/TableDefinitionImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/TableDefinitionImpl.java
index 2e09090..3e8ac14 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/TableDefinitionImpl.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/TableDefinitionImpl.java
@@ -50,8 +50,8 @@ public class TableDefinitionImpl extends AbstractSchemaObject implements TableDe
/** Cached key columns. */
private final Set<String> keyCols;
- /** Cached key affinity columns. */
- private final Set<String> affCols;
+ /** Colocation columns. */
+ private final List<String> colocationCols;
/**
* Constructor.
@@ -76,7 +76,7 @@ public class TableDefinitionImpl extends AbstractSchemaObject implements TableDe
this.indices = indices;
keyCols = primaryKeyDefinition.columns();
- affCols = primaryKeyDefinition.affinityColumns();
+ colocationCols = primaryKeyDefinition.colocationColumns();
}
/** {@inheritDoc} */
@@ -93,8 +93,8 @@ public class TableDefinitionImpl extends AbstractSchemaObject implements TableDe
/** {@inheritDoc} */
@Override
- public Set<String> affinityColumns() {
- return affCols;
+ public List<String> colocationColumns() {
+ return colocationCols;
}
/** {@inheritDoc} */
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/PrimaryKeyDefinitionBuilderImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/PrimaryKeyDefinitionBuilderImpl.java
index 2c1c58b..760cefe 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/PrimaryKeyDefinitionBuilderImpl.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/PrimaryKeyDefinitionBuilderImpl.java
@@ -38,9 +38,9 @@ public class PrimaryKeyDefinitionBuilderImpl implements SchemaObjectBuilder, Pri
@IgniteToStringInclude
private List<String> columns;
- /** Affinity columns. */
+ /** Colocation columns. */
@IgniteToStringInclude
- private List<String> affinityColumns;
+ private List<String> colocationColumns;
/** Builder hints. */
protected Map<String, String> hints;
@@ -63,20 +63,20 @@ public class PrimaryKeyDefinitionBuilderImpl implements SchemaObjectBuilder, Pri
/** {@inheritDoc} */
@Override
- public PrimaryKeyDefinitionBuilderImpl withAffinityColumns(String... affinityColumns) {
- this.affinityColumns = affinityColumns == null
+ public PrimaryKeyDefinitionBuilderImpl withColocationColumns(String... colocationCols) {
+ this.colocationColumns = colocationCols == null
? null
- : Arrays.stream(affinityColumns).map(IgniteObjectName::parse).collect(Collectors.toList());
+ : Arrays.stream(colocationCols).map(IgniteObjectName::parse).collect(Collectors.toList());
return this;
}
/** {@inheritDoc} */
@Override
- public PrimaryKeyDefinitionBuilderImpl withAffinityColumns(List<String> affinityColumns) {
- this.affinityColumns = affinityColumns == null
+ public PrimaryKeyDefinitionBuilderImpl withColocationColumns(List<String> colocationCols) {
+ this.colocationColumns = colocationCols == null
? null
- : affinityColumns.stream().map(IgniteObjectName::parse).collect(Collectors.toList());
+ : colocationCols.stream().map(IgniteObjectName::parse).collect(Collectors.toList());
return this;
}
@@ -98,18 +98,14 @@ public class PrimaryKeyDefinitionBuilderImpl implements SchemaObjectBuilder, Pri
Set<String> cols = Set.copyOf(columns);
- Set<String> affCols;
+ List<String> colocationCols;
- if (CollectionUtils.nullOrEmpty(affinityColumns)) {
- affCols = cols;
+ if (CollectionUtils.nullOrEmpty(colocationColumns)) {
+ colocationCols = List.copyOf(columns);
} else {
- affCols = Set.copyOf(affinityColumns);
-
- if (!cols.containsAll(affCols)) {
- throw new IllegalStateException("Schema definition error: All affinity columns must be part of key.");
- }
+ colocationCols = List.copyOf(colocationColumns);
}
- return new PrimaryKeyDefinitionImpl(cols, affCols);
+ return new PrimaryKeyDefinitionImpl(cols, colocationCols);
}
}
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/TableDefinitionBuilderImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/TableDefinitionBuilderImpl.java
index fe74195..44575c6 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/TableDefinitionBuilderImpl.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/TableDefinitionBuilderImpl.java
@@ -127,7 +127,7 @@ public class TableDefinitionBuilderImpl implements TableDefinitionBuilder {
assert columns.size() > primaryKeyDefinition.columns().size() : "Key or/and value columns must be defined.";
validatePrimaryKey(primaryKeyDefinition.columns(), columns);
- validateIndices(indices.values(), columns.values(), primaryKeyDefinition.affinityColumns());
+ validateIndices(indices.values(), columns.values(), primaryKeyDefinition.colocationColumns());
return new TableDefinitionImpl(
schemaName,
@@ -156,11 +156,14 @@ public class TableDefinitionBuilderImpl implements TableDefinitionBuilder {
/**
* Validate indices.
*
- * @param indices Table indices.
- * @param cols Table columns.
- * @param affColNames Affinity columns names.
+ * @param indices Table indices.
+ * @param cols Table columns.
+ * @param colocationColNames Colocation columns names.
*/
- public static void validateIndices(Collection<IndexDefinition> indices, Collection<ColumnDefinition> cols, Set<String> affColNames) {
+ public static void validateIndices(
+ Collection<IndexDefinition> indices,
+ Collection<ColumnDefinition> cols,
+ List<String> colocationColNames) {
Set<String> colNames = cols.stream().map(ColumnDefinition::name).collect(Collectors.toSet());
for (IndexDefinition idx : indices) {
@@ -173,8 +176,8 @@ public class TableDefinitionBuilderImpl implements TableDefinitionBuilder {
throw new IllegalStateException("Index column must exist in the schema.");
}
- if (idx0.unique() && !(idx0.columns().stream().map(IndexColumnDefinition::name).allMatch(affColNames::contains))) {
- throw new IllegalStateException("Unique index must contains all affinity columns.");
+ if (idx0.unique() && !(idx0.columns().stream().map(IndexColumnDefinition::name).allMatch(colocationColNames::contains))) {
+ throw new IllegalStateException("Unique index must contains all colocation columns.");
}
}
}
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/index/PrimaryKeyDefinitionImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/index/PrimaryKeyDefinitionImpl.java
index 411c7c4..79b106d 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/index/PrimaryKeyDefinitionImpl.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/index/PrimaryKeyDefinitionImpl.java
@@ -17,10 +17,12 @@
package org.apache.ignite.internal.schema.definition.index;
+import java.util.List;
import java.util.Set;
import org.apache.ignite.internal.schema.definition.AbstractSchemaObject;
import org.apache.ignite.internal.tostring.IgniteToStringInclude;
import org.apache.ignite.internal.tostring.S;
+import org.apache.ignite.internal.util.CollectionUtils;
import org.apache.ignite.schema.definition.PrimaryKeyDefinition;
/**
@@ -31,21 +33,29 @@ public class PrimaryKeyDefinitionImpl extends AbstractSchemaObject implements Pr
@IgniteToStringInclude
private final Set<String> columns;
- /** Affinity columns. */
+ /** Colocation columns. */
@IgniteToStringInclude
- private final Set<String> affCols;
+ private final List<String> colocationColumns;
/**
* Constructor.
*
- * @param columns Index columns.
- * @param affinityColumns Affinity columns.
+ * @param columns Index columns.
+ * @param colocationColumns Colocation columns.
*/
- public PrimaryKeyDefinitionImpl(Set<String> columns, Set<String> affinityColumns) {
+ public PrimaryKeyDefinitionImpl(Set<String> columns, List<String> colocationColumns) {
super(PrimaryKeyDefinition.PRIMARY_KEY_NAME);
+ if (CollectionUtils.nullOrEmpty(columns)) {
+ throw new IllegalStateException("Primary key column(s) must be configured.");
+ } else if (!columns.containsAll(colocationColumns)) {
+ throw new IllegalStateException("Schema definition error: All colocation columns must be part of key.");
+ } else if (colocationColumns.size() != Set.copyOf(colocationColumns).size()) {
+ throw new IllegalStateException("Schema definition error: Colocation columns must not be duplicated.");
+ }
+
this.columns = columns;
- this.affCols = affinityColumns;
+ this.colocationColumns = colocationColumns;
}
/** {@inheritDoc} */
@@ -56,8 +66,8 @@ public class PrimaryKeyDefinitionImpl extends AbstractSchemaObject implements Pr
/** {@inheritDoc} */
@Override
- public Set<String> affinityColumns() {
- return affCols;
+ public List<String> colocationColumns() {
+ return colocationColumns;
}
/** {@inheritDoc} */
@@ -66,6 +76,6 @@ public class PrimaryKeyDefinitionImpl extends AbstractSchemaObject implements Pr
return S.toString(PrimaryKeyDefinitionImpl.class, this,
"name", name(),
"cols", columns(),
- "affCols", affinityColumns());
+ "colocationCols", colocationColumns());
}
}
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/schema/SchemaSerializerImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/schema/SchemaSerializerImpl.java
index d3c2feb..d30c7ef 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/schema/SchemaSerializerImpl.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/schema/SchemaSerializerImpl.java
@@ -89,11 +89,11 @@ public class SchemaSerializerImpl extends AbstractSchemaSerializer {
appendColumns(desc.keyColumns(), byteBuf);
appendColumns(desc.valueColumns(), byteBuf);
- Column[] affinityCols = desc.affinityColumns();
+ Column[] colocationCols = desc.colocationColumns();
- byteBuf.putInt(affinityCols.length);
+ byteBuf.putInt(colocationCols.length);
- for (Column column : affinityCols) {
+ for (Column column : colocationCols) {
appendString(column.name(), byteBuf);
}
@@ -108,15 +108,15 @@ public class SchemaSerializerImpl extends AbstractSchemaSerializer {
Column[] keyCols = readColumns(byteBuf);
Column[] valCols = readColumns(byteBuf);
- int affinityColsSize = byteBuf.getInt();
+ int colocationColsSize = byteBuf.getInt();
- String[] affinityCols = new String[affinityColsSize];
+ String[] colocationCols = new String[colocationColsSize];
- for (int i = 0; i < affinityColsSize; i++) {
- affinityCols[i] = readString(byteBuf);
+ for (int i = 0; i < colocationColsSize; i++) {
+ colocationCols[i] = readString(byteBuf);
}
- SchemaDescriptor descriptor = new SchemaDescriptor(ver, keyCols, affinityCols, valCols);
+ SchemaDescriptor descriptor = new SchemaDescriptor(ver, keyCols, colocationCols, valCols);
ColumnMapper mapper = readColumnMapping(descriptor, byteBuf);
@@ -132,8 +132,8 @@ public class SchemaSerializerImpl extends AbstractSchemaSerializer {
+ INT //Descriptor version
+ getColumnsSize(desc.keyColumns())
+ getColumnsSize(desc.valueColumns())
- + ARRAY_HEADER_LENGTH //Affinity columns length
- + getStringArraySize(desc.affinityColumns())
+ + ARRAY_HEADER_LENGTH //Colocation columns length
+ + getStringArraySize(desc.colocationColumns())
+ getColumnMappingSize(desc.columnMapping(), desc.length());
}
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaConfigurationTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaConfigurationTest.java
index d76e0d2..3143916 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaConfigurationTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaConfigurationTest.java
@@ -17,6 +17,8 @@
package org.apache.ignite.internal.schema;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
import java.util.Map;
import org.apache.ignite.schema.SchemaBuilders;
import org.apache.ignite.schema.definition.ColumnType;
@@ -51,8 +53,8 @@ public class SchemaConfigurationTest {
.withPrimaryKey(
SchemaBuilders.primaryKey() // Declare index column in order.
.withColumns("id", "affId", "name")
- .withAffinityColumns(
- "affId") // Optional affinity declaration. If not set, all columns will be affinity cols.
+ .withColocationColumns(
+ "affId") // Optional colocation declaration. If not set, all PK columns will be colocation cols.
.build()
)
@@ -129,4 +131,33 @@ public class SchemaConfigurationTest {
.dropIndex("hash_idx")
.apply();
}
+
+ /**
+ * TestInitialSchema.
+ * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
+ */
+ @Test
+ public void invalidColocationColumns() {
+ final TableDefinitionBuilder builder = SchemaBuilders.tableBuilder(SchemaObject.DEFAULT_DATABASE_SCHEMA_NAME, "table1");
+
+ assertThrows(
+ IllegalStateException.class,
+ () ->
+ SchemaBuilders.primaryKey() // Declare index column in order.
+ .withColumns("id0", "id1", "id2")
+ .withColocationColumns(
+ "val")
+ .build(),
+ "Schema definition error: All colocation columns must be part of key.");
+
+ assertThrows(
+ IllegalStateException.class,
+ () ->
+ SchemaBuilders.primaryKey() // Declare index column in order.
+ .withColumns("id0", "id1", "id2")
+ .withColocationColumns(
+ "id0, id1, id0")
+ .build(),
+ "Schema definition error: Colocation columns must not be duplicated.");
+ }
}
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/builder/PrimaryKeyDefinitionDefinitionBuilderTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/builder/PrimaryKeyDefinitionDefinitionBuilderTest.java
index 09151c4..d47eb66 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/builder/PrimaryKeyDefinitionDefinitionBuilderTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/builder/PrimaryKeyDefinitionDefinitionBuilderTest.java
@@ -34,21 +34,21 @@ import org.junit.jupiter.api.Test;
public class PrimaryKeyDefinitionDefinitionBuilderTest {
/** Test primary key parameters. */
@Test
- public void testPrimaryKeyWithAffinityColumns() {
+ public void testPrimaryKeyWithColocationColumns() {
PrimaryKeyDefinitionBuilder builder = SchemaBuilders.primaryKey();
- builder.withColumns("A", "B", "C").withAffinityColumns("B").build();
+ builder.withColumns("A", "B", "C").withColocationColumns("B").build();
PrimaryKeyDefinition idx = builder.build();
assertEquals(3, idx.columns().size());
- assertEquals(1, idx.affinityColumns().size());
+ assertEquals(1, idx.colocationColumns().size());
assertTrue(idx.columns().containsAll(List.of("A", "B", "C")));
- assertTrue(idx.affinityColumns().contains("B"));
+ assertTrue(idx.colocationColumns().contains("B"));
- assertFalse(idx.affinityColumns().contains("A"));
- assertFalse(idx.affinityColumns().contains("C"));
+ assertFalse(idx.colocationColumns().contains("A"));
+ assertFalse(idx.colocationColumns().contains("C"));
}
/** Test primary key parameters. */
@@ -61,18 +61,18 @@ public class PrimaryKeyDefinitionDefinitionBuilderTest {
PrimaryKeyDefinition idx = builder.build();
assertEquals(3, idx.columns().size());
- assertEquals(3, idx.affinityColumns().size());
+ assertEquals(3, idx.colocationColumns().size());
assertTrue(idx.columns().containsAll(List.of("A", "B", "C")));
- assertTrue(idx.affinityColumns().containsAll(List.of("A", "B", "C")));
+ assertTrue(idx.colocationColumns().containsAll(List.of("A", "B", "C")));
}
/** Test primary key parameters. */
@Test
- public void testPrimaryKeyWrongAffinityColumn() {
+ public void testPrimaryKeyWrongColocationColumn() {
PrimaryKeyDefinitionBuilder builder = SchemaBuilders.primaryKey()
.withColumns("A", "B")
- .withAffinityColumns("C");
+ .withColocationColumns("C");
assertThrows(IllegalStateException.class, builder::build);
}
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverterTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverterTest.java
index 0d46a52..0c6353f 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverterTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverterTest.java
@@ -252,7 +252,7 @@ public class SchemaConfigurationConverterTest {
assertEquals(tbl.canonicalName(), tbl2.canonicalName());
assertEquals(tbl.indices().size(), tbl2.indices().size());
assertEquals(tbl.keyColumns().size(), tbl2.keyColumns().size());
- assertEquals(tbl.affinityColumns().size(), tbl2.affinityColumns().size());
+ assertEquals(tbl.colocationColumns().size(), tbl2.colocationColumns().size());
assertEquals(tbl.columns().size(), tbl2.columns().size());
}
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaDescriptorConverterTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaDescriptorConverterTest.java
index 5f95454..7aad67b 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaDescriptorConverterTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaDescriptorConverterTest.java
@@ -57,7 +57,7 @@ public class SchemaDescriptorConverterTest {
SchemaDescriptor tblDscr = SchemaDescriptorConverter.convert(1, tblSchm);
assertEquals(2, tblDscr.keyColumns().length());
- assertEquals(2, tblDscr.affinityColumns().length);
+ assertEquals(2, tblDscr.colocationColumns().length);
assertEquals(columns - 2, tblDscr.valueColumns().length());
}
@@ -70,14 +70,14 @@ public class SchemaDescriptorConverterTest {
TableDefinition tblSchm = bldr.withPrimaryKey(
SchemaBuilders.primaryKey()
.withColumns("INT8", "ID")
- .withAffinityColumns("INT8")
+ .withColocationColumns("INT8")
.build()
).build();
SchemaDescriptor tblDscr = SchemaDescriptorConverter.convert(1, tblSchm);
assertEquals(2, tblDscr.keyColumns().length());
- assertEquals(1, tblDscr.affinityColumns().length);
+ assertEquals(1, tblDscr.colocationColumns().length);
assertEquals(columns - 2, tblDscr.valueColumns().length());
}
@@ -118,7 +118,7 @@ public class SchemaDescriptorConverterTest {
.withPrimaryKey(
SchemaBuilders.primaryKey()
.withColumns("INT32", "ID")
- .withAffinityColumns("INT32")
+ .withColocationColumns("INT32")
.build()
).build();
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/TableValidatorImplTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/TableValidatorImplTest.java
index 07522d5..0b7923f 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/TableValidatorImplTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/TableValidatorImplTest.java
@@ -64,7 +64,7 @@ public class TableValidatorImplTest {
value = "mock.tables.table {\n"
+ " name = schema.table,\n"
+ " columns.id {name = id, type.type = STRING, nullable = true},\n"
- + " primaryKey {columns = [id], affinityColumns = [id]},\n"
+ + " primaryKey {columns = [id], colocationColumns = [id]},\n"
+ " indices.foo {type = HASH, name = foo, colNames = [id]}"
+ "}",
polymorphicExtensions = {
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/serializer/AbstractSerializerTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/serializer/AbstractSerializerTest.java
index 0e0c51f..d740736 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/serializer/AbstractSerializerTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/serializer/AbstractSerializerTest.java
@@ -77,7 +77,7 @@ public class AbstractSerializerTest {
assertArrayEquals(desc.keyColumns().columns(), deserialize.keyColumns().columns());
assertArrayEquals(desc.valueColumns().columns(), deserialize.valueColumns().columns());
- assertArrayEquals(desc.affinityColumns(), deserialize.affinityColumns());
+ assertArrayEquals(desc.colocationColumns(), deserialize.colocationColumns());
}
/**
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 5549df2..68bd9c1 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
@@ -109,7 +109,7 @@ public class DdlCommandHandler {
final PrimaryKeyDefinitionBuilder pkeyDef = SchemaBuilders.primaryKey();
pkeyDef.withColumns(IgniteObjectName.quoteNames(cmd.primaryKeyColumns()));
- pkeyDef.withAffinityColumns(IgniteObjectName.quoteNames(cmd.affColumns()));
+ pkeyDef.withColocationColumns(IgniteObjectName.quoteNames(cmd.affColumns()));
final IgniteTypeFactory typeFactory = Commons.typeFactory();