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/11/02 15:37:23 UTC

[ignite-3] branch ignite-15783 updated (344b2a4 -> 651f06e)

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

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


    omit 344b2a4  Minor.
    omit 9327f33  Minor.
    omit 9936d05  Minor.
    omit 257cfd6  Implement KV view operations.
    omit 2b45cb9  Implement get/put operations.
    omit 5e20e9c  Minor.
    omit 9c0c77d  Drop useless classes.
     add c2b8000  IGNITE-15819 Prepare DEB package for Ignite 3.0 (#413)
     add ec8292a  IGNITE-15692 Implement TableManager component stop. Fixes #399
     add 0c4ec19  IGNITE-15536 Use VarHandle to replace UNSAFE in IgniteSpinReadWriteLock (#414)
     add c086555  IGNITE-15744 Fix vartable size overflow issue (#409)
     add 4792963  IGNITE-15669  Get rid of leakage of Calcite classes through SqlCursor class (#410)
     add 445f455  IGNITE-14645 Support polymorphic configuration nodes. (#366)
     add 7050546  IGNITE-15477 Network module readme. Netty thread naming improvement. (#406)
     add 0996363  IGNITE-15842 Fixed RocksDbStorageTest#testSnapshot fail on Windows platform. Fixes #417
     add 8948b40  IGNITE-15699 Rename TableSchemaBuilder. (#421)
     add 8e79100  IGNITE-14291: Implement KeyValueView API (#416)
     add 808173f  IGNITE-15754: Fix marshaller exception handling (#408)
     add 97c5197  IGNITE-15414 Schema validation refactoring with configuration validators (#360)
     new ba0d43f  Extend test coverage.
     new 651f06e  Add KV test.

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (344b2a4)
            \
             N -- N -- N   refs/heads/ignite-15783 (651f06e)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

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.


Summary of changes:
 .../deb/build.sh                                   |   24 +-
 deliveries/deb/changelog                           |    5 +
 deliveries/deb/control                             |   14 +
 deliveries/deb/copyright                           |   11 +
 deliveries/deb/rules                               |   36 +
 deliveries/rpm/apache-ignite.spec                  |    9 +-
 deliveries/rpm/build.sh                            |    4 +-
 .../src/main/java/org/apache/ignite/Ignite.java    |    9 +-
 .../schemas/table/ColumnConfigurationSchema.java   |    3 +
 .../table/ColumnTypeConfigurationSchema.java       |    9 +
 ...ableValidator.java => ColumnTypeValidator.java} |    4 +-
 .../ignite/schema/definition/ColumnType.java       |   25 +-
 ...emaBuilder.java => TableDefinitionBuilder.java} |   25 +-
 .../main/java/org/apache/ignite/table/Tuple.java   |    2 +-
 .../apache/ignite/table/manager/IgniteTables.java  |   61 +
 .../org/apache/ignite/table/mapper/Mapper.java     |   10 +-
 .../facebook/presto/bytecode/ClassGenerator.java   |   15 +-
 ...ueryProcessor.java => ResultFieldMetadata.java} |   45 +-
 .../calcite/{Stubs.java => ResultSetMetadata.java} |   17 +-
 .../processors/query/calcite/SqlCursor.java        |    5 +-
 .../query/calcite/exec/ExecutionServiceImpl.java   |   24 +-
 .../calcite/prepare/AbstractMultiStepPlan.java     |   10 +-
 .../query/calcite/prepare/ExplainPlan.java         |   12 +-
 .../query/calcite/prepare/MultiStepDmlPlan.java    |    8 +-
 .../query/calcite/prepare/MultiStepPlan.java       |    2 +-
 .../query/calcite/prepare/MultiStepQueryPlan.java  |    8 +-
 .../calcite/prepare/ResultFieldMetadataImpl.java}  |   64 +-
 .../calcite/prepare/ResultSetMetadataImpl.java     |   78 +
 ...etadata.java => ResultSetMetadataInternal.java} |   14 +-
 .../processors/query/calcite/util/Commons.java     |  111 +-
 .../processors/query/calcite/util/TypeUtils.java   |   47 +
 .../client/proto/query/event/JdbcColumnMeta.java   |   37 +-
 .../ignite/client/handler/ITClientHandlerTest.java |    1 +
 .../client/handler/JdbcQueryEventHandlerImpl.java  |   56 +-
 .../handler/requests/sql/JdbcMetadataCatalog.java  |   21 +-
 .../handler/requests/table/ClientTableCommon.java  |   13 +-
 .../ignite/internal/jdbc/JdbcDatabaseMetadata.java |  504 ++---
 .../apache/ignite/internal/jdbc/JdbcResultSet.java |    2 +-
 .../internal/jdbc/JdbcResultSetMetadata.java       |    3 +-
 .../apache/ignite/client/AbstractClientTest.java   |    1 +
 .../org/apache/ignite/client/fakes/FakeCursor.java |    7 +-
 .../ignite/client/fakes/FakeInternalTable.java     |   17 +-
 .../configuration/processor/ITProcessorTest.java   |  113 +-
 .../ErrorPolymorphic0ConfigurationSchema.java}     |   12 +-
 .../ErrorPolymorphic1ConfigurationSchema.java}     |   10 +-
 .../ErrorPolymorphic2ConfigurationSchema.java}     |   10 +-
 .../ErrorPolymorphic3ConfigurationSchema.java}     |   22 +-
 .../ErrorPolymorphic4ConfigurationSchema.java}     |   11 +-
 .../ErrorPolymorphic5ConfigurationSchema.java}     |   18 +-
 .../ErrorPolymorphic6ConfigurationSchema.java}     |   23 +-
 .../ErrorPolymorphic7ConfigurationSchema.java}     |   25 +-
 .../ErrorPolymorphic8ConfigurationSchema.java}     |   23 +-
 ...orPolymorphicInstance0ConfigurationSchema.java} |   12 +-
 ...orPolymorphicInstance1ConfigurationSchema.java} |   10 +-
 ...orPolymorphicInstance2ConfigurationSchema.java} |   10 +-
 ...orPolymorphicInstance3ConfigurationSchema.java} |   10 +-
 ...orPolymorphicInstance4ConfigurationSchema.java} |   25 +-
 ...orPolymorphicInstance5ConfigurationSchema.java} |   14 +-
 ...orPolymorphicInstance6ConfigurationSchema.java} |   24 +-
 .../SimpleConfigurationSchema.java                 |   13 +-
 .../SimplePolymorphicConfigurationSchema.java}     |   15 +-
 ...plePolymorphicInstanceConfigurationSchema.java} |   19 +-
 .../SimpleRootConfigurationSchema.java             |   15 +-
 .../configuration/processor/Processor.java         |  595 ++++--
 .../internal/configuration/processor/Utils.java    |   26 +
 .../configuration/processor/UtilsTest.java}        |   30 +-
 ...on.java => ConfigurationReadOnlyException.java} |    6 +-
 ...figurationWrongPolymorphicTypeIdException.java} |    6 +-
 .../ignite/configuration/NamedListChange.java      |   18 +-
 .../apache/ignite/configuration/NamedListView.java |    8 +-
 ...enOnlyException.java => PolymorphicChange.java} |   16 +-
 ...nfigurationRoot.java => PolymorphicConfig.java} |   24 +-
 ...ionRoot.java => PolymorphicConfigInstance.java} |   21 +-
 .../{ConfigValue.java => PolymorphicId.java}       |   22 +-
 .../configuration/ConfigurationChanger.java        |   21 +-
 .../configuration/ConfigurationManager.java        |   14 +-
 .../internal/configuration/ConfigurationNode.java  |    6 +-
 .../configuration/ConfigurationRegistry.java       |  143 +-
 .../configuration/ConfigurationTreeWrapper.java    |   68 +
 .../DirectConfigurationTreeWrapper.java}           |   27 +-
 .../configuration/DirectDynamicProperty.java       |    6 +-
 .../configuration/DynamicConfiguration.java        |   96 +-
 .../internal/configuration/DynamicProperty.java    |   13 +-
 .../configuration/NamedListConfiguration.java      |   15 +-
 .../asm/ConfigurationAsmGenerator.java             | 2237 ++++++++++++++++----
 .../hocon/HoconObjectConfigurationSource.java      |    6 +
 .../configuration/tree/ConfigurationSource.java    |   16 +-
 .../configuration/tree/ConstructableTreeNode.java  |    4 +-
 .../configuration/tree/ConverterToMapVisitor.java  |    2 +-
 .../internal/configuration/tree/InnerNode.java     |   15 +-
 .../internal/configuration/tree/NamedListNode.java |  164 +-
 .../configuration/util/ConfigurationFlattener.java |   32 +-
 .../util/ConfigurationNotificationsUtil.java       |   20 +-
 .../configuration/util/ConfigurationUtil.java      |  700 +++---
 .../util/KeysTrackingConfigurationVisitor.java     |    5 +-
 .../util/WrongPolymorphicTypeIdException.java}     |   11 +-
 .../configuration/ConfigurationChangerTest.java    |    3 +-
 .../configuration/ConfigurationRegistryTest.java   |  161 +-
 .../configuration/DirectPropertiesTest.java        |    6 +-
 .../configuration/TestConfigurationChanger.java    |   12 +-
 .../asm/ConfigurationAsmGeneratorTest.java         |  358 +++-
 .../configuration/hocon/HoconConverterTest.java    |   78 +-
 .../ConfigurationAnyListenerTest.java              |    1 +
 .../notifications/ConfigurationListenerTest.java   |    1 +
 .../internal/configuration/sample/UsageTest.java   |    2 +
 .../testframework/ConfigurationExtension.java      |    9 +-
 .../testframework/ConfigurationExtensionTest.java  |    2 +-
 .../testframework/InjectConfiguration.java         |   12 +-
 .../configuration/tree/ConfigurationArrayTest.java |    2 +-
 .../tree/ConstructableTreeNodeTest.java            |    2 +-
 .../configuration/tree/NamedListNodeTest.java      |   12 +-
 .../tree/TraversableTreeNodeTest.java              |    2 +-
 .../configuration/util/ConfigurationUtilTest.java  |  434 +++-
 .../validation/ValidationUtilTest.java             |    2 +-
 .../apache/ignite/internal/manager/Producer.java   |    2 +-
 .../ignite/internal/util/CollectionUtils.java      |  185 +-
 .../internal/util/IgniteSpinReadWriteLock.java     |  373 ++--
 .../apache/ignite/internal/util/IgniteUtils.java   |   94 +-
 .../ignite/internal/util/CollectionUtilsTest.java  |   42 +-
 .../internal/util/IgniteSpinReadWriteLockTest.java |  526 +++++
 .../client/ITMetaStorageServiceTest.java           |    1 +
 .../server/persistence/RocksDBKeyValueStorage.java |    2 +-
 .../internal/metastorage/MetaStorageManager.java   |   11 +-
 modules/network/README.md                          |   48 +
 modules/network/docs/network-flow.png              |  Bin 0 -> 67254 bytes
 modules/network/docs/network-flow.puml             |   72 +
 modules/network/docs/threading-2.png               |  Bin 0 -> 45474 bytes
 .../docs/threading-2.puml}                         |   54 +-
 modules/network/docs/threading.png                 |  Bin 0 -> 32334 bytes
 .../network/docs/threading.puml                    |   34 +-
 .../ignite/utils/ClusterServiceTestUtils.java      |    1 +
 .../internal/network/netty/ConnectionManager.java  |    5 +-
 .../network/netty/NamedNioEventLoopGroup.java      |   57 +
 .../ignite/internal/network/netty/NettyServer.java |   29 +-
 .../scalecube/ScaleCubeClusterServiceFactory.java  |    1 -
 .../scalecube/ScaleCubeMessagingService.java       |    2 +-
 .../internal/network/netty/NettyServerTest.java    |    2 +
 .../apache/ignite/internal/raft/ITLozaTest.java    |   19 +-
 .../service/ITAbstractListenerSnapshotTest.java    |   10 +-
 .../raft/server/ITJRaftCounterServerTest.java      |   22 +
 .../raft/server/ITSimpleCounterServerTest.java     |   16 +-
 .../java/org/apache/ignite/internal/raft/Loza.java |  111 +-
 .../ignite/internal/raft/server/RaftServer.java    |    5 +-
 .../internal/raft/server/impl/JRaftServerImpl.java |    4 +-
 .../org/apache/ignite/raft/jraft/util/Utils.java   |   52 +-
 .../internal/raft/server/impl/RaftServerImpl.java  |    3 +
 .../ConfigurationPresentationTest.java             |    1 +
 .../ignite/internal/calcite/util/QueryChecker.java |   15 +-
 .../ITDistributedConfigurationPropertiesTest.java  |    2 +
 .../ITDistributedConfigurationStorageTest.java     |    1 +
 .../runner/app/AbstractSchemaChangeTest.java       |  130 +-
 .../runner/app/ITDynamicTableCreationTest.java     |  147 +-
 .../runner/app/ITLiveSchemaChangeKVViewTest.java   |    7 +-
 .../runner/app/ITLiveSchemaChangeTableTest.java    |    9 +-
 .../internal/runner/app/ITNoThreadsLeftTest.java   |  135 ++
 .../runner/app/ITSchemaChangeKVViewTest.java       |   12 +-
 .../runner/app/ITSchemaChangeTableViewTest.java    |   14 +-
 .../internal/runner/app/ITTablesApiTest.java       |    9 +-
 .../runner/app/jdbc/ITJdbcMetadataSelfTest.java    |    2 +-
 .../org/apache/ignite/internal/app/IgniteImpl.java |   24 +-
 .../apache/ignite/internal/schema/NativeTypes.java |   81 +-
 .../apache/ignite/internal/schema/SchemaUtils.java |   20 +-
 .../ignite/internal/schema/TemporalNativeType.java |    2 +-
 .../configuration/ColumnTypeValidatorImpl.java     |   61 +
 .../SchemaConfigurationConverter.java              |    2 +-
 .../configuration/SchemaDescriptorConverter.java   |    2 +-
 .../schema/configuration/TableValidatorImpl.java   |    4 +-
 ...erImpl.java => TableDefinitionBuilderImpl.java} |   20 +-
 .../schema/marshaller/AbstractSerializer.java      |   71 +-
 .../internal/schema/marshaller/BinaryMode.java     |   18 +-
 .../internal/schema/marshaller/MarshallerUtil.java |   17 +-
 .../internal/schema/marshaller/Serializer.java     |   24 +-
 .../marshaller/asm/AsmSerializerGenerator.java     |   54 +-
 .../marshaller/reflection/FieldAccessor.java       |   52 +
 .../marshaller/reflection/JavaSerializer.java      |   65 +-
 .../ignite/internal/schema/row/RowAssembler.java   |   71 +-
 .../ignite/internal/schema/row/VarTableFormat.java |   53 +-
 .../org/apache/ignite/schema/SchemaBuilders.java   |    8 +-
 .../benchmarks/SerializerBenchmarkTest.java        |    8 +-
 .../ignite/internal/schema/NativeTypeTest.java     |    6 +-
 .../org/apache/ignite/internal/schema/RowTest.java |   67 +-
 .../internal/schema/SchemaConfigurationTest.java   |    4 +-
 .../{TestUtils.java => SchemaTestUtils.java}       |    4 +-
 .../schema/builder/TableDefinitionBuilderTest.java |    4 +-
 .../SchemaConfigurationConverterTest.java          |    5 +-
 .../SchemaDescriptorConverterTest.java             |   10 +-
 .../schema/marshaller/JavaSerializerTest.java      |   44 +-
 .../marshaller/reflection/FieldAccessorTest.java   |    6 +-
 .../schema/registry/UpgradingRowAdapterTest.java   |    6 +-
 .../storage/AbstractPartitionStorageTest.java      |    9 +-
 .../storage/rocksdb/RocksDbPartitionStorage.java   |    3 +-
 .../storage/rocksdb/RocksDbTableStorage.java       |    4 +-
 modules/table/pom.xml                              |    7 +
 .../ignite/distributed/ITDistributedTableTest.java |   42 +-
 .../distributed/ITInternalTableScanTest.java       |   15 +-
 .../ignite/distributed/ITTablePersistenceTest.java |   12 +-
 .../internal/schema/marshaller/KVMarshaller.java   |   26 +-
 .../schema/marshaller/TupleMarshaller.java         |   10 +-
 .../marshaller/TupleMarshallerException.java}      |   22 +-
 .../marshaller}/TupleMarshallerImpl.java           |  125 +-
 .../ignite/internal/table/AbstractTableView.java   |   21 +-
 .../internal/table/IgniteTablesInternal.java       |    7 +-
 .../ignite/internal/table/InternalTable.java       |   18 +-
 .../internal/table/KeyValueBinaryViewImpl.java     |   91 +-
 .../ignite/internal/table/KeyValueViewImpl.java    |   51 +-
 .../internal/table/RecordBinaryViewImpl.java       |   85 +-
 .../apache/ignite/internal/table/TableImpl.java    |   12 -
 .../internal/table/distributed/TableManager.java   |  633 ++++--
 .../distributed/storage/InternalTableImpl.java     |   30 +-
 .../TupleMarshallerFixlenOnlyBenchmark.java        |    5 +-
 .../TupleMarshallerVarlenOnlyBenchmark.java        |    5 +-
 ...=> KeyValueViewOperationsSimpleSchemaTest.java} |  116 +-
 .../internal/table/KeyValueViewOperationsTest.java |  572 +++++
 .../internal/table/MutableRowTupleAdapterTest.java |   29 +-
 .../table/RecordBinaryViewOperationsTest.java      |   32 +-
 .../internal/table/StrictSchemaOperationsTest.java |   40 +-
 .../ignite/internal/table/TableManagerTest.java    |  269 ++-
 .../table/impl/DummyInternalTableImpl.java         |   17 +-
 .../table/type/NumericTypesSerializerTest.java     |   31 +-
 parent/pom.xml                                     |   10 +
 220 files changed, 9355 insertions(+), 3373 deletions(-)
 copy check-rules/maven-check-scripts/CheckModulesInRootPomAreSorted.sh => deliveries/deb/build.sh (72%)
 create mode 100644 deliveries/deb/changelog
 create mode 100644 deliveries/deb/control
 create mode 100644 deliveries/deb/copyright
 create mode 100644 deliveries/deb/rules
 copy modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/{TableValidator.java => ColumnTypeValidator.java} (89%)
 rename modules/api/src/main/java/org/apache/ignite/schema/definition/builder/{TableSchemaBuilder.java => TableDefinitionBuilder.java} (71%)
 copy modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/{QueryProcessor.java => ResultFieldMetadata.java} (51%)
 copy modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/{Stubs.java => ResultSetMetadata.java} (82%)
 copy modules/{schema/src/main/java/org/apache/ignite/internal/schema/definition/ColumnDefinitionImpl.java => calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ResultFieldMetadataImpl.java} (52%)
 create mode 100644 modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ResultSetMetadataImpl.java
 copy modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/{FieldsMetadata.java => ResultSetMetadataInternal.java} (81%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/ErrorInternal2ConfigurationSchema.java => polymorphic/ErrorPolymorphic0ConfigurationSchema.java} (71%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/ErrorInternal0ConfigurationSchema.java => polymorphic/ErrorPolymorphic1ConfigurationSchema.java} (75%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/ErrorInternal0ConfigurationSchema.java => polymorphic/ErrorPolymorphic2ConfigurationSchema.java} (75%)
 copy modules/{api/src/main/java/org/apache/ignite/schema/definition/index/PartialIndexDefinition.java => configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/polymorphic/ErrorPolymorphic3ConfigurationSchema.java} (66%)
 copy modules/{raft/src/test/java/org/apache/ignite/raft/jraft/rpc/TestMessageGroup.java => configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/polymorphic/ErrorPolymorphic4ConfigurationSchema.java} (73%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/SimpleConfigurationSchema.java => polymorphic/ErrorPolymorphic5ConfigurationSchema.java} (69%)
 copy modules/{api/src/main/java/org/apache/ignite/schema/definition/index/SortedIndexDefinition.java => configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/polymorphic/ErrorPolymorphic6ConfigurationSchema.java} (63%)
 copy modules/{api/src/main/java/org/apache/ignite/schema/definition/index/SortedIndexDefinition.java => configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/polymorphic/ErrorPolymorphic7ConfigurationSchema.java} (59%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/SimpleConfigurationSchema.java => polymorphic/ErrorPolymorphic8ConfigurationSchema.java} (62%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/ErrorInternal2ConfigurationSchema.java => polymorphic/ErrorPolymorphicInstance0ConfigurationSchema.java} (70%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/ErrorInternal0ConfigurationSchema.java => polymorphic/ErrorPolymorphicInstance1ConfigurationSchema.java} (73%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/ErrorInternal0ConfigurationSchema.java => polymorphic/ErrorPolymorphicInstance2ConfigurationSchema.java} (73%)
 copy modules/{api/src/main/java/org/apache/ignite/table/InvokeProcessorException.java => configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/polymorphic/ErrorPolymorphicInstance3ConfigurationSchema.java} (71%)
 copy modules/{runner/src/integrationTest/java/org/apache/ignite/internal/ITUtils.java => configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/polymorphic/ErrorPolymorphicInstance4ConfigurationSchema.java} (65%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/ErrorInternal5ConfigurationSchema.java => polymorphic/ErrorPolymorphicInstance5ConfigurationSchema.java} (61%)
 copy modules/{api/src/main/java/org/apache/ignite/configuration/schemas/table/IndexColumnConfigurationSchema.java => configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/polymorphic/ErrorPolymorphicInstance6ConfigurationSchema.java} (60%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal => polymorphic}/SimpleConfigurationSchema.java (74%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/ErrorInternal5ConfigurationSchema.java => polymorphic/SimplePolymorphicConfigurationSchema.java} (70%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal/SimpleConfigurationSchema.java => polymorphic/SimplePolymorphicInstanceConfigurationSchema.java} (69%)
 copy modules/configuration-annotation-processor/src/integrationTest/resources/org/apache/ignite/internal/configuration/processor/{internal => polymorphic}/SimpleRootConfigurationSchema.java (74%)
 copy modules/configuration-annotation-processor/src/{integrationTest/resources/org/apache/ignite/internal/configuration/processor/internal/ErrorInternal4ConfigurationSchema.java => test/java/org/apache/ignite/internal/configuration/processor/UtilsTest.java} (51%)
 copy modules/configuration-api/src/main/java/org/apache/ignite/configuration/{ConfigurationListenOnlyException.java => ConfigurationReadOnlyException.java} (80%)
 copy modules/configuration-api/src/main/java/org/apache/ignite/configuration/{ConfigurationListenOnlyException.java => ConfigurationWrongPolymorphicTypeIdException.java} (80%)
 copy modules/configuration-api/src/main/java/org/apache/ignite/configuration/{ConfigurationListenOnlyException.java => PolymorphicChange.java} (68%)
 copy modules/configuration-api/src/main/java/org/apache/ignite/configuration/annotation/{ConfigurationRoot.java => PolymorphicConfig.java} (69%)
 copy modules/configuration-api/src/main/java/org/apache/ignite/configuration/annotation/{ConfigurationRoot.java => PolymorphicConfigInstance.java} (67%)
 copy modules/configuration-api/src/main/java/org/apache/ignite/configuration/annotation/{ConfigValue.java => PolymorphicId.java} (65%)
 create mode 100644 modules/configuration/src/main/java/org/apache/ignite/internal/configuration/ConfigurationTreeWrapper.java
 copy modules/{configuration-api/src/main/java/org/apache/ignite/configuration/ConfigurationTree.java => configuration/src/main/java/org/apache/ignite/internal/configuration/DirectConfigurationTreeWrapper.java} (53%)
 copy modules/{configuration-api/src/main/java/org/apache/ignite/configuration/ConfigurationListenOnlyException.java => configuration/src/main/java/org/apache/ignite/internal/configuration/util/WrongPolymorphicTypeIdException.java} (71%)
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/util/IgniteSpinReadWriteLockTest.java
 create mode 100644 modules/network/docs/network-flow.png
 create mode 100644 modules/network/docs/network-flow.puml
 create mode 100644 modules/network/docs/threading-2.png
 copy modules/{platforms/dotnet/Apache.Ignite.Tests/Apache.Ignite.Tests.csproj => network/docs/threading-2.puml} (50%)
 create mode 100644 modules/network/docs/threading.png
 copy docs/_includes/section-toc.html => modules/network/docs/threading.puml (56%)
 create mode 100644 modules/network/src/main/java/org/apache/ignite/internal/network/netty/NamedNioEventLoopGroup.java
 create mode 100644 modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITNoThreadsLeftTest.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/ColumnTypeValidatorImpl.java
 rename modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/builder/{TableSchemaBuilderImpl.java => TableDefinitionBuilderImpl.java} (87%)
 rename modules/schema/src/test/java/org/apache/ignite/internal/schema/{TestUtils.java => SchemaTestUtils.java} (98%)
 copy modules/{schema/src/main/java/org/apache/ignite/internal/schema/marshaller/SerializationException.java => table/src/main/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerException.java} (70%)
 rename modules/table/src/main/java/org/apache/ignite/internal/{table => schema/marshaller}/TupleMarshallerImpl.java (74%)
 rename modules/table/src/test/java/org/apache/ignite/internal/table/{KeyValueOperationsTest.java => KeyValueViewOperationsSimpleSchemaTest.java} (64%)
 create mode 100644 modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueViewOperationsTest.java

[ignite-3] 02/02: Add KV test.

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

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

commit 651f06ed518bd522248a988a106ea9fded8af79a
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Tue Nov 2 18:36:59 2021 +0300

    Add KV test.
---
 .../internal/table/KeyValueViewOperationsTest.java | 572 +++++++++++++++++++++
 1 file changed, 572 insertions(+)

diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueViewOperationsTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueViewOperationsTest.java
new file mode 100644
index 0000000..ad7fdbf
--- /dev/null
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueViewOperationsTest.java
@@ -0,0 +1,572 @@
+/*
+ * 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.table;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.Random;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Collectors;
+import org.apache.ignite.internal.schema.Column;
+import org.apache.ignite.internal.schema.NativeTypeSpec;
+import org.apache.ignite.internal.schema.NativeTypes;
+import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.SchemaTestUtils;
+import org.apache.ignite.internal.table.impl.DummyInternalTableImpl;
+import org.apache.ignite.internal.table.impl.DummySchemaManagerImpl;
+import org.apache.ignite.internal.testframework.IgniteTestUtils;
+import org.apache.ignite.table.KeyValueView;
+import org.apache.ignite.table.mapper.Mapper;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.ignite.internal.schema.NativeTypes.BYTES;
+import static org.apache.ignite.internal.schema.NativeTypes.DATE;
+import static org.apache.ignite.internal.schema.NativeTypes.DOUBLE;
+import static org.apache.ignite.internal.schema.NativeTypes.FLOAT;
+import static org.apache.ignite.internal.schema.NativeTypes.INT16;
+import static org.apache.ignite.internal.schema.NativeTypes.INT32;
+import static org.apache.ignite.internal.schema.NativeTypes.INT64;
+import static org.apache.ignite.internal.schema.NativeTypes.INT8;
+import static org.apache.ignite.internal.schema.NativeTypes.STRING;
+import static org.apache.ignite.internal.schema.NativeTypes.datetime;
+import static org.apache.ignite.internal.schema.NativeTypes.time;
+import static org.apache.ignite.internal.schema.NativeTypes.timestamp;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Basic table operations test.
+ * <p>
+ * TODO: IGNITE-14487 Add bulk operations tests.
+ * TODO: IGNITE-14487 Add async operations tests.
+ */
+public class KeyValueViewOperationsTest {
+
+    private final Random rnd = new Random();
+
+    /**
+     *
+     */
+    @Test
+    public void put() {
+        TestKeyObject key = TestKeyObject.randomObject(rnd);
+        TestValueObject obj = TestValueObject.randomObject(rnd);
+        TestValueObject obj2 = TestValueObject.randomObject(rnd);
+        TestValueObject obj3 = TestValueObject.randomObject(rnd);
+
+        KeyValueView<TestKeyObject, TestValueObject> tbl = kvView();
+
+        assertNull(tbl.get(key));
+
+        // Put KV pair.
+        tbl.put(key, obj);
+
+        assertEquals(obj, tbl.get(key));
+        assertEquals(obj, tbl.get(key));
+
+        // Update KV pair.
+        tbl.put(key, obj2);
+
+        assertEquals(obj2, tbl.get(key));
+        assertEquals(obj2, tbl.get(key));
+
+        // Remove KV pair.
+        tbl.put(key, null);
+
+        assertNull(tbl.get(key));
+
+        // Put KV pair.
+        tbl.put(key, obj3);
+        assertEquals(obj3, tbl.get(key));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void putIfAbsent() {
+        TestKeyObject key = TestKeyObject.randomObject(rnd);
+        TestValueObject obj = TestValueObject.randomObject(rnd);
+        TestValueObject obj2 = TestValueObject.randomObject(rnd);
+
+        KeyValueView<TestKeyObject, TestValueObject> tbl = kvView();
+
+        assertNull(tbl.get(key));
+
+        // Insert new KV pair.
+        assertTrue(tbl.putIfAbsent(key, obj));
+
+        assertEquals(obj, tbl.get(key));
+
+        // Update KV pair.
+        assertFalse(tbl.putIfAbsent(key, obj2));
+
+        assertEquals(obj, tbl.get(key));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void getAndPut() {
+        TestKeyObject key = TestKeyObject.randomObject(rnd);
+        TestValueObject obj = TestValueObject.randomObject(rnd);
+        TestValueObject obj2 = TestValueObject.randomObject(rnd);
+        TestValueObject obj3 = TestValueObject.randomObject(rnd);
+
+        KeyValueView<TestKeyObject, TestValueObject> tbl = kvView();
+
+        assertNull(tbl.get(key));
+
+        // Insert new tuple.
+        assertNull(tbl.getAndPut(key, obj));
+
+        assertEquals(obj, tbl.get(key));
+
+        assertEquals(obj, tbl.getAndPut(key, obj2));
+        assertEquals(obj2, tbl.getAndPut(key, obj3));
+
+        assertEquals(obj3, tbl.get(key));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void contains() {
+        TestKeyObject key = TestKeyObject.randomObject(rnd);
+        TestKeyObject key2 = TestKeyObject.randomObject(rnd);
+        TestValueObject obj = TestValueObject.randomObject(rnd);
+        TestValueObject obj2 = TestValueObject.randomObject(rnd);
+
+        KeyValueView<TestKeyObject, TestValueObject> tbl = kvView();
+
+        // Not-existed value.
+        assertFalse(tbl.contains(key));
+
+        // Put KV pair.
+        tbl.put(key, obj);
+        assertTrue(tbl.contains(key));
+
+        // Delete key.
+        assertTrue(tbl.remove(key));
+        assertFalse(tbl.contains(key));
+
+        // Put KV pair.
+        tbl.put(key, obj2);
+        assertTrue(tbl.contains(key));
+
+        // Delete key.
+        tbl.remove(key2);
+        assertFalse(tbl.contains(key2));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void remove() {
+        TestKeyObject key = TestKeyObject.randomObject(rnd);
+        TestKeyObject key2 = TestKeyObject.randomObject(rnd);
+        TestValueObject obj = TestValueObject.randomObject(rnd);
+        TestValueObject obj2 = TestValueObject.randomObject(rnd);
+
+        KeyValueView<TestKeyObject, TestValueObject> tbl = kvView();
+
+        // Put KV pair.
+        tbl.put(key, obj);
+
+        // Delete existed key.
+        assertEquals(obj, tbl.get(key));
+        assertTrue(tbl.remove(key));
+        assertNull(tbl.get(key));
+
+        // Delete already deleted key.
+        assertFalse(tbl.remove(key));
+
+        // Put KV pair.
+        tbl.put(key, obj2);
+        assertEquals(obj2, tbl.get(key));
+
+        // Delete existed key.
+        assertTrue(tbl.remove(key));
+        assertNull(tbl.get(key));
+
+        // Delete not existed key.
+        assertNull(tbl.get(key2));
+        assertFalse(tbl.remove(key2));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void removeExact() {
+        TestKeyObject key = TestKeyObject.randomObject(rnd);
+        TestKeyObject key2 = TestKeyObject.randomObject(rnd);
+        TestValueObject obj = TestValueObject.randomObject(rnd);
+        TestValueObject obj2 = TestValueObject.randomObject(rnd);
+
+        KeyValueView<TestKeyObject, TestValueObject> tbl = kvView();
+
+        // Put KV pair.
+        tbl.put(key, obj);
+        assertEquals(obj, tbl.get(key));
+
+        // Fails to delete KV pair with unexpected value.
+        assertFalse(tbl.remove(key, obj2));
+        assertEquals(obj, tbl.get(key));
+
+        // Delete KV pair with expected value.
+        assertTrue(tbl.remove(key, obj));
+        assertNull(tbl.get(key));
+
+        // Once again.
+        assertFalse(tbl.remove(key, obj));
+        assertNull(tbl.get(key));
+
+        // Try to remove non-existed key.
+        assertFalse(tbl.remove(key, obj));
+        assertNull(tbl.get(key));
+
+        // Put KV pair.
+        tbl.put(key, obj2);
+        assertEquals(obj2, tbl.get(key));
+
+        // Check null value ignored.
+        assertThrows(Throwable.class, () -> tbl.remove(key, null));
+        assertEquals(obj2, tbl.get(key));
+
+        // Delete KV pair with expected value.
+        assertTrue(tbl.remove(key, obj2));
+        assertNull(tbl.get(key));
+
+        assertFalse(tbl.remove(key2, obj2));
+        assertNull(tbl.get(key2));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void replace() {
+        TestKeyObject key = TestKeyObject.randomObject(rnd);
+        TestKeyObject key2 = TestKeyObject.randomObject(rnd);
+        TestValueObject obj = TestValueObject.randomObject(rnd);
+        TestValueObject obj2 = TestValueObject.randomObject(rnd);
+        TestValueObject obj3 = TestValueObject.randomObject(rnd);
+
+        KeyValueView<TestKeyObject, TestValueObject> tbl = kvView();
+
+        // Ignore replace operation for non-existed KV pair.
+        assertFalse(tbl.replace(key, obj));
+        assertNull(tbl.get(key));
+
+        tbl.put(key, obj);
+
+        // Replace existed KV pair.
+        assertTrue(tbl.replace(key, obj2));
+        assertEquals(obj2, tbl.get(key));
+
+        // Remove existed KV pair.
+        assertTrue(tbl.replace(key, null));
+        assertNull(tbl.get(key));
+
+        // Ignore replace operation for non-existed KV pair.
+        assertFalse(tbl.replace(key, obj3));
+        assertNull(tbl.get(key));
+
+        tbl.put(key, obj3);
+        assertEquals(obj3, tbl.get(key));
+
+        // Remove non-existed KV pair.
+        assertFalse(tbl.replace(key2, null));
+        assertNull(tbl.get(key2));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void replaceExact() {
+        TestKeyObject key = TestKeyObject.randomObject(rnd);
+        TestKeyObject key2 = TestKeyObject.randomObject(rnd);
+        TestValueObject obj = TestValueObject.randomObject(rnd);
+        TestValueObject obj2 = TestValueObject.randomObject(rnd);
+        TestValueObject obj3 = TestValueObject.randomObject(rnd);
+
+        KeyValueView<TestKeyObject, TestValueObject> tbl = kvView();
+
+        // Insert KV pair.
+        assertTrue(tbl.replace(key, null, obj));
+        assertEquals(obj, tbl.get(key));
+        assertNull(tbl.get(key2));
+
+        // Ignore replace operation for non-existed KV pair.
+        assertFalse(tbl.replace(key2, obj, obj2));
+        assertNull(tbl.get(key2));
+
+        // Replace existed KV pair.
+        assertTrue(tbl.replace(key, obj, obj2));
+        assertEquals(obj2, tbl.get(key));
+
+        // Remove existed KV pair.
+        assertTrue(tbl.replace(key, obj2, null));
+        assertNull(tbl.get(key));
+
+        // Insert KV pair.
+        assertTrue(tbl.replace(key, null, obj3));
+        assertEquals(obj3, tbl.get(key));
+
+        // Remove non-existed KV pair.
+        assertTrue(tbl.replace(key2, null, null));
+    }
+
+    /**
+     * @return Key-value view.
+     */
+    private KeyValueViewImpl<TestKeyObject, TestValueObject> kvView() {
+        Mapper<TestKeyObject> keyMapper = () -> TestKeyObject.class;
+        Mapper<TestValueObject> valMapper = () -> TestValueObject.class;
+
+        Column[] valCols = {
+            new Column("pByteCol", INT8, false),
+            new Column("pShortCol", INT16, false),
+            new Column("pIntCol", INT32, false),
+            new Column("pLongCol", INT64, false),
+            new Column("pFloatCol", FLOAT, false),
+            new Column("pDoubleCol", DOUBLE, false),
+
+            new Column("byteCol", INT8, true),
+            new Column("shortCol", INT16, true),
+            new Column("intCol", INT32, true),
+            new Column("longCol", INT64, true),
+            new Column("nullLongCol", INT64, true),
+            new Column("floatCol", FLOAT, true),
+            new Column("doubleCol", DOUBLE, true),
+
+            new Column("dateCol", DATE, true),
+            new Column("timeCol", time(), true),
+            new Column("dateTimeCol", datetime(), true),
+            new Column("timestampCol", timestamp(), true),
+
+            new Column("uuidCol", NativeTypes.UUID, true),
+            new Column("bitmaskCol", NativeTypes.bitmaskOf(42), true),
+            new Column("stringCol", STRING, true),
+            new Column("nullBytesCol", BYTES, true),
+            new Column("bytesCol", BYTES, true),
+            new Column("numberCol", NativeTypes.numberOf(12), true),
+            new Column("decimalCol", NativeTypes.decimalOf(19, 3), true),
+        };
+
+        SchemaDescriptor schema = new SchemaDescriptor(
+            1,
+            new Column[] {new Column("id", NativeTypes.INT64, false)},
+            valCols
+        );
+
+        Set<NativeTypeSpec> testedTypes = Arrays.stream(valCols).map(c -> c.type().spec()).collect(Collectors.toSet());
+        Set<NativeTypeSpec> missedTypes = Arrays.stream(NativeTypeSpec.values()).filter(t -> !testedTypes.contains(t)).collect(Collectors.toSet());
+
+        assertEquals(Collections.emptySet(), missedTypes);
+
+        return new KeyValueViewImpl<>(
+            new DummyInternalTableImpl(),
+            new DummySchemaManagerImpl(schema),
+            keyMapper,
+            valMapper,
+            null
+        );
+    }
+
+    /**
+     * Test object.
+     */
+    @SuppressWarnings("InstanceVariableMayNotBeInitialized")
+    public static class TestKeyObject {
+        public static TestKeyObject randomObject(Random rnd) {
+            return new TestKeyObject(rnd.nextLong());
+        }
+
+        private long id;
+
+        private TestKeyObject() {
+        }
+
+        public TestKeyObject(long id) {
+            this.id = id;
+        }
+
+        @Override public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+            TestKeyObject that = (TestKeyObject)o;
+            return id == that.id;
+        }
+
+        @Override public int hashCode() {
+            return Objects.hash(id);
+        }
+    }
+
+    /**
+     * Test object.
+     */
+    @SuppressWarnings("InstanceVariableMayNotBeInitialized")
+    public static class TestValueObject {
+        /**
+         * @return Random TestObject.
+         */
+        public static TestValueObject randomObject(Random rnd) {
+            final TestValueObject obj = new TestValueObject();
+
+            obj.pByteCol = (byte)rnd.nextInt(255);
+            obj.pShortCol = (short)rnd.nextInt(65535);
+            obj.pIntCol = rnd.nextInt();
+            obj.pLongCol = rnd.nextLong();
+            obj.pFloatCol = rnd.nextFloat();
+            obj.pDoubleCol = rnd.nextDouble();
+
+            obj.byteCol = (byte)rnd.nextInt(255);
+            obj.shortCol = (short)rnd.nextInt(65535);
+            obj.intCol = rnd.nextInt();
+            obj.longCol = rnd.nextLong();
+            obj.floatCol = rnd.nextFloat();
+            obj.doubleCol = rnd.nextDouble();
+            obj.nullLongCol = null;
+
+            obj.nullBytesCol = null;
+            obj.uuidCol = new UUID(rnd.nextLong(), rnd.nextLong());
+            obj.bitmaskCol = IgniteTestUtils.randomBitSet(rnd, 42);
+
+            obj.dateCol = (LocalDate)SchemaTestUtils.generateRandomValue(rnd, DATE);
+            obj.timeCol = (LocalTime)SchemaTestUtils.generateRandomValue(rnd, NativeTypes.time());
+            obj.dateTimeCol = (LocalDateTime)SchemaTestUtils.generateRandomValue(rnd, NativeTypes.datetime());
+            obj.timestampCol = (Instant)SchemaTestUtils.generateRandomValue(rnd, NativeTypes.timestamp());
+
+            obj.stringCol = IgniteTestUtils.randomString(rnd, rnd.nextInt(255));
+            obj.bytesCol = IgniteTestUtils.randomBytes(rnd, rnd.nextInt(255));
+            obj.numberCol = (BigInteger)SchemaTestUtils.generateRandomValue(rnd, NativeTypes.numberOf(12));
+            obj.decimalCol = (BigDecimal)SchemaTestUtils.generateRandomValue(rnd, NativeTypes.decimalOf(19, 3));
+
+            return obj;
+        }
+
+        // Primitive typed
+        private byte pByteCol;
+
+        private short pShortCol;
+
+        private int pIntCol;
+
+        private long pLongCol;
+
+        private float pFloatCol;
+
+        private double pDoubleCol;
+
+        // Reference typed
+        private Byte byteCol;
+
+        private Short shortCol;
+
+        private Integer intCol;
+
+        private Long longCol;
+
+        private Long nullLongCol;
+
+        private Float floatCol;
+
+        private Double doubleCol;
+
+        private UUID uuidCol;
+
+        private LocalTime timeCol;
+
+        private LocalDate dateCol;
+
+        private LocalDateTime dateTimeCol;
+
+        private Instant timestampCol;
+
+        private BitSet bitmaskCol;
+
+        private String stringCol;
+
+        private byte[] bytesCol;
+
+        private byte[] nullBytesCol;
+
+        private BigInteger numberCol;
+
+        private BigDecimal decimalCol;
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            TestValueObject object = (TestValueObject)o;
+
+            return pByteCol == object.pByteCol &&
+                pShortCol == object.pShortCol &&
+                pIntCol == object.pIntCol &&
+                pLongCol == object.pLongCol &&
+                Float.compare(object.pFloatCol, pFloatCol) == 0 &&
+                Double.compare(object.pDoubleCol, pDoubleCol) == 0 &&
+                Objects.equals(byteCol, object.byteCol) &&
+                Objects.equals(shortCol, object.shortCol) &&
+                Objects.equals(intCol, object.intCol) &&
+                Objects.equals(longCol, object.longCol) &&
+                Objects.equals(nullLongCol, object.nullLongCol) &&
+                Objects.equals(floatCol, object.floatCol) &&
+                Objects.equals(doubleCol, object.doubleCol) &&
+                Objects.equals(dateCol, object.dateCol) &&
+                Objects.equals(timeCol, object.timeCol) &&
+                Objects.equals(timestampCol, object.timestampCol) &&
+                Objects.equals(dateTimeCol, object.dateTimeCol) &&
+                Objects.equals(uuidCol, object.uuidCol) &&
+                Objects.equals(bitmaskCol, object.bitmaskCol) &&
+                Objects.equals(stringCol, object.stringCol) &&
+                Arrays.equals(bytesCol, object.bytesCol) &&
+                Objects.equals(numberCol, object.numberCol) &&
+                Objects.equals(decimalCol, object.decimalCol);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return 73;
+        }
+    }
+}

[ignite-3] 01/02: Extend test coverage.

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

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

commit ba0d43facd2630383b8c55253d0b535fbbe5b693
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Tue Nov 2 17:32:04 2021 +0300

    Extend test coverage.
---
 .../apache/ignite/internal/schema/NativeTypes.java |  2 +
 .../internal/schema/marshaller/BinaryMode.java     | 18 ++++-
 .../internal/schema/marshaller/MarshallerUtil.java | 14 ++++
 .../marshaller/reflection/FieldAccessor.java       | 52 ++++++++++++
 .../org/apache/ignite/internal/schema/RowTest.java |  2 +-
 .../{TestUtils.java => SchemaTestUtils.java}       |  4 +-
 .../schema/marshaller/JavaSerializerTest.java      |  8 +-
 .../marshaller/reflection/FieldAccessorTest.java   |  6 +-
 .../schema/registry/UpgradingRowAdapterTest.java   |  6 +-
 modules/table/pom.xml                              |  7 ++
 ...=> KeyValueViewOperationsSimpleSchemaTest.java} | 94 ++++++++++++++++++----
 parent/pom.xml                                     |  7 ++
 12 files changed, 188 insertions(+), 32 deletions(-)

diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/NativeTypes.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/NativeTypes.java
index f9f5ff2..0ea4ac9 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/NativeTypes.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/NativeTypes.java
@@ -21,6 +21,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.BitSet;
 import org.apache.ignite.schema.definition.ColumnType;
+import org.jetbrains.annotations.Contract;
 
 /**
  * A thin wrapper over {@link NativeTypeSpec} to instantiate parameterized constrained types.
@@ -177,6 +178,7 @@ public class NativeTypes {
      * @param val Object to map to native type.
      * @return {@code null} for {@code null} value. Otherwise returns NativeType according to the value's type.
      */
+    @Contract("null -> null")
     public static NativeType fromObject(Object val) {
         NativeTypeSpec spec = NativeTypeSpec.fromObject(val);
 
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/BinaryMode.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/BinaryMode.java
index f9a2f19..ee7c3e4 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/BinaryMode.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/BinaryMode.java
@@ -68,16 +68,28 @@ public enum BinaryMode {
     /** Raw byte array. */
     BYTE_ARR(NativeTypeSpec.BYTES),
 
-    /** BitSet.*/
+    /** BitSet. */
     BITSET(NativeTypeSpec.BITMASK),
 
     /** BigInteger. */
     NUMBER(NativeTypeSpec.NUMBER),
 
     /** BigDecimal. */
-    DECIMAL(NativeTypeSpec.DECIMAL);
+    DECIMAL(NativeTypeSpec.DECIMAL),
 
-    /** Natove type spec. */
+    /** Date. */
+    DATE(NativeTypeSpec.DATE),
+
+    /** Time. */
+    TIME(NativeTypeSpec.TIME),
+
+    /** Datetime. */
+    DATETIME(NativeTypeSpec.DATETIME),
+
+    /** Timestamp. */
+    TIMESTAMP(NativeTypeSpec.TIMESTAMP);
+
+    /** Native type spec. */
     private final NativeTypeSpec typeSpec;
 
     /**
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/MarshallerUtil.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/MarshallerUtil.java
index b9b4d59..6593e4e 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/MarshallerUtil.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/MarshallerUtil.java
@@ -19,6 +19,10 @@ package org.apache.ignite.internal.schema.marshaller;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.BitSet;
 import java.util.UUID;
 import org.apache.ignite.internal.schema.InvalidTypeException;
@@ -95,6 +99,16 @@ public final class MarshallerUtil {
         else if (cls == Double.class)
             return BinaryMode.DOUBLE;
 
+            // Temporal types
+        else if (cls == LocalDate.class)
+            return BinaryMode.DATE;
+        else if (cls == LocalTime.class)
+            return BinaryMode.TIME;
+        else if (cls == LocalDateTime.class)
+            return BinaryMode.DATETIME;
+        else if (cls == Instant.class)
+            return BinaryMode.TIMESTAMP;
+
             // Other types
         else if (cls == byte[].class)
             return BinaryMode.BYTE_ARR;
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessor.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessor.java
index 9f638ad..29bf26a 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessor.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessor.java
@@ -22,6 +22,10 @@ import java.lang.invoke.VarHandle;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.BitSet;
 import java.util.Objects;
 import java.util.UUID;
@@ -103,6 +107,10 @@ abstract class FieldAccessor {
                 case BITSET:
                 case NUMBER:
                 case DECIMAL:
+                case TIME:
+                case DATE:
+                case DATETIME:
+                case TIMESTAMP:
                     return new ReferenceFieldAccessor(varHandle, colIdx, mode);
 
                 default:
@@ -147,6 +155,10 @@ abstract class FieldAccessor {
             case BITSET:
             case NUMBER:
             case DECIMAL:
+            case TIME:
+            case DATE:
+            case DATETIME:
+            case TIMESTAMP:
                 return new IdentityAccessor(colIdx, mode);
 
             default:
@@ -231,6 +243,26 @@ abstract class FieldAccessor {
 
                 break;
 
+            case DATE:
+                val = reader.dateValue(colIdx);
+
+                break;
+
+            case TIME:
+                val = reader.timeValue(colIdx);
+
+                break;
+
+            case TIMESTAMP:
+                val = reader.timestampValue(colIdx);
+
+                break;
+
+            case DATETIME:
+                val = reader.dateTimeValue(colIdx);
+
+                break;
+
             default:
                 assert false : "Invalid mode: " + mode;
         }
@@ -315,6 +347,26 @@ abstract class FieldAccessor {
 
                 break;
 
+            case DATE:
+                writer.appendDate((LocalDate)val);
+
+                break;
+
+            case TIME:
+                writer.appendTime((LocalTime)val);
+
+                break;
+
+            case TIMESTAMP:
+                writer.appendTimestamp((Instant)val);
+
+                break;
+
+            case DATETIME:
+                writer.appendDateTime((LocalDateTime)val);
+
+                break;
+
             default:
                 assert false : "Invalid mode: " + mode;
         }
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/RowTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/RowTest.java
index 006abe2..4e951a7 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/RowTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/RowTest.java
@@ -466,7 +466,7 @@ public class RowTest {
      * @return Random value of requested type.
      */
     private Object generateRandomValue(NativeType type) {
-        return TestUtils.generateRandomValue(rnd, type);
+        return SchemaTestUtils.generateRandomValue(rnd, type);
     }
 
     /**
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/TestUtils.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaTestUtils.java
similarity index 98%
rename from modules/schema/src/test/java/org/apache/ignite/internal/schema/TestUtils.java
rename to modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaTestUtils.java
index ea4f5cf..0da6314 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/TestUtils.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaTestUtils.java
@@ -35,7 +35,7 @@ import static org.apache.ignite.internal.schema.row.TemporalTypesHelper.normaliz
 /**
  * Test utility class.
  */
-public final class TestUtils {
+public final class SchemaTestUtils {
     /**
      * Generates random value of given type.
      *
@@ -118,6 +118,6 @@ public final class TestUtils {
     /**
      * Stub.
      */
-    private TestUtils() {
+    private SchemaTestUtils() {
     }
 }
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java
index ac96ea4..ca1f743 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java
@@ -43,7 +43,7 @@ import org.apache.ignite.internal.schema.NativeType;
 import org.apache.ignite.internal.schema.NativeTypeSpec;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
-import org.apache.ignite.internal.schema.TestUtils;
+import org.apache.ignite.internal.schema.SchemaTestUtils;
 import org.apache.ignite.internal.schema.marshaller.asm.AsmSerializerGenerator;
 import org.apache.ignite.internal.schema.marshaller.reflection.JavaSerializerFactory;
 import org.apache.ignite.internal.schema.row.Row;
@@ -401,7 +401,7 @@ public class JavaSerializerTest {
      * @param type Type.
      */
     private Object generateRandomValue(NativeType type) {
-        return TestUtils.generateRandomValue(rnd, type);
+        return SchemaTestUtils.generateRandomValue(rnd, type);
     }
 
     /**
@@ -477,8 +477,8 @@ public class JavaSerializerTest {
             obj.bitmaskCol = IgniteTestUtils.randomBitSet(rnd, 42);
             obj.stringCol = IgniteTestUtils.randomString(rnd, rnd.nextInt(255));
             obj.bytesCol = IgniteTestUtils.randomBytes(rnd, rnd.nextInt(255));
-            obj.numberCol = (BigInteger)TestUtils.generateRandomValue(rnd, NativeTypes.numberOf(12));
-            obj.decimalCol = (BigDecimal)TestUtils.generateRandomValue(rnd, NativeTypes.decimalOf(19, 3));
+            obj.numberCol = (BigInteger)SchemaTestUtils.generateRandomValue(rnd, NativeTypes.numberOf(12));
+            obj.decimalCol = (BigDecimal)SchemaTestUtils.generateRandomValue(rnd, NativeTypes.decimalOf(19, 3));
 
             return obj;
         }
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessorTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessorTest.java
index 0637fe7..3400d63 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessorTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessorTest.java
@@ -27,7 +27,7 @@ import java.util.Random;
 import java.util.UUID;
 import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.NativeTypes;
-import org.apache.ignite.internal.schema.TestUtils;
+import org.apache.ignite.internal.schema.SchemaTestUtils;
 import org.apache.ignite.internal.schema.marshaller.BinaryMode;
 import org.apache.ignite.internal.schema.marshaller.SerializationException;
 import org.apache.ignite.internal.schema.row.Row;
@@ -322,8 +322,8 @@ public class FieldAccessorTest {
             obj.bitmaskCol = IgniteTestUtils.randomBitSet(rnd, rnd.nextInt(42));
             obj.stringCol = IgniteTestUtils.randomString(rnd, rnd.nextInt(255));
             obj.bytesCol = IgniteTestUtils.randomBytes(rnd, rnd.nextInt(255));
-            obj.numberCol = (BigInteger)TestUtils.generateRandomValue(rnd, NativeTypes.numberOf(12));
-            obj.decimalCol = (BigDecimal) TestUtils.generateRandomValue(rnd, NativeTypes.decimalOf(19, 3));
+            obj.numberCol = (BigInteger)SchemaTestUtils.generateRandomValue(rnd, NativeTypes.numberOf(12));
+            obj.decimalCol = (BigDecimal) SchemaTestUtils.generateRandomValue(rnd, NativeTypes.decimalOf(19, 3));
 
             return obj;
         }
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/registry/UpgradingRowAdapterTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/registry/UpgradingRowAdapterTest.java
index f6f880b..91acf5e 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/registry/UpgradingRowAdapterTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/registry/UpgradingRowAdapterTest.java
@@ -33,7 +33,7 @@ import org.apache.ignite.internal.schema.NativeType;
 import org.apache.ignite.internal.schema.NativeTypeSpec;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
-import org.apache.ignite.internal.schema.TestUtils;
+import org.apache.ignite.internal.schema.SchemaTestUtils;
 import org.apache.ignite.internal.schema.mapping.ColumnMapper;
 import org.apache.ignite.internal.schema.row.Row;
 import org.apache.ignite.internal.schema.row.RowAssembler;
@@ -184,7 +184,7 @@ public class UpgradingRowAdapterTest {
         for (int i = 0; i < schema.length(); i++) {
             NativeType type = schema.column(i).type();
 
-            res.add(TestUtils.generateRandomValue(rnd, type));
+            res.add(SchemaTestUtils.generateRandomValue(rnd, type));
         }
 
         return res;
@@ -195,7 +195,7 @@ public class UpgradingRowAdapterTest {
      *
      * @param schema Row schema.
      * @param vals Row values.
-     * @return
+     * @return Serialized row.
      */
     private byte[] serializeValuesToRow(SchemaDescriptor schema, List<Object> vals) {
         assertEquals(schema.keyColumns().length() + schema.valueColumns().length(), vals.size());
diff --git a/modules/table/pom.xml b/modules/table/pom.xml
index fb4882e..37acb4e 100644
--- a/modules/table/pom.xml
+++ b/modules/table/pom.xml
@@ -165,6 +165,13 @@
             <type>test-jar</type>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-schema</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+
         <!-- Logging in tests -->
         <dependency>
             <groupId>org.slf4j</groupId>
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueOperationsTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueViewOperationsSimpleSchemaTest.java
similarity index 70%
rename from modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueOperationsTest.java
rename to modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueViewOperationsSimpleSchemaTest.java
index 18a9aa8..980aca1 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueOperationsTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/KeyValueViewOperationsSimpleSchemaTest.java
@@ -17,15 +17,35 @@
 
 package org.apache.ignite.internal.table;
 
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.stream.Collectors;
 import org.apache.ignite.internal.schema.Column;
+import org.apache.ignite.internal.schema.NativeType;
+import org.apache.ignite.internal.schema.NativeTypeSpec;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.SchemaTestUtils;
 import org.apache.ignite.internal.table.impl.DummyInternalTableImpl;
 import org.apache.ignite.internal.table.impl.DummySchemaManagerImpl;
 import org.apache.ignite.table.KeyValueView;
 import org.apache.ignite.table.mapper.Mapper;
 import org.junit.jupiter.api.Test;
 
+import static org.apache.ignite.internal.schema.NativeTypes.BYTES;
+import static org.apache.ignite.internal.schema.NativeTypes.DATE;
+import static org.apache.ignite.internal.schema.NativeTypes.DOUBLE;
+import static org.apache.ignite.internal.schema.NativeTypes.FLOAT;
+import static org.apache.ignite.internal.schema.NativeTypes.INT16;
+import static org.apache.ignite.internal.schema.NativeTypes.INT32;
+import static org.apache.ignite.internal.schema.NativeTypes.INT64;
+import static org.apache.ignite.internal.schema.NativeTypes.INT8;
+import static org.apache.ignite.internal.schema.NativeTypes.STRING;
+import static org.apache.ignite.internal.schema.NativeTypes.datetime;
+import static org.apache.ignite.internal.schema.NativeTypes.time;
+import static org.apache.ignite.internal.schema.NativeTypes.timestamp;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -38,28 +58,14 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  * TODO: IGNITE-14487 Add bulk operations tests.
  * TODO: IGNITE-14487 Add async operations tests.
  */
-public class KeyValueOperationsTest {
-    /** Default mapper. */
-    private final Mapper<Long> mapper = new Mapper<>() {
-        @Override public Class<Long> getType() {
-            return Long.class;
-        }
-    };
-
-    /** Simple schema. */
-    private SchemaDescriptor schema = new SchemaDescriptor(
-        1,
-        new Column[]{new Column("id", NativeTypes.INT64, false)},
-        new Column[]{new Column("val", NativeTypes.INT64, false)}
-    );
-
+public class KeyValueViewOperationsSimpleSchemaTest {
     /**
      * Creates table view.
      *
      * @return Table KV-view.
      */
     private KeyValueView<Long, Long> kvView() {
-        return new KeyValueViewImpl<>(new DummyInternalTableImpl(), new DummySchemaManagerImpl(schema), mapper, mapper, null);
+        return kvViewForValueType(NativeTypes.INT64, Long.class);
     }
 
     /**
@@ -298,4 +304,60 @@ public class KeyValueOperationsTest {
         // Remove non-existed KV pair.
         assertTrue(tbl.replace(2L, null, null));
     }
+
+    /**
+     *
+     */
+    @Test
+    public void putGetAllTypes() {
+        Random rnd = new Random();
+        Long key = 42L;
+
+        List<NativeType> allTypes = List.of(INT8, INT16, INT32, INT64, FLOAT, DOUBLE, DATE,
+            NativeTypes.numberOf(20), NativeTypes.decimalOf(25, 5),
+            NativeTypes.bitmaskOf(22),
+            time(), datetime(), timestamp(),
+            BYTES, STRING);
+
+        assertEquals(Set.of(NativeTypeSpec.values()), allTypes.stream().map(NativeType::spec).collect(Collectors.toSet()));
+
+        for (NativeType type : allTypes) {
+            final Object val = SchemaTestUtils.generateRandomValue(rnd, type);
+
+            assertFalse(type.mismatch(NativeTypes.fromObject(val)));
+
+            KeyValueViewImpl<Long, Object> kvView = kvViewForValueType(NativeTypes.fromObject(val), (Class<Object>)val.getClass());
+
+            kvView.put(key, val);
+
+            if (val instanceof byte[])
+                assertArrayEquals((byte[])val, (byte[])kvView.get(key));
+            else
+                assertEquals(val, kvView.get(key));
+        }
+    }
+
+    /**
+     * @param type Value column native type.
+     * @param aClass Value class.
+     * @return Key-value view for given value type.
+     */
+    private <T> KeyValueViewImpl<Long, T> kvViewForValueType(NativeType type, Class<T> aClass) {
+        Mapper<Long> keyMapper = () -> Long.class;
+        Mapper<T> valMapper = () -> aClass;
+
+        SchemaDescriptor schema = new SchemaDescriptor(
+            1,
+            new Column[] {new Column("id", NativeTypes.INT64, false)},
+            new Column[] {new Column("val", type, false)}
+        );
+
+        return new KeyValueViewImpl<>(
+            new DummyInternalTableImpl(),
+            new DummySchemaManagerImpl(schema),
+            keyMapper,
+            valMapper,
+            null
+        );
+    }
 }
diff --git a/parent/pom.xml b/parent/pom.xml
index 93969d0..bb3cb2e 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -486,6 +486,13 @@
 
             <dependency>
                 <groupId>org.apache.ignite</groupId>
+                <artifactId>ignite-schema</artifactId>
+                <version>${project.version}</version>
+                <type>test-jar</type>
+            </dependency>
+
+            <dependency>
+                <groupId>org.apache.ignite</groupId>
                 <artifactId>ignite-storage-api</artifactId>
                 <version>${project.version}</version>
                 <type>test-jar</type>