You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2021/08/27 11:15:50 UTC

[ignite-3] branch ignite-15382 created (now 6d63b68)

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

amashenkov pushed a change to branch ignite-15382
in repository https://gitbox.apache.org/repos/asf/ignite-3.git.


      at 6d63b68  Move SchemaBuilders to ignite-api.

This branch includes the following new commits:

     new 6dd6b4e  Move TupleImpl to table module.
     new 6d63b68  Move SchemaBuilders to ignite-api.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[ignite-3] 02/02: Move SchemaBuilders to ignite-api.

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-15382
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 6d63b682f10287a4b462e8adb251c9dbe344b347
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Fri Aug 27 14:15:37 2021 +0300

    Move SchemaBuilders to ignite-api.
---
 .../org/apache/ignite/schema/SchemaBuilders.java   | 94 ++++++++++++++++++----
 modules/schema/pom.xml                             |  9 +++
 .../schema/builder/SchemaBuilderFactoryImpl.java   | 71 ++++++++++++++++
 ...nite.schema.SchemaBuilders$SchemaBuilderFactory |  1 +
 4 files changed, 160 insertions(+), 15 deletions(-)

diff --git a/modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java b/modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
similarity index 53%
rename from modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
rename to modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
index fa806c0..de90628 100644
--- a/modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
+++ b/modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
@@ -17,12 +17,8 @@
 
 package org.apache.ignite.schema;
 
-import org.apache.ignite.internal.schema.builder.HashIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.PartialIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.PrimaryKeyBuilderImpl;
-import org.apache.ignite.internal.schema.builder.SchemaTableBuilderImpl;
-import org.apache.ignite.internal.schema.builder.SortedIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.TableColumnBuilderImpl;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
 import org.apache.ignite.schema.builder.HashIndexBuilder;
 import org.apache.ignite.schema.builder.PartialIndexBuilder;
 import org.apache.ignite.schema.builder.PrimaryIndexBuilder;
@@ -34,6 +30,11 @@ import org.apache.ignite.schema.builder.TableColumnBuilder;
  * Schema builder helper.
  */
 public final class SchemaBuilders {
+    /** Default factory. */
+    private static SchemaBuilderFactory FACTORY = ServiceLoader.load(SchemaBuilderFactory.class)
+                                       .findFirst()
+                                       .orElseThrow(() -> new ServiceConfigurationError("Failed to locate SchemaBuilderFactory."));
+
     /**
      * Create table descriptor from classes.
      *
@@ -44,9 +45,7 @@ public final class SchemaBuilders {
      * @return Table descriptor for given key-value pair.
      */
     public static SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass) {
-        // TODO IGNITE-13749: implement schema generation from classes.
-
-        return null;
+        return FACTORY.buildSchema(schemaName, tableName, keyClass, valueClass);
     }
 
     /**
@@ -57,7 +56,7 @@ public final class SchemaBuilders {
      * @return Table descriptor builder.
      */
     public static SchemaTableBuilder tableBuilder(String schemaName, String tableName) {
-        return new SchemaTableBuilderImpl(schemaName, tableName);
+        return FACTORY.tableBuilder(schemaName, tableName);
     }
 
     /**
@@ -68,7 +67,7 @@ public final class SchemaBuilders {
      * @return Column builder.
      */
     public static TableColumnBuilder column(String name, ColumnType type) {
-        return new TableColumnBuilderImpl(name, type);
+        return FACTORY.column(name, type);
     }
 
     /**
@@ -77,7 +76,7 @@ public final class SchemaBuilders {
      * @return Primary index builder.
      */
     public static PrimaryIndexBuilder pkIndex() {
-        return new PrimaryKeyBuilderImpl();
+        return FACTORY.pkIndex();
     }
 
     /**
@@ -87,7 +86,7 @@ public final class SchemaBuilders {
      * @return Sorted index builder.
      */
     public static SortedIndexBuilder sortedIndex(String name) {
-        return new SortedIndexBuilderImpl(name);
+        return FACTORY.sortedIndex(name);
     }
 
     /**
@@ -97,7 +96,7 @@ public final class SchemaBuilders {
      * @return Partial index builder.
      */
     public static PartialIndexBuilder partialIndex(String name) {
-        return new PartialIndexBuilderImpl(name);
+        return FACTORY.partialIndex(name);
     }
 
     /**
@@ -107,10 +106,75 @@ public final class SchemaBuilders {
      * @return Hash index builder.
      */
     public static HashIndexBuilder hashIndex(String name) {
-        return new HashIndexBuilderImpl(name);
+        return FACTORY.hashIndex(name);
     }
 
     // Stub.
     private SchemaBuilders() {
     }
+
+    /**
+     * Schema builders factory service interface.
+     */
+    public static interface SchemaBuilderFactory {
+         /**
+         * Create table descriptor from classes.
+         *
+         * @param schemaName Schema name.
+         * @param tableName Table name.
+         * @param keyClass Key class.
+         * @param valueClass Value class.
+         * @return Table descriptor for given key-value pair.
+         */
+        SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass);
+
+        /**
+         * Creates table descriptor builder.
+         *
+         * @param schemaName Schema name.
+         * @param tableName Table name.
+         * @return Table descriptor builder.
+         */
+        SchemaTableBuilder tableBuilder(String schemaName, String tableName);
+
+        /**
+         * Creates table column builder.
+         *
+         * @param name Column name.
+         * @param type Column type.
+         * @return Column builder.
+         */
+        TableColumnBuilder column(String name, ColumnType type);
+
+        /**
+         * Creates primary index builder.
+         *
+         * @return Primary index builder.
+         */
+        PrimaryIndexBuilder pkIndex();
+
+        /**
+         * Creates sorted index builder.
+         *
+         * @param name Index name.
+         * @return Sorted index builder.
+         */
+        SortedIndexBuilder sortedIndex(String name);
+
+        /**
+         * Creates partial index builder.
+         *
+         * @param name Index name.
+         * @return Partial index builder.
+         */
+        PartialIndexBuilder partialIndex(String name);
+
+        /**
+         * Creates hash index builder.
+         *
+         * @param name Index name.
+         * @return Hash index builder.
+         */
+        HashIndexBuilder hashIndex(String name);
+    }
 }
diff --git a/modules/schema/pom.xml b/modules/schema/pom.xml
index 783b5f0..e2ece51 100644
--- a/modules/schema/pom.xml
+++ b/modules/schema/pom.xml
@@ -105,4 +105,13 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
 </project>
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java
new file mode 100644
index 0000000..e1a5ed1
--- /dev/null
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java
@@ -0,0 +1,71 @@
+/*
+ * 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.schema.builder;
+
+import org.apache.ignite.schema.ColumnType;
+import org.apache.ignite.schema.SchemaBuilders;
+import org.apache.ignite.schema.SchemaTable;
+import org.apache.ignite.schema.builder.HashIndexBuilder;
+import org.apache.ignite.schema.builder.PartialIndexBuilder;
+import org.apache.ignite.schema.builder.PrimaryIndexBuilder;
+import org.apache.ignite.schema.builder.SchemaTableBuilder;
+import org.apache.ignite.schema.builder.SortedIndexBuilder;
+import org.apache.ignite.schema.builder.TableColumnBuilder;
+
+/**
+ * Schema builders factory service implementation.
+ */
+public class SchemaBuilderFactoryImpl implements SchemaBuilders.SchemaBuilderFactory {
+
+    /** {@inheritDoc} */
+    @Override public SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass) {
+        // TODO IGNITE-13749: implement schema generation from classes.
+
+        throw new UnsupportedOperationException("Not implemented yet: IGNITE-13749");
+    }
+
+    /** {@inheritDoc} */
+    @Override public SchemaTableBuilder tableBuilder(String schemaName, String tableName) {
+        return new SchemaTableBuilderImpl(schemaName, tableName);
+    }
+
+    /** {@inheritDoc} */
+    @Override public TableColumnBuilder column(String name, ColumnType type) {
+        return new TableColumnBuilderImpl(name, type);
+    }
+
+    /** {@inheritDoc} */
+    @Override public PrimaryIndexBuilder pkIndex() {
+        return new PrimaryKeyBuilderImpl();
+    }
+
+    /** {@inheritDoc} */
+    @Override public SortedIndexBuilder sortedIndex(String name) {
+        return new SortedIndexBuilderImpl(name);
+    }
+
+    /** {@inheritDoc} */
+    @Override public PartialIndexBuilder partialIndex(String name) {
+        return new PartialIndexBuilderImpl(name);
+    }
+
+    /** {@inheritDoc} */
+    @Override public HashIndexBuilder hashIndex(String name) {
+        return new HashIndexBuilderImpl(name);
+    }
+}
diff --git a/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory b/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory
new file mode 100644
index 0000000..f04201a
--- /dev/null
+++ b/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory
@@ -0,0 +1 @@
+org.apache.ignite.internal.schema.builder.SchemaBuilderFactoryImpl
\ No newline at end of file

[ignite-3] 01/02: Move TupleImpl to table module.

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-15382
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 6dd6b4ebb6399070f08633a164cfcbd87cafe133
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Fri Aug 27 14:15:16 2021 +0300

    Move TupleImpl to table module.
---
 .../main/java/org/apache/ignite/table/Tuple.java   | 31 ++++++++++++++++++++--
 modules/table/pom.xml                              |  9 +++++++
 .../internal/table/MutableRowTupleAdapter.java     |  1 -
 .../ignite/internal/table/TupleFactoryImpl.java}   | 18 +++++++++++--
 .../apache/ignite/internal}/table/TupleImpl.java   |  3 ++-
 .../org.apache.ignite.table.Tuple$TupleFactory     |  1 +
 .../TupleMarshallerFixlenOnlyBenchmark.java        |  2 +-
 .../TupleMarshallerVarlenOnlyBenchmark.java        |  2 +-
 .../internal/table/MutableRowTupleAdapterTest.java |  1 -
 .../org/apache/ignite/table/TupleImplTest.java     |  1 +
 10 files changed, 60 insertions(+), 9 deletions(-)

diff --git a/modules/api/src/main/java/org/apache/ignite/table/Tuple.java b/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
index 5b82972..a8fedb4 100644
--- a/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
+++ b/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
@@ -22,6 +22,8 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.BitSet;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
 import java.util.UUID;
 import org.apache.ignite.binary.BinaryObject;
 import org.jetbrains.annotations.NotNull;
@@ -32,13 +34,18 @@ import org.jetbrains.annotations.NotNull;
  * Provides specialized method for some value-types to avoid boxing/unboxing.
  */
 public interface Tuple extends Iterable<Object> {
+    /** Default factory. */
+    static TupleFactory FACTORY = ServiceLoader.load(TupleFactory.class)
+                                      .findFirst()
+                                      .orElseThrow(() -> new ServiceConfigurationError("Failed to locate TupleFactory."));
+
     /**
      * Creates a tuple.
      *
      * @return Tuple.
      */
     static Tuple create() {
-        return new TupleImpl();
+        return FACTORY.create();
     }
 
     /**
@@ -48,7 +55,7 @@ public interface Tuple extends Iterable<Object> {
      * @return Tuple.
      */
     static Tuple create(int capacity) {
-        return new TupleImpl();
+        return FACTORY.create(capacity);
     }
 
     /**
@@ -365,4 +372,24 @@ public interface Tuple extends Iterable<Object> {
      * @throws IndexOutOfBoundsException If column with given index doesn't exists.
      */
     Instant timestampValue(int columnIndex);
+
+    /**
+     * Tuple factory service interface.
+     */
+    interface TupleFactory {
+        /**
+         * Creates a tuple.
+         *
+         * @return Tuple.
+         */
+        Tuple create();
+
+        /**
+         * Creates a tuple with specified initial capacity.
+         *
+         * @param capacity Initial capacity.
+         * @return Tuple.
+         */
+        Tuple create(int capacity);
+    }
 }
diff --git a/modules/table/pom.xml b/modules/table/pom.xml
index d63fa39..55d63b3 100644
--- a/modules/table/pom.xml
+++ b/modules/table/pom.xml
@@ -165,4 +165,13 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
 </project>
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/MutableRowTupleAdapter.java b/modules/table/src/main/java/org/apache/ignite/internal/table/MutableRowTupleAdapter.java
index 6c46ca5..d88f461 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/MutableRowTupleAdapter.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/MutableRowTupleAdapter.java
@@ -27,7 +27,6 @@ import java.util.UUID;
 import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.internal.schema.row.Row;
 import org.apache.ignite.table.Tuple;
-import org.apache.ignite.table.TupleImpl;
 import org.jetbrains.annotations.NotNull;
 
 /**
diff --git a/modules/schema/src/main/java/org/apache/ignite/schema/package-info.java b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleFactoryImpl.java
similarity index 66%
rename from modules/schema/src/main/java/org/apache/ignite/schema/package-info.java
rename to modules/table/src/main/java/org/apache/ignite/internal/table/TupleFactoryImpl.java
index 9e3328b..64f521c 100644
--- a/modules/schema/src/main/java/org/apache/ignite/schema/package-info.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleFactoryImpl.java
@@ -15,7 +15,21 @@
  * limitations under the License.
  */
 
+package org.apache.ignite.internal.table;
+
+import org.apache.ignite.table.Tuple;
+
 /**
- * Contains public schema definition helpers.
+ * Tuple factory service implementation.
  */
-package org.apache.ignite.schema;
+public class TupleFactoryImpl implements Tuple.TupleFactory {
+    /** {@inheritDoc} */
+    @Override public Tuple create() {
+        return new TupleImpl();
+    }
+
+    /** {@inheritDoc} */
+    @Override public Tuple create(int capacity) {
+        return new TupleImpl(capacity);
+    }
+}
diff --git a/modules/api/src/main/java/org/apache/ignite/table/TupleImpl.java b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleImpl.java
similarity index 99%
rename from modules/api/src/main/java/org/apache/ignite/table/TupleImpl.java
rename to modules/table/src/main/java/org/apache/ignite/internal/table/TupleImpl.java
index 279dd27..79a92b1 100644
--- a/modules/api/src/main/java/org/apache/ignite/table/TupleImpl.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.table;
+package org.apache.ignite.internal.table;
 
 import java.time.Instant;
 import java.time.LocalDate;
@@ -30,6 +30,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.UUID;
 import org.apache.ignite.binary.BinaryObject;
+import org.apache.ignite.table.Tuple;
 import org.jetbrains.annotations.NotNull;
 
 /**
diff --git a/modules/table/src/main/resources/META-INF/services/org.apache.ignite.table.Tuple$TupleFactory b/modules/table/src/main/resources/META-INF/services/org.apache.ignite.table.Tuple$TupleFactory
new file mode 100644
index 0000000..7a69e2b
--- /dev/null
+++ b/modules/table/src/main/resources/META-INF/services/org.apache.ignite.table.Tuple$TupleFactory
@@ -0,0 +1 @@
+org.apache.ignite.internal.table.TupleFactoryImpl
\ No newline at end of file
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerFixlenOnlyBenchmark.java b/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerFixlenOnlyBenchmark.java
index 07107cc..1c87ce9 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerFixlenOnlyBenchmark.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerFixlenOnlyBenchmark.java
@@ -30,7 +30,7 @@ import org.apache.ignite.internal.schema.registry.SchemaRegistryImpl;
 import org.apache.ignite.internal.schema.row.Row;
 import org.apache.ignite.internal.table.TupleMarshallerImpl;
 import org.apache.ignite.table.Tuple;
-import org.apache.ignite.table.TupleImpl;
+import org.apache.ignite.internal.table.TupleImpl;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerVarlenOnlyBenchmark.java b/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerVarlenOnlyBenchmark.java
index 51dc32f..800a224 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerVarlenOnlyBenchmark.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerVarlenOnlyBenchmark.java
@@ -31,7 +31,7 @@ import org.apache.ignite.internal.schema.registry.SchemaRegistryImpl;
 import org.apache.ignite.internal.schema.row.Row;
 import org.apache.ignite.internal.table.TupleMarshallerImpl;
 import org.apache.ignite.table.Tuple;
-import org.apache.ignite.table.TupleImpl;
+import org.apache.ignite.internal.table.TupleImpl;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/MutableRowTupleAdapterTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/MutableRowTupleAdapterTest.java
index 9890ea9..f753f44 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/MutableRowTupleAdapterTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/MutableRowTupleAdapterTest.java
@@ -38,7 +38,6 @@ import org.apache.ignite.internal.table.impl.DummySchemaManagerImpl;
 import org.apache.ignite.internal.testframework.IgniteTestUtils;
 import org.apache.ignite.schema.SchemaMode;
 import org.apache.ignite.table.Tuple;
-import org.apache.ignite.table.TupleImpl;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
diff --git a/modules/table/src/test/java/org/apache/ignite/table/TupleImplTest.java b/modules/table/src/test/java/org/apache/ignite/table/TupleImplTest.java
index 9841602..a80342d 100644
--- a/modules/table/src/test/java/org/apache/ignite/table/TupleImplTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/table/TupleImplTest.java
@@ -25,6 +25,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.Random;
 import java.util.UUID;
+import org.apache.ignite.internal.table.TupleImpl;
 import org.apache.ignite.internal.testframework.IgniteTestUtils;
 import org.junit.jupiter.api.Test;