You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2021/03/23 22:56:15 UTC

[ignite-3] branch ignite-14198 updated (993819a -> 973d0fe)

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

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


    omit 993819a  IGNITE-14198 Meta storage client interface
     add 0b09ebc  IGNITE-14193 Default values support for configuration framework (#61)
     add f3775d0  IGNITE-14272 Move DEVNOTES.md to proper location, add modules readme
     add 9201be1  IGNITE-14302 Fixed PMD check for REST module. (#66)
     add 4afdbb3  IGNITE-14298 DEVNOTES should contain clear instructions on how to run check-style
     add 497ac43  IGNITE-14315 Use maven-flatten plugin (#68)
     add d5b50d7  IGNITE-13618: Provide generated and reflection-based class (de)serializers. (#35)
     add 3d54cf9  IGNITE-13748: Schema configuration public API. (#2)
     add 55359c9  IGNITE-14183 Reimplemented validation in new configuration framework. (#67)
     add 73b28f3  IGNITE-14126 Fixed annoying messages about dumb terminal in CLI tests. Fixes #49
     add ba5467c  IGNITE-14114 Added Spinner ui element. Fixes #48
     add d9e88e9  IGNITE-14202 Netty-based REST API sub-library for Ignite. Fixes #71
     new 360d68a  IGNITE-14198 Meta storage client interface
     new 973d0fe  Code review fixes

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   (993819a)
            \
             N -- N -- N   refs/heads/ignite-14198 (973d0fe)

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:
 .gitignore                                         |   1 +
 DEVNOTES.md                                        | 123 ++-
 check-rules/pmd-rules.xml                          |  30 +-
 modules/DEVNOTES.md                                |  47 --
 modules/README.md                                  |  22 +
 modules/api/README.md                              |   4 +
 modules/api/pom.xml                                |  37 +
 .../java/org/apache/ignite/schema/Column.java}     |  30 +-
 .../java/org/apache/ignite/schema/ColumnType.java  | 267 +++++++
 .../org/apache/ignite/schema/ColumnarIndex.java}   |  21 +-
 .../java/org/apache/ignite/schema/HashIndex.java}  |  11 +-
 .../org/apache/ignite/schema/IndexColumn.java}     |  11 +-
 .../org/apache/ignite/schema/PartialIndex.java}    |  18 +-
 .../org/apache/ignite/schema/PrimaryIndex.java}    |  16 +-
 .../org/apache/ignite/schema/SchemaObject.java}    |  11 +-
 .../org/apache/ignite/schema/SchemaTable.java}     |  60 +-
 .../org/apache/ignite/schema/SortedIndex.java}     |  34 +-
 .../apache/ignite/schema/SortedIndexColumn.java}   |  11 +-
 .../java/org/apache/ignite/schema/TableIndex.java} |  18 +-
 .../ignite/schema/builder/HashIndexBuilder.java}   |  25 +-
 .../ignite/schema/builder/PartialIndexBuilder.java |  61 ++
 .../ignite/schema/builder/PrimaryIndexBuilder.java |  59 ++
 .../schema/builder/SchemaObjectBuilder.java}       |  21 +-
 .../ignite/schema/builder/SchemaTableBuilder.java  |  62 ++
 .../ignite/schema/builder/SortedIndexBuilder.java  |  80 ++
 .../ignite/schema/builder/TableColumnBuilder.java} |  54 +-
 .../schema/modification/AlterColumnBuilder.java    |  76 ++
 .../modification/TableModificationBuilder.java     |  83 ++
 modules/bytecode/README.md                         |   6 +
 modules/{configuration => bytecode}/pom.xml        |  35 +-
 .../java/com/facebook/presto/bytecode/Access.java  |  85 +++
 .../bytecode/AddFakeLineNumberClassVisitor.java    | 157 ++++
 .../presto/bytecode/AnnotationDefinition.java      | 211 ++++++
 .../com/facebook/presto/bytecode/ArrayOpCode.java  | 124 +++
 .../presto/bytecode/ByteCodeTooLargeException.java |  23 +
 .../facebook/presto/bytecode/BytecodeBlock.java    | 837 +++++++++++++++++++++
 .../com/facebook/presto/bytecode/BytecodeNode.java |  26 +
 .../facebook/presto/bytecode/BytecodeUtils.java    | 118 +++
 .../facebook/presto/bytecode/BytecodeVisitor.java  | 327 ++++++++
 .../facebook/presto/bytecode/ClassDefinition.java  | 281 +++++++
 .../facebook/presto/bytecode/ClassGenerator.java   | 204 +++++
 .../com/facebook/presto/bytecode/ClassInfo.java    | 169 +++++
 .../facebook/presto/bytecode/ClassInfoLoader.java  | 147 ++++
 .../java/com/facebook/presto/bytecode/Comment.java |  50 ++
 .../presto/bytecode/CompilationException.java      |  23 +
 .../presto/bytecode/DumpBytecodeVisitor.java       | 601 +++++++++++++++
 .../presto/bytecode/DynamicClassLoader.java        | 144 ++++
 .../facebook/presto/bytecode/FieldDefinition.java  | 106 +++
 .../facebook/presto/bytecode/MethodDefinition.java | 284 +++++++
 .../presto/bytecode/MethodGenerationContext.java   | 122 +++
 .../java/com/facebook/presto/bytecode/OpCode.java  | 268 +++++++
 .../com/facebook/presto/bytecode/Parameter.java    |  33 +
 .../presto/bytecode/ParameterizedType.java         | 285 +++++++
 .../java/com/facebook/presto/bytecode/Scope.java   | 102 +++
 .../facebook/presto/bytecode/SmartClassWriter.java |  54 ++
 .../com/facebook/presto/bytecode/Variable.java     |  89 +++
 .../presto/bytecode/control/CaseStatement.java     |  72 ++
 .../presto/bytecode/control/DoWhileLoop.java       | 106 +++
 .../presto/bytecode/control/FlowControl.java       |  22 +
 .../facebook/presto/bytecode/control/ForLoop.java  | 155 ++++
 .../presto/bytecode/control/IfStatement.java       | 124 +++
 .../presto/bytecode/control/SwitchStatement.java   | 171 +++++
 .../facebook/presto/bytecode/control/TryCatch.java |  97 +++
 .../presto/bytecode/control/WhileLoop.java         | 100 +++
 .../facebook/presto/bytecode/debug/DebugNode.java  |  21 +
 .../presto/bytecode/debug/LineNumberNode.java      |  59 ++
 .../presto/bytecode/debug/LocalVariableNode.java   |  62 ++
 .../bytecode/expression/AndBytecodeExpression.java |  64 ++
 .../expression/ArithmeticBytecodeExpression.java   | 202 +++++
 .../expression/ArrayLengthBytecodeExpression.java  |  55 ++
 .../bytecode/expression/BytecodeExpression.java    | 221 ++++++
 .../bytecode/expression/BytecodeExpressions.java   | 623 +++++++++++++++
 .../expression/CastBytecodeExpression.java         | 328 ++++++++
 .../expression/ComparisonBytecodeExpression.java   | 313 ++++++++
 .../expression/ConstantBytecodeExpression.java     |  68 ++
 .../expression/GetElementBytecodeExpression.java   |  63 ++
 .../expression/GetFieldBytecodeExpression.java     | 109 +++
 .../expression/InlineIfBytecodeExpression.java     |  69 ++
 .../expression/InstanceOfBytecodeExpression.java   |  62 ++
 .../expression/InvokeBytecodeExpression.java       | 115 +++
 .../InvokeDynamicBytecodeExpression.java           |  84 +++
 .../expression/NegateBytecodeExpression.java       |  66 ++
 .../expression/NewArrayBytecodeExpression.java     |  99 +++
 .../expression/NewInstanceBytecodeExpression.java  |  67 ++
 .../bytecode/expression/NotBytecodeExpression.java |  63 ++
 .../bytecode/expression/OrBytecodeExpression.java  |  64 ++
 .../bytecode/expression/PopBytecodeExpression.java |  49 ++
 .../expression/ReturnBytecodeExpression.java       |  82 ++
 .../SetArrayElementBytecodeExpression.java         |  68 ++
 .../expression/SetFieldBytecodeExpression.java     | 129 ++++
 .../presto/bytecode/instruction/Constant.java      | 542 +++++++++++++
 .../bytecode/instruction/FieldInstruction.java     | 156 ++++
 .../bytecode/instruction/InstructionNode.java      |  21 +
 .../bytecode/instruction/InvokeInstruction.java    | 405 ++++++++++
 .../bytecode/instruction/JumpInstruction.java      | 137 ++++
 .../presto/bytecode/instruction/LabelNode.java     |  70 ++
 .../bytecode/instruction/TypeInstruction.java      | 109 +++
 .../bytecode/instruction/VariableInstruction.java  | 126 ++++
 .../presto/bytecode/TestBytecodeUtils.java         |  29 +
 .../presto/bytecode/TestClassGenerator.java        |  97 +++
 .../expression/BytecodeExpressionAssertions.java   | 148 ++++
 .../TestArithmeticBytecodeExpression.java          | 136 ++++
 .../expression/TestArrayBytecodeExpressions.java   | 155 ++++
 .../expression/TestCastBytecodeExpression.java     | 164 ++++
 .../TestComparisonBytecodeExpression.java          | 179 +++++
 .../expression/TestConstantBytecodeExpression.java |  75 ++
 .../expression/TestGetFieldBytecodeExpression.java |  41 +
 .../expression/TestInlineIfBytecodeExpression.java |  32 +
 .../expression/TestInvokeBytecodeExpression.java   |  55 ++
 .../TestInvokeDynamicBytecodeExpression.java       |  56 ++
 .../expression/TestLogicalBytecodeExpression.java  |  51 ++
 .../TestNewInstanceBytecodeExpression.java         |  34 +
 .../expression/TestPopBytecodeExpression.java      |  46 ++
 .../expression/TestSetFieldBytecodeExpression.java |  85 +++
 .../TestSetVariableBytecodeExpression.java         |  47 ++
 modules/cli-common/pom.xml                         |   1 +
 .../ignite/cli/builtins/node/NodeManager.java      |  17 +-
 .../apache/ignite/cli/spec/NodeCommandSpec.java    |   2 -
 .../java/org/apache/ignite/cli/ui/ProgressBar.java |  28 +-
 .../java/org/apache/ignite/cli/ui/Spinner.java     |  72 ++
 .../org/apache/ignite/cli/AbstractCliTest.java}    |  14 +-
 .../apache/ignite/cli/IgniteCliInterfaceTest.java  |  32 +-
 .../cli/builtins/init/InitIgniteCommandTest.java   |   8 +-
 .../cli/builtins/module/ModuleMangerTest.java      |   7 +-
 .../org/apache/ignite/cli/ui/ProgressBarTest.java  |   3 +-
 .../ui/{ProgressBarTest.java => SpinnerTest.java}  |  71 +-
 .../apache/ignite/cli/{ => ui}/package-info.java   |   4 +-
 .../configuration-annotation-processor/README.md   |   5 +
 .../processor/internal/ConfigSet.java              |  26 +-
 .../internal/TestConfigurationSchema.java          |   8 +-
 .../processor/internal/Processor.java              | 153 ++--
 .../configuration/processor/internal/Utils.java    |   2 +-
 .../internal/validation/ValidationGenerator.java   | 174 -----
 .../internal/util/ConfigurationUtilTest.java       |   3 +-
 .../internal/validation/ValidationUtilTest.java    | 174 +++++
 .../sample/AutoAdjustConfigurationSchema.java      |  13 +-
 .../sample/CacheConfigurationSchema.java           |   3 +-
 .../sample/ConfigurationArrayTest.java             |  13 +-
 .../sample/ConstructableTreeNodeTest.java          |  35 +-
 .../sample/DiscoveryConfigurationSchema.java       |   8 +-
 .../sample/NodeConfigurationSchema.java            |  12 +-
 .../sample/TraversableTreeNodeTest.java            |  11 +-
 .../sample/storage/ConfigurationChangerTest.java   | 162 ++--
 .../sample/validation/AutoAdjustValidator.java     |  41 -
 .../sample/validation/AutoAdjustValidator2.java    |  41 -
 .../sample/validation/NodeValidator.java           |  40 -
 modules/configuration/pom.xml                      |   5 +
 .../ignite/configuration/ConfigurationChanger.java | 245 +++---
 .../configuration/ConfigurationRegistry.java       |  27 +-
 .../apache/ignite/configuration/Configurator.java  |  94 ---
 .../org/apache/ignite/configuration/RootKey.java   |   2 +-
 .../ignite/configuration/annotation/Validate.java  |  75 --
 .../ignite/configuration/annotation/Value.java     |   6 +
 .../configuration/internal/ConfigurationNode.java  |  11 +-
 .../internal/DynamicConfiguration.java             |  28 +-
 .../configuration/internal/DynamicProperty.java    |   7 +-
 .../internal/NamedListConfiguration.java           |   5 +-
 .../ignite/configuration/internal/RootKeyImpl.java |   6 +-
 .../ignite/configuration/internal/SuperRoot.java   | 118 +++
 .../internal/util/AnyNodeConfigurationVisitor.java |  49 ++
 .../internal/util/ConfigurationUtil.java           | 178 +++--
 .../util/KeysTrackingConfigurationVisitor.java     | 165 ++++
 .../internal/validation/MaxValidator.java          |  29 +-
 .../internal/validation/MinValidator.java          |  29 +-
 .../internal/validation/NotNullValidator.java      |  41 -
 .../internal/validation/ValidationContextImpl.java | 123 +++
 .../internal/validation/ValidationUtil.java        | 178 +++++
 .../ignite/configuration/tree/InnerNode.java       |  14 +
 .../ignite/configuration/tree/NamedListChange.java |   3 +
 .../ignite/configuration/tree/NamedListNode.java   |   2 +-
 .../ConfigurationValidationException.java          |   2 +
 .../configuration/validation/FieldValidator.java   |  46 --
 .../validation/ValidationContext.java              |  67 ++
 .../configuration/validation/ValidationIssue.java  |  18 +
 .../ignite/configuration/validation/Validator.java |  40 +
 .../metastorage/client/MetaStorageService.java     |   7 +-
 .../ignite/metastorage/common/Condition.java       |   5 +-
 .../ignite/metastorage/common/Operations.java      |   5 +-
 .../ignite/metastorage/common/WatchListener.java   |   2 +-
 modules/network/README.md                          |  23 +
 modules/rest/pom.xml                               |  49 +-
 .../java/org/apache/ignite/rest/RestModule.java    | 165 ++--
 .../configuration/RestConfigurationSchema.java     |   5 +-
 .../apache/ignite/rest/netty/RestApiHandler.java   | 112 +++
 .../ignite/rest/netty/RestApiHttpRequest.java}     |  46 +-
 .../ignite/rest/netty/RestApiHttpResponse.java     | 134 ++++
 .../ignite/rest/netty/RestApiInitializer.java      |  50 ++
 .../rest/presentation/json/JsonPresentation.java   |  11 +-
 .../java/org/apache/ignite/rest/routes/Route.java  | 152 ++++
 .../java/org/apache/ignite/rest/routes/Router.java | 126 ++++
 .../org/apache/ignite/rest/routes/RouteTest.java   |  97 +++
 modules/runner/pom.xml                             |   5 -
 .../java/org/apache/ignite/app/IgniteRunner.java   |   2 +-
 .../extended/AutoAdjustConfigurationSchema.java    |   5 +-
 .../extended/DataStorageConfigurationSchema.java   |   7 +-
 .../src/main/resources/simplelogger.properties     |   2 +-
 modules/schema/README.md                           |  49 ++
 modules/{network => schema}/pom.xml                |  68 +-
 .../internal/schema/AbstractSchemaObject.java}     |  43 +-
 .../ignite/internal/schema/AssemblyException.java} |  22 +-
 .../org/apache/ignite/internal/schema/Bitmask.java |  87 +++
 .../ignite/internal/schema/ByteBufferTuple.java    |  91 +++
 .../org/apache/ignite/internal/schema/Column.java  | 137 ++++
 .../apache/ignite/internal/schema/ColumnImpl.java  |  76 ++
 .../org/apache/ignite/internal/schema/Columns.java | 279 +++++++
 .../ignite/internal/schema/ExpandableByteBuf.java  | 253 +++++++
 .../ignite/internal/schema/HashIndexImpl.java      |  60 ++
 .../ignite/internal/schema/IndexColumnImpl.java}   |  27 +-
 .../internal/schema/InvalidTypeException.java}     |  15 +-
 .../apache/ignite/internal/schema/NativeType.java  | 142 ++++
 .../ignite/internal/schema/NativeTypeSpec.java     | 178 +++++
 .../ignite/internal/schema/PartialIndexImpl.java   |  61 ++
 .../ignite/internal/schema/PrimaryIndexImpl.java}  |  36 +-
 .../org/apache/ignite/internal/schema/README.md    |  87 +++
 .../ignite/internal/schema/SchemaDescriptor.java   |  87 +++
 .../ignite/internal/schema/SchemaTableImpl.java    | 145 ++++
 .../internal/schema/SortedIndexColumnImpl.java}    |  52 +-
 .../ignite/internal/schema/SortedIndexImpl.java    |  76 ++
 .../org/apache/ignite/internal/schema/Tuple.java   | 429 +++++++++++
 .../ignite/internal/schema/TupleAssembler.java     | 453 +++++++++++
 .../schema/builder/AbstractIndexBuilder.java}      |  36 +-
 .../schema/builder/HashIndexBuilderImpl.java       |  62 ++
 .../schema/builder/PartialIndexBuilderImpl.java    | 113 +++
 .../schema/builder/PrimaryKeyBuilderImpl.java      | 119 +++
 .../schema/builder/SchemaTableBuilderImpl.java     | 133 ++++
 .../schema/builder/SortedIndexBuilderImpl.java     | 147 ++++
 .../schema/builder/TableColumnBuilderImpl.java     |  84 +++
 .../schema/marshaller/AbstractSerializer.java      | 108 +++
 .../internal/schema/marshaller/BinaryMode.java     |  90 +++
 .../internal/schema/marshaller/MarshallerUtil.java | 115 +++
 .../schema/marshaller/SerializationException.java} |  19 +-
 .../internal/schema/marshaller/Serializer.java}    |  39 +-
 .../schema/marshaller/SerializerFactory.java       |  52 ++
 .../marshaller/asm/AsmSerializerGenerator.java     | 458 +++++++++++
 .../asm/IdentityMarshallerCodeGenerator.java       |  77 ++
 .../marshaller/asm/MarshallerCodeGenerator.java    |  71 ++
 .../asm/ObjectMarshallerCodeGenerator.java         | 182 +++++
 .../asm/TupleColumnAccessCodeGenerator.java        | 139 ++++
 .../marshaller/reflection/FieldAccessor.java       | 643 ++++++++++++++++
 .../marshaller/reflection/JavaSerializer.java      | 157 ++++
 .../reflection/JavaSerializerFactory.java}         |  29 +-
 .../schema/marshaller/reflection/Marshaller.java   | 153 ++++
 .../modification/AlterColumnBuilderImpl.java       |  69 ++
 .../modification/TableModificationBuilderImpl.java |  94 +++
 .../ignite/internal/schema}/package-info.java      |   5 +-
 .../org/apache/ignite/internal/util/Factory.java}  |  15 +-
 .../apache/ignite/internal/util/ObjectFactory.java |  54 ++
 .../org/apache/ignite/internal/util/Pair.java}     |  40 +-
 .../org/apache/ignite/schema/SchemaBuilders.java   | 108 +++
 .../benchmarks/SerializerBenchmarkTest.java        | 206 +++++
 .../apache/ignite/internal/schema/ColumnTest.java} |  40 +-
 .../apache/ignite/internal/schema/ColumnsTest.java | 443 +++++++++++
 .../internal/schema/ExpandableByteBufTest.java     | 150 ++++
 .../ignite/internal/schema/NativeTypeTest.java     |  71 ++
 .../internal/schema/SchemaConfigurationTest.java   | 130 ++++
 .../internal/schema/SchemaDescriptorTest.java      |  51 ++
 .../apache/ignite/internal/schema/TestUtils.java   | 127 ++++
 .../apache/ignite/internal/schema/TupleTest.java   | 320 ++++++++
 .../schema/marshaller/JavaSerializerTest.java      | 675 +++++++++++++++++
 .../marshaller/reflection/FieldAccessorTest.java   | 417 ++++++++++
 parent/pom.xml                                     | 228 +++++-
 pom.xml                                            |  88 +--
 262 files changed, 24577 insertions(+), 1791 deletions(-)
 delete mode 100644 modules/DEVNOTES.md
 create mode 100644 modules/README.md
 create mode 100644 modules/api/README.md
 create mode 100644 modules/api/pom.xml
 copy modules/{configuration/src/main/java/org/apache/ignite/configuration/ConfigurationProperty.java => api/src/main/java/org/apache/ignite/schema/Column.java} (65%)
 create mode 100644 modules/api/src/main/java/org/apache/ignite/schema/ColumnType.java
 copy modules/{configuration/src/main/java/org/apache/ignite/configuration/internal/util/KeyNotFoundException.java => api/src/main/java/org/apache/ignite/schema/ColumnarIndex.java} (68%)
 copy modules/{metastorage-client/src/main/java/org/apache/ignite/metastorage/client/package-info.java => api/src/main/java/org/apache/ignite/schema/HashIndex.java} (78%)
 copy modules/{metastorage-client/src/main/java/org/apache/ignite/metastorage/client/package-info.java => api/src/main/java/org/apache/ignite/schema/IndexColumn.java} (81%)
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkMessageHandler.java => api/src/main/java/org/apache/ignite/schema/PartialIndex.java} (73%)
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkMessageHandler.java => api/src/main/java/org/apache/ignite/schema/PrimaryIndex.java} (74%)
 copy modules/{metastorage-client/src/main/java/org/apache/ignite/metastorage/client/package-info.java => api/src/main/java/org/apache/ignite/schema/SchemaObject.java} (83%)
 copy modules/{metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchEvent.java => api/src/main/java/org/apache/ignite/schema/SchemaTable.java} (50%)
 copy modules/{cli/src/main/java/org/apache/ignite/cli/builtins/module/ResolveResult.java => api/src/main/java/org/apache/ignite/schema/SortedIndex.java} (57%)
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkMessageHandler.java => api/src/main/java/org/apache/ignite/schema/SortedIndexColumn.java} (79%)
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkMessageHandler.java => api/src/main/java/org/apache/ignite/schema/TableIndex.java} (76%)
 copy modules/{configuration/src/main/java/org/apache/ignite/configuration/ConfigurationProperty.java => api/src/main/java/org/apache/ignite/schema/builder/HashIndexBuilder.java} (63%)
 create mode 100644 modules/api/src/main/java/org/apache/ignite/schema/builder/PartialIndexBuilder.java
 create mode 100644 modules/api/src/main/java/org/apache/ignite/schema/builder/PrimaryIndexBuilder.java
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkMessageHandler.java => api/src/main/java/org/apache/ignite/schema/builder/SchemaObjectBuilder.java} (69%)
 create mode 100644 modules/api/src/main/java/org/apache/ignite/schema/builder/SchemaTableBuilder.java
 create mode 100644 modules/api/src/main/java/org/apache/ignite/schema/builder/SortedIndexBuilder.java
 copy modules/{configuration/src/main/java/org/apache/ignite/configuration/storage/Data.java => api/src/main/java/org/apache/ignite/schema/builder/TableColumnBuilder.java} (52%)
 create mode 100644 modules/api/src/main/java/org/apache/ignite/schema/modification/AlterColumnBuilder.java
 create mode 100644 modules/api/src/main/java/org/apache/ignite/schema/modification/TableModificationBuilder.java
 create mode 100644 modules/bytecode/README.md
 copy modules/{configuration => bytecode}/pom.xml (65%)
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/Access.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/AddFakeLineNumberClassVisitor.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/AnnotationDefinition.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/ArrayOpCode.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/ByteCodeTooLargeException.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/BytecodeBlock.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/BytecodeNode.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/BytecodeUtils.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/BytecodeVisitor.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/ClassDefinition.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/ClassGenerator.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/ClassInfo.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/ClassInfoLoader.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/Comment.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/CompilationException.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/DumpBytecodeVisitor.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/DynamicClassLoader.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/FieldDefinition.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/MethodDefinition.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/MethodGenerationContext.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/OpCode.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/Parameter.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/ParameterizedType.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/Scope.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/SmartClassWriter.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/Variable.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/control/CaseStatement.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/control/DoWhileLoop.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/control/FlowControl.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/control/ForLoop.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/control/IfStatement.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/control/SwitchStatement.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/control/TryCatch.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/control/WhileLoop.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/debug/DebugNode.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/debug/LineNumberNode.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/debug/LocalVariableNode.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/AndBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/ArithmeticBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/ArrayLengthBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/BytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/BytecodeExpressions.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/CastBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/ComparisonBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/ConstantBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/GetElementBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/GetFieldBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/InlineIfBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/InstanceOfBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/InvokeBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/InvokeDynamicBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/NegateBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/NewArrayBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/NewInstanceBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/NotBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/OrBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/PopBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/ReturnBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/SetArrayElementBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/expression/SetFieldBytecodeExpression.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/instruction/Constant.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/instruction/FieldInstruction.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/instruction/InstructionNode.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/instruction/InvokeInstruction.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/instruction/JumpInstruction.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/instruction/LabelNode.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/instruction/TypeInstruction.java
 create mode 100644 modules/bytecode/src/main/java/com/facebook/presto/bytecode/instruction/VariableInstruction.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/TestBytecodeUtils.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/TestClassGenerator.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/BytecodeExpressionAssertions.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestArithmeticBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestArrayBytecodeExpressions.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestCastBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestComparisonBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestConstantBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestGetFieldBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestInlineIfBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestInvokeBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestInvokeDynamicBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestLogicalBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestNewInstanceBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestPopBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestSetFieldBytecodeExpression.java
 create mode 100644 modules/bytecode/src/test/java/com/facebook/presto/bytecode/expression/TestSetVariableBytecodeExpression.java
 create mode 100644 modules/cli/src/main/java/org/apache/ignite/cli/ui/Spinner.java
 copy modules/cli/src/{main/java/org/apache/ignite/cli/package-info.java => test/java/org/apache/ignite/cli/AbstractCliTest.java} (77%)
 copy modules/cli/src/test/java/org/apache/ignite/cli/ui/{ProgressBarTest.java => SpinnerTest.java} (50%)
 copy modules/cli/src/test/java/org/apache/ignite/cli/{ => ui}/package-info.java (91%)
 create mode 100644 modules/configuration-annotation-processor/README.md
 delete mode 100644 modules/configuration-annotation-processor/src/main/java/org/apache/ignite/configuration/processor/internal/validation/ValidationGenerator.java
 create mode 100644 modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/internal/validation/ValidationUtilTest.java
 delete mode 100644 modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/validation/AutoAdjustValidator.java
 delete mode 100644 modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/validation/AutoAdjustValidator2.java
 delete mode 100644 modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/validation/NodeValidator.java
 delete mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/annotation/Validate.java
 create mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/internal/SuperRoot.java
 create mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/internal/util/AnyNodeConfigurationVisitor.java
 create mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/internal/util/KeysTrackingConfigurationVisitor.java
 delete mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/internal/validation/NotNullValidator.java
 create mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/internal/validation/ValidationContextImpl.java
 create mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/internal/validation/ValidationUtil.java
 delete mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/validation/FieldValidator.java
 create mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/validation/ValidationContext.java
 create mode 100644 modules/configuration/src/main/java/org/apache/ignite/configuration/validation/Validator.java
 create mode 100644 modules/network/README.md
 create mode 100644 modules/rest/src/main/java/org/apache/ignite/rest/netty/RestApiHandler.java
 copy modules/{configuration-annotation-processor/src/main/java/org/apache/ignite/configuration/processor/internal/ConfigurationDescription.java => rest/src/main/java/org/apache/ignite/rest/netty/RestApiHttpRequest.java} (50%)
 create mode 100644 modules/rest/src/main/java/org/apache/ignite/rest/netty/RestApiHttpResponse.java
 create mode 100644 modules/rest/src/main/java/org/apache/ignite/rest/netty/RestApiInitializer.java
 create mode 100644 modules/rest/src/main/java/org/apache/ignite/rest/routes/Route.java
 create mode 100644 modules/rest/src/main/java/org/apache/ignite/rest/routes/Router.java
 create mode 100644 modules/rest/src/test/java/org/apache/ignite/rest/routes/RouteTest.java
 create mode 100644 modules/schema/README.md
 copy modules/{network => schema}/pom.xml (64%)
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkMember.java => schema/src/main/java/org/apache/ignite/internal/schema/AbstractSchemaObject.java} (57%)
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkHandlersProvider.java => schema/src/main/java/org/apache/ignite/internal/schema/AssemblyException.java} (63%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/Bitmask.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/ByteBufferTuple.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/Column.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/ColumnImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/Columns.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/ExpandableByteBuf.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/HashIndexImpl.java
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkHandlersProvider.java => schema/src/main/java/org/apache/ignite/internal/schema/IndexColumnImpl.java} (64%)
 copy modules/{configuration/src/main/java/org/apache/ignite/configuration/internal/util/KeyNotFoundException.java => schema/src/main/java/org/apache/ignite/internal/schema/InvalidTypeException.java} (74%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/NativeType.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/NativeTypeSpec.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/PartialIndexImpl.java
 copy modules/{cli/src/main/java/org/apache/ignite/cli/builtins/module/ResolveResult.java => schema/src/main/java/org/apache/ignite/internal/schema/PrimaryIndexImpl.java} (52%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/README.md
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaDescriptor.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaTableImpl.java
 copy modules/{network/src/integrationTest/java/org/apache/ignite/network/scalecube/TestMessage.java => schema/src/main/java/org/apache/ignite/internal/schema/SortedIndexColumnImpl.java} (56%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/SortedIndexImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/Tuple.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/TupleAssembler.java
 copy modules/{cli/src/main/java/org/apache/ignite/cli/builtins/module/ResolveResult.java => schema/src/main/java/org/apache/ignite/internal/schema/builder/AbstractIndexBuilder.java} (57%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/HashIndexBuilderImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/PartialIndexBuilderImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/PrimaryKeyBuilderImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaTableBuilderImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SortedIndexBuilderImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/TableColumnBuilderImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/AbstractSerializer.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/BinaryMode.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/MarshallerUtil.java
 copy modules/{configuration/src/main/java/org/apache/ignite/configuration/ConfigurationChangeException.java => schema/src/main/java/org/apache/ignite/internal/schema/marshaller/SerializationException.java} (71%)
 copy modules/{cli/src/main/java/org/apache/ignite/cli/builtins/module/ResolveResult.java => schema/src/main/java/org/apache/ignite/internal/schema/marshaller/Serializer.java} (54%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/SerializerFactory.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/asm/AsmSerializerGenerator.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/asm/IdentityMarshallerCodeGenerator.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/asm/MarshallerCodeGenerator.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/asm/ObjectMarshallerCodeGenerator.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/asm/TupleColumnAccessCodeGenerator.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessor.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/reflection/JavaSerializer.java
 copy modules/{cli/src/main/java/org/apache/ignite/cli/IgniteCLIException.java => schema/src/main/java/org/apache/ignite/internal/schema/marshaller/reflection/JavaSerializerFactory.java} (59%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/marshaller/reflection/Marshaller.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/modification/AlterColumnBuilderImpl.java
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/modification/TableModificationBuilderImpl.java
 copy modules/{cli/src/main/java/org/apache/ignite/cli/builtins/module => schema/src/main/java/org/apache/ignite/internal/schema}/package-info.java (84%)
 copy modules/{network/src/main/java/org/apache/ignite/network/NetworkMessageHandler.java => schema/src/main/java/org/apache/ignite/internal/util/Factory.java} (79%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/util/ObjectFactory.java
 copy modules/{configuration/src/main/java/org/apache/ignite/configuration/ConfigurationChangeException.java => schema/src/main/java/org/apache/ignite/internal/util/Pair.java} (59%)
 create mode 100644 modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java
 copy modules/{cli/src/main/java/org/apache/ignite/cli/builtins/module/ResolveResult.java => schema/src/test/java/org/apache/ignite/internal/schema/ColumnTest.java} (54%)
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/ColumnsTest.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/ExpandableByteBufTest.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/NativeTypeTest.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaConfigurationTest.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaDescriptorTest.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/TestUtils.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/TupleTest.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java
 create mode 100644 modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/reflection/FieldAccessorTest.java

[ignite-3] 01/02: IGNITE-14198 Meta storage client interface

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

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

commit 360d68a5620d6eeb6be551ad7145906b0a52cc8e
Author: Andrey Gura <ag...@apache.org>
AuthorDate: Wed Feb 17 18:53:22 2021 +0300

    IGNITE-14198 Meta storage client interface
---
 modules/metastorage-client/pom.xml                 |  42 +++
 .../metastorage/client/MetaStorageService.java     | 334 +++++++++++++++++++
 .../ignite/metastorage/client/package-info.java    |  21 ++
 modules/metastorage-common/pom.xml                 |  41 +++
 .../metastorage/common/CompactedException.java     |  59 ++++
 .../ignite/metastorage/common/Condition.java       | 357 +++++++++++++++++++++
 .../ignite/metastorage/common/Conditions.java      |  53 +++
 .../apache/ignite/metastorage/common/Cursor.java   |  27 ++
 .../apache/ignite/metastorage/common/Entry.java    |  52 +++
 .../ignite/metastorage/common/Operation.java       |  84 +++++
 .../common/OperationTimeoutException.java          |  59 ++++
 .../ignite/metastorage/common/Operations.java      |  61 ++++
 .../ignite/metastorage/common/WatchEvent.java      |  58 ++++
 .../ignite/metastorage/common/WatchListener.java   |  42 +++
 .../ignite/metastorage/common/package-info.java    |  21 ++
 pom.xml                                            |   2 +
 16 files changed, 1313 insertions(+)

diff --git a/modules/metastorage-client/pom.xml b/modules/metastorage-client/pom.xml
new file mode 100644
index 0000000..0d21c81
--- /dev/null
+++ b/modules/metastorage-client/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.ignite</groupId>
+        <artifactId>ignite-parent</artifactId>
+        <version>1</version>
+        <relativePath>../../parent/pom.xml</relativePath>
+    </parent>
+
+    <artifactId>metastorage-client</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>metastorage-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/MetaStorageService.java b/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/MetaStorageService.java
new file mode 100644
index 0000000..255ce4b
--- /dev/null
+++ b/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/MetaStorageService.java
@@ -0,0 +1,334 @@
+/*
+ * 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.metastorage.client;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+import org.apache.ignite.metastorage.common.CompactedException;
+import org.apache.ignite.metastorage.common.Condition;
+import org.apache.ignite.metastorage.common.Cursor;
+import org.apache.ignite.metastorage.common.Entry;
+import org.apache.ignite.metastorage.common.Operation;
+import org.apache.ignite.metastorage.common.OperationTimeoutException;
+import org.apache.ignite.metastorage.common.WatchListener;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Defines interface for access to a meta storage service.
+ */
+public interface MetaStorageService {
+    /**
+     * Retrieves an entry for the given key.
+     *
+     * @param key Key. Couldn't be {@code null}.
+     * @return An entry for the given key. Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<Entry> get(@NotNull byte[] key);
+
+    /**
+     * Retrieves an entry for the given key and the revision upper bound.
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @param revUpperBound  The upper bound for entry revisions. Must be positive.
+     * @return An entry for the given key and maximum revision limited by {@code revUpperBound}.
+     * Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @throws CompactedException If the desired revisions are removed from the storage due to a compaction.
+     * Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<Entry> get(@NotNull byte[] key, long revUpperBound);
+
+    /**
+     * Retrieves entries for given keys.
+     *
+     * @param keys The collection of keys. Couldn't be {@code null} or empty.
+     *             Collection elements couldn't be {@code null}.
+     * @return A list of entries for given keys. The order of entries in the result list corresponds to
+     * the traversal order of {@code keys} collection. Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<List<Entry>> getAll(Collection<byte[]> keys);
+
+    /**
+     * Retrieves entries for given keys and the revision upper bound.
+     *
+     * @param keys The collection of keys. Couldn't be {@code null} or empty.
+     *             Collection elements couldn't be {@code null}.
+     * @param revUpperBound  The upper bound for entry revisions. Must be positive.
+     * @return A list of entries for given keys and maximum revision limited by {@code revUpperBound}.
+     * The order of entries in the result list corresponds to the traversal order of {@code keys} collection.
+     * Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @throws CompactedException If the desired revisions are removed from the storage due to a compaction.
+     * Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<List<Entry>> getAll(Collection<byte[]> keys, long revUpperBound);
+
+    /**
+     * Inserts or updates an entry with the given key and the given value.
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @param value The value.Couldn't be {@code null}.
+     * @return Completed future.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<Void> put(@NotNull byte[] key, @NotNull byte[] value);
+
+    /**
+     * Inserts or updates an entry with the given key and the given value and
+     * retrieves a previous entry for the given key.
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @param value The value.Couldn't be {@code null}.
+     * @return A previous entry for the given key. Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<Entry> getAndPut(@NotNull byte[] key, @NotNull byte[] value);
+
+    /**
+     * Inserts or updates entries with given keys and given values.
+     * Size of {@code keys} and {@code values} must be the same.
+     *
+     * @param keys The list of keys. Couldn't be {@code null} or empty.
+     * @param values The list of values corresponding to the list of keys. Couldn't be {@code null} or empty.
+     * @return Completed future.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<Void> putAll(@NotNull List<byte[]> keys, @NotNull List<byte[]> values);
+
+    /**
+     * Inserts or updates entries with given keys and given values and
+     * retrieves a previous entries for given keys.
+     * Size of {@code keys} and {@code values} must be the same.
+     *
+     * @param keys The list of keys. Couldn't be {@code null} or empty.
+     * @param values The list of values corresponding to the list of keys. Couldn't be {@code null} or empty.
+     * @return A list of entries for given keys. Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<List<Entry>> getAndPutAll(@NotNull List<byte[]> keys, @NotNull List<byte[]> values);
+
+    /**
+     * Removes an entry for the given key.
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @return Completed future.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<Void> remove(@NotNull byte[] key);
+
+    /**
+     * Removes an entry for the given key.
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @return A previous entry for the given key. Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<Void> getAndRemove(@NotNull byte[] key);
+
+    /**
+     * Removes entries for given keys.
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @return Completed future.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<Void> removeAll(@NotNull Collection<byte[]> key);
+
+    /**
+     * Removes entries for given keys and retrieves previous entries.
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @return A list of previous entries for given keys..
+     * The order of entries in the result list corresponds to the traversal order of {@code keys} collection.
+     * Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    CompletableFuture<List<Entry>> getAndRemoveAll(@NotNull Collection<byte[]> key);
+
+
+    /**
+     * Updates an entry for the given key conditionally.
+     *
+     * <p>Conditional update could be treated as <i>if(condition)-then(success)-else(failure)</i> expression.</p>
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @param condition The condition.
+     * @param success The update which will be applied in case of condition evaluation yields {@code true}.
+     * @param failure The update which will be applied in case of condition evaluation yields {@code false}.
+     * @return Future result {@code true} if {@code success} update was applied, otherwise {@code false}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     * @see Condition
+     * @see Operation
+     */
+    // TODO: https://issues.apache.org/jira/browse/IGNITE-14269: will be replaced by conditional multi update.
+    @NotNull
+    CompletableFuture<Boolean> invoke(@NotNull byte[] key, @NotNull Condition condition,
+                                      @NotNull Operation success, @NotNull Operation failure);
+
+    /**
+     * Updates an entry for the given key conditionally.
+     *
+     * <p>Conditional update could be treated as <i>if(condition)-then(success)-else(failure)</i> expression.</p>
+     *
+     * @param key The key. Couldn't be {@code null}.
+     * @param condition The condition.
+     * @param success The update which will be applied in case of condition evaluation yields {@code true}.
+     * @param failure The update which will be applied in case of condition evaluation yields {@code false}.
+     * @return A previous entry for the given key.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @see Entry
+     * @see Condition
+     * @see Operation
+     */
+    //TODO: https://issues.apache.org/jira/browse/IGNITE-14269: will be replaced by conditional multi update.
+    @NotNull
+    CompletableFuture<Entry> getAndInvoke(@NotNull byte[] key, @NotNull Condition condition,
+                                          @NotNull Operation success, @NotNull Operation failure);
+
+    /**
+     * Retrieves entries for the given key range in lexicographic order. Entries will be filtered out by upper bound
+     * of given revision number.
+     *
+     * @param keyFrom Start key of range (inclusive). Couldn't be {@code null}.
+     * @param keyTo End key of range (exclusive). Could be {@code null}.
+     * @param revUpperBound  The upper bound for entry revision. {@code -1} means latest revision.
+     * @return Cursor built upon entries corresponding to the given range and revision.
+     * @throws OperationTimeoutException If the operation is timed out.
+     * @throws CompactedException If the desired revisions are removed from the storage due to a compaction.
+     * @see Entry
+     */
+    @NotNull
+    Cursor<Entry> range(@NotNull byte[] keyFrom, @Nullable byte[] keyTo, long revUpperBound);
+
+    /**
+     * Retrieves entries for the given key range in lexicographic order. Short cut for
+     * {@link #range(byte[], byte[], long)} where {@code revUpperBound == -1}.
+     *
+     * @param keyFrom Start key of range (inclusive). Couldn't be {@code null}.
+     * @param keyTo End key of range (exclusive). Could be {@code null}.
+     * @return Cursor built upon entries corresponding to the given range and revision.
+     * @throws OperationTimeoutException If the operation is timed out.
+     * @throws CompactedException If the desired revisions are removed from the storage due to a compaction.
+     * @see Entry
+     */
+    @NotNull
+    Cursor<Entry> range(@NotNull byte[] keyFrom, @Nullable byte[] keyTo);
+
+    /**
+     * Subscribes on meta storage updates matching the parameters.
+     *
+     * @param keyFrom Start key of range (inclusive). Could be {@code null}.
+     * @param keyTo End key of range (exclusive). Could be {@code null}.
+     * @param revision Start revision inclusive. {@code 0} - all revision,
+     * {@code -1} - latest revision (accordingly to current meta storage state).
+     * @param lsnr Listener which will be notified for each update.
+     * @return Subscription identifier. Could be used in {@link #stopWatch} method in order to cancel subscription.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @throws CompactedException If the desired revisions are removed from the storage due to a compaction.
+     * Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    //TODO: UUID Should be replaced by IgniteUUID when it will be introduced.
+    CompletableFuture<UUID> watch(@Nullable byte[] keyFrom, @Nullable byte[] keyTo,
+                                  long revision, @NotNull WatchListener lsnr);
+
+    /**
+     * Subscribes on meta storage updates for the given key.
+     *
+     * @param key The target key. Could be {@code null}.
+     * @param revision Start revision inclusive. {@code 0} - all revision,
+     * {@code -1} - latest revision (accordingly to current meta storage state).
+     * @param lsnr Listener which will be notified for each update.
+     * @return Subscription identifier. Could be used in {@link #stopWatch} method in order to cancel subscription.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @throws CompactedException If the desired revisions are removed from the storage due to a compaction.
+     * Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    //TODO: UUID Should be replaced by IgniteUUID when it will be introduced.
+    CompletableFuture<UUID> watch(@NotNull byte[] key, long revision, @NotNull WatchListener lsnr);
+
+    /**
+     * Subscribes on meta storage updates for given keys.
+     *
+     * @param keys Collection of target keys. Could be {@code null}.
+     * @param revision Start revision inclusive. {@code 0} - all revision,
+     * {@code -1} - latest revision (accordingly to current meta storage state).
+     * @param lsnr Listener which will be notified for each update.
+     * @return Subscription identifier. Could be used in {@link #stopWatch} method in order to cancel subscription.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     * @throws CompactedException If the desired revisions are removed from the storage due to a compaction.
+     * Will be thrown on getting future result.
+     * @see Entry
+     */
+    @NotNull
+    //TODO: UUID Should be replaced by IgniteUUID when it will be introduced.
+    CompletableFuture<UUID> watch(@NotNull Collection<byte[]> keys, long revision, @NotNull WatchListener lsnr);
+
+    /**
+     * Cancels subscription for the given identifier.
+     *
+     * @param id Subscription identifier.
+     * @return Completed future in case of operation success. Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     */
+    @NotNull
+    //TODO: UUID Should be replaced by IgniteUUID when it will be introduced.
+    CompletableFuture<Void> stopWatch(@NotNull UUID id);
+
+    /**
+     * Compacts meta storage (removes all tombstone entries and old entries except of entries with latest revision).
+     *
+     * @return Completed future. Couldn't be {@code null}.
+     * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
+     */
+    CompletableFuture<Void> compact();
+}
+
diff --git a/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/package-info.java b/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/package-info.java
new file mode 100644
index 0000000..26bfb69
--- /dev/null
+++ b/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+/**
+ * Defines client interface for access to a meta storage server.
+ */
+package org.apache.ignite.metastorage.client;
\ No newline at end of file
diff --git a/modules/metastorage-common/pom.xml b/modules/metastorage-common/pom.xml
new file mode 100644
index 0000000..cd9e1c6
--- /dev/null
+++ b/modules/metastorage-common/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.ignite</groupId>
+        <artifactId>ignite-parent</artifactId>
+        <version>1</version>
+        <relativePath>../../parent/pom.xml</relativePath>
+    </parent>
+
+    <artifactId>metastorage-common</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.jetbrains</groupId>
+            <artifactId>annotations</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/CompactedException.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/CompactedException.java
new file mode 100644
index 0000000..6ea9f43
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/CompactedException.java
@@ -0,0 +1,59 @@
+/*
+ * 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.metastorage.common;
+
+/**
+ * Thrown when a requested operation on meta storage could not be performed because target revisions were removed
+ * from storage due to a compaction procedure. In such case the operation should be retried with actual revision.
+ */
+public class CompactedException extends RuntimeException {
+    /**
+     * Constructs an exception.
+     */
+    public CompactedException() {
+        super();
+    }
+
+    /**
+     * Constructs an exception with a given message.
+     *
+     * @param message Detail message.
+     */
+    public CompactedException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs an exception with a given message and a cause.
+     *
+     * @param message Detail message.
+     * @param cause Cause.
+     */
+    public CompactedException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * Constructs an exception with a given cause.
+     *
+     * @param cause Cause.
+     */
+    public CompactedException(Throwable cause) {
+        super(cause);
+    }
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Condition.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Condition.java
new file mode 100644
index 0000000..ee3cab6
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Condition.java
@@ -0,0 +1,357 @@
+/*
+ * 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.metastorage.common;
+
+import java.util.Arrays;
+
+/**
+ * Represents a condition for conditional update.
+ */
+public final class Condition {
+    /** Actual condition implementation. */
+    private final InnerCondition cond;
+
+    /**
+     * Constructs a condition which wraps the actual condition implementation.
+     *
+     * @param cond The actual condition implementation.
+     */
+    Condition(InnerCondition cond) {
+        this.cond = cond;
+    }
+
+    /**
+     * Tests the given entry on satisfaction of the condition.
+     *
+     * @param e Entry.
+     * @return The result of condition test. {@code true} - if the entry satisfies to the condition,
+     * otherwise - {@code false}.
+     */
+    public boolean test(Entry e) {
+        return cond.test(e);
+    }
+
+    /**
+     * Represents condition on entry revision. Only one type of condition could be applied to
+     * the one instance of condition. Subsequent invocations of any method which produces condition will throw
+     * {@link IllegalStateException}.
+     */
+    public static final class RevisionCondition implements InnerCondition {
+        /**
+         * The type of condition.
+         *
+         * @see Type
+         */
+        private Type type;
+
+        /**
+         * The revision as the condition argument.
+         */
+        private long rev;
+
+        /**
+         * Default no-op constructor.
+         */
+        RevisionCondition() {
+            // No-op.
+        }
+
+        // TODO: eq, ne, lt, le, gt, ge
+        /**
+         * Produces the condition of type {@link Type#EQUAL}. This condition tests the given revision on equality with
+         * target entry revision.
+         *
+         * @param rev The revision.
+         * @return The condition of type {@link Type#EQUAL}.
+         * @throws IllegalStateException In case when the condition is already defined.
+         */
+        public Condition eq(long rev) {
+            validate(type);
+
+            this.type = Type.EQUAL;
+            this.rev = rev;
+
+            return new Condition(this);
+        }
+
+        /**
+         * Produces the condition of type {@link Type#NOT_EQUAL}. This condition tests the given revision on inequality
+         * with target entry revision.
+         *
+         * @param rev The revision.
+         * @return The condition of type {@link Type#NOT_EQUAL}.
+         * @throws IllegalStateException In case when the condition is already defined.
+         */
+        public Condition ne(long rev) {
+            validate(type);
+
+            this.type = Type.NOT_EQUAL;
+            this.rev = rev;
+
+            return new Condition(this);
+        }
+
+        /**
+         * Produces the condition of type {@link Type#GREATER}. This condition tests that the target entry revision
+         * is greater than given revision.
+         *
+         * @param rev The revision.
+         * @return The condition of type {@link Type#GREATER}.
+         * @throws IllegalStateException In case when the condition is already defined.
+         */
+        public Condition gt(long rev) {
+            validate(type);
+
+            this.type = Type.GREATER;
+            this.rev = rev;
+
+            return new Condition(this);
+        }
+
+        /**
+         * Produces the condition of type {@link Type#GREATER_OR_EQUAL}. This condition tests that the target entry
+         * revision is greater than or equal to given revision.
+         *
+         * @param rev The revision.
+         * @return The condition of type {@link Type#GREATER_OR_EQUAL}.
+         * @throws IllegalStateException In case when the condition is already defined.
+         */
+        public Condition ge(long rev) {
+            validate(type);
+
+            this.type = Type.GREATER_OR_EQUAL;
+            this.rev = rev;
+
+            return new Condition(this);
+        }
+
+        /**
+         * Produces the condition of type {@link Type#LESS}. This condition tests that target entry revision
+         * is less than the given revision.
+         *
+         * @param rev The revision.
+         * @return The condition of type {@link Type#LESS}.
+         * @throws IllegalStateException In case when the condition is already defined.
+         */
+        public Condition lt(long rev) {
+            validate(type);
+
+            this.type = Type.LESS;
+            this.rev = rev;
+
+            return new Condition(this);
+        }
+
+        /**
+         * Produces the condition of type {@link Type#LESS_OR_EQUAL}. This condition tests that target entry revision
+         * is less than or equal to the given revision.
+         *
+         * @param rev The revision.
+         * @return The condition of type {@link Type#LESS_OR_EQUAL}.
+         * @throws IllegalStateException In case when the condition is already defined.
+         */
+        public Condition le(long rev) {
+            validate(type);
+
+            this.type = Type.LESS_OR_EQUAL;
+            this.rev = rev;
+
+            return new Condition(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean test(Entry e) {
+            int res = Long.compare(e.revision(), rev);
+
+            return type.test(res);
+        }
+
+        /**
+         * Defines possible condition types which can be applied to the revision.
+         */
+        enum Type {
+            /** Equality condition type. */
+            EQUAL {
+                @Override public boolean test(long res) {
+                    return res == 0;
+                }
+            },
+
+            /** Inequality condition type. */
+            NOT_EQUAL {
+                @Override public boolean test(long res) {
+                    return res != 0;
+                }
+            },
+
+            /** Greater than condition type. */
+            GREATER {
+                @Override public boolean test(long res) {
+                    return res > 0;
+                }
+            },
+
+            /** Less than condition type. */
+            LESS {
+                @Override public boolean test(long res) {
+                    return res < 0;
+                }
+            },
+
+            /** Less than or equal to condition type. */
+            LESS_OR_EQUAL {
+                @Override public boolean test(long res) {
+                    return res <= 0;
+                }
+            },
+
+            /** Greater than or equal to condition type. */
+            GREATER_OR_EQUAL {
+                @Override public boolean test(long res) {
+                    return res >= 0;
+                }
+            };
+
+            /**
+             * Interprets comparison result.
+             *
+             * @param res The result of comparison.
+             * @return The interpretation of the comparison result.
+             */
+            public abstract boolean test(long res);
+        }
+    }
+
+    /**
+     * Represents condition on entry value. Only one type of condition could be applied to
+     * the one instance of condition. Subsequent invocations of any method which produces condition will throw
+     * {@link IllegalStateException}.
+     */
+    public static final class ValueCondition implements InnerCondition {
+        /**
+         * The type of condition.
+         *
+         * @see Type
+         */
+        private Type type;
+
+        /**
+         * The value as the condition argument.
+         */
+        private byte[] val;
+
+        /**
+         * Default no-op constructor.
+         */
+        ValueCondition() {
+            // No-op.
+        }
+
+        /**
+         * Produces the condition of type {@link Type#EQUAL}. This condition tests the given value on equality with
+         * target entry value.
+         *
+         * @param val The value.
+         * @return The condition of type {@link Type#EQUAL}.
+         * @throws IllegalStateException In case when the condition is already defined.
+         */
+        public Condition eq(byte[] val) {
+            validate(type);
+
+            this.type = Type.EQUAL;
+            this.val = val;
+
+            return new Condition(this);
+        }
+
+        /**
+         * Produces the condition of type {@link Type#NOT_EQUAL}. This condition tests the given мфдгу on inequality
+         * with target entry мфдгу.
+         *
+         * @param val The value.
+         * @return The condition of type {@link Type#NOT_EQUAL}.
+         * @throws IllegalStateException In case when the condition is already defined.
+         */
+        public Condition ne(byte[] val) {
+            validate(type);
+
+            this.type = Type.NOT_EQUAL;
+            this.val = val;
+
+            return new Condition(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean test(Entry e) {
+            int res = Arrays.compare(e.value(), val);
+
+            return type.test(res);
+        }
+
+        /**
+         * Defines possible condition types which can be applied to the value.
+         */
+        enum Type {
+            /** Equality condition type. */
+            EQUAL {
+                @Override public boolean test(long res) {
+                    return res == 0;
+                }
+            },
+
+            /** Inequality condition type. */
+            NOT_EQUAL {
+                @Override public boolean test(long res) {
+                    return res != 0;
+                }
+            };
+
+            /**
+             * Interprets comparison result.
+             *
+             * @param res The result of comparison.
+             * @return The interpretation of the comparison result.
+             */
+            public abstract boolean test(long res);
+        }
+    }
+
+    /**
+     * Checks that condition is not defined yet. If the condition is already defined then exception will be thrown.
+     *
+     * @throws IllegalStateException In case when the condition is already defined.
+     */
+    private static void validate(Enum<?> type) {
+        if (type != null)
+            throw new IllegalStateException("Condition type " + type.name() + " is already defined.");
+    }
+
+    /**
+     * Defines condition interface.
+     */
+    private interface InnerCondition {
+        /**
+         * Tests the given entry on satisfaction of the condition.
+         *
+         * @param e Entry.
+         * @return The result of condition test. {@code true} - if the entry satisfies to the condition,
+         * otherwise - {@code false}.
+         */
+        boolean test(Entry e);
+    }
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Conditions.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Conditions.java
new file mode 100644
index 0000000..f83849a
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Conditions.java
@@ -0,0 +1,53 @@
+/*
+ * 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.metastorage.common;
+
+/**
+ * This class contains fabric methods which produce conditions needed for conditional multi update functionality
+ * provided by meta storage service.
+ *
+ * @see Condition
+ */
+public final class Conditions {
+    /**
+     * Creates condition on entry revision.
+     *
+     * @return Condition on entry revision.
+     * @see Condition.RevisionCondition
+     */
+    public static Condition.RevisionCondition revision() {
+        return new Condition.RevisionCondition();
+    }
+
+    /**
+     * Creates condition on entry value.
+     *
+     * @return Condition on entry value.
+     * @see Condition.ValueCondition
+     */
+    public static Condition.ValueCondition value() {
+        return new Condition.ValueCondition();
+    }
+
+    /**
+     * Default no-op constructor.
+     */
+    private Conditions() {
+        // No-op.
+    }
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Cursor.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Cursor.java
new file mode 100644
index 0000000..dcc1c94
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Cursor.java
@@ -0,0 +1,27 @@
+/*
+ * 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.metastorage.common;
+
+/**
+ * Closeable cursor.
+ *
+ * @param <T>
+ */
+//TODO: Should be replaced by common entity from org.ignite.lang or org.ignite.core package.
+public interface Cursor<T> extends Iterable<T>, AutoCloseable {
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Entry.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Entry.java
new file mode 100644
index 0000000..b01128e
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Entry.java
@@ -0,0 +1,52 @@
+/*
+ * 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.metastorage.common;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents a storage unit as entry with key, value and revision, where
+ * <ul>
+ *     <li>key - an unique entry's key represented by an array of bytes. Keys are comparable in lexicographic manner.</li>
+ *     <ul>value - a data which is associated with a key and represented as an array of bytes.</ul>
+ *     <ul>revision - a number which denotes a version of whole meta storage. Each change increments the revision.</ul>
+ * </ul>
+ */
+public interface Entry {
+    /**
+     * Returns a key.
+     *
+     * @return The key.
+     */
+    @NotNull byte[] key();
+
+    /**
+     * Returns a value. Could be {@code null} for empty entry.
+     *
+     * @return Value.
+     */
+    @Nullable byte[] value();
+
+    /**
+     * Returns a revision.
+     *
+     * @return Revision.
+     */
+    long revision();
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operation.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operation.java
new file mode 100644
index 0000000..98196a9
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operation.java
@@ -0,0 +1,84 @@
+/*
+ * 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.metastorage.common;
+
+/**
+ * Defines operation for meta storage conditional update (invoke).
+ */
+public final class Operation {
+    /** Actual operation implementation. */
+    @SuppressWarnings({"FieldCanBeLocal", "unused"})
+    private final InnerOp upd;
+
+    /**
+     * Constructs an operation which wraps the actual operation implementation.
+     *
+     * @param upd The actual operation implementation.
+     */
+    Operation(InnerOp upd) {
+        this.upd = upd;
+    }
+
+    /**
+     * Represents operation of type <i>remove</i>.
+     */
+    public static final class RemoveOp implements InnerOp {
+        /**
+         * Default no-op constructor.
+         */
+        RemoveOp() {
+            // No-op.
+        }
+    }
+
+    /**
+     * Represents operation of type <i>put</i>.
+     */
+    public static final class PutOp implements InnerOp {
+        /** Value. */
+        private final byte[] val;
+
+        /**
+         * Constructs operation of type <i>put</i>.
+         *
+         * @param val The value to which the entry should be updated.
+         */
+        PutOp(byte[] val) {
+            this.val = val;
+        }
+    }
+
+    /**
+     * Represents operation of type <i>no-op</i>.
+     */
+    public static final class NoOp implements InnerOp {
+        /**
+         * Default no-op constructor.
+         */
+        NoOp() {
+            // No-op.
+        }
+    }
+
+    /**
+     * Defines operation interface.
+     */
+    private interface InnerOp {
+        // Marker interface.
+    }
+}
\ No newline at end of file
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/OperationTimeoutException.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/OperationTimeoutException.java
new file mode 100644
index 0000000..4edcf02
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/OperationTimeoutException.java
@@ -0,0 +1,59 @@
+/*
+ * 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.metastorage.common;
+
+/**
+ * Thrown when an operation is not executed within a specified time period. Usually in such cases the operation
+ * should be retried.
+ */
+public class OperationTimeoutException extends RuntimeException {
+    /**
+     * Constructs an exception.
+     */
+    public OperationTimeoutException() {
+        super();
+    }
+
+    /**
+     * Constructs an exception with a given message.
+     *
+     * @param message Detail message.
+     */
+    public OperationTimeoutException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs an exception with a given message and a cause.
+     *
+     * @param message Detail message.
+     * @param cause Cause.
+     */
+    public OperationTimeoutException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * Constructs an exception with a given cause.
+     *
+     * @param cause Cause.
+     */
+    public OperationTimeoutException(Throwable cause) {
+        super(cause);
+    }
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operations.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operations.java
new file mode 100644
index 0000000..d7296a7
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operations.java
@@ -0,0 +1,61 @@
+/*
+ * 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.metastorage.common;
+
+/**
+ * This class contains fabric methods which produce operations needed for conditional multi update functionality
+ * (invoke) provided by meta storage service.
+ *
+ * @see Operation
+ */
+public final class Operations {
+    /**
+     * Creates operation of type <i>remove</i>. This type of operation removes entry.
+     *
+     * @return Operation of type <i>remove</i>.
+     */
+    public static Operation remove() {
+        return new Operation(new Operation.RemoveOp());
+    }
+
+    /**
+     * Creates operation of type <i>put</i>. This type of operation inserts or updates value of entry.
+     *
+     * @param value Value.
+     * @return Operation of type <i>put</i>.
+     */
+    public static Operation put(byte[] value) {
+        return new Operation(new Operation.PutOp(value));
+    }
+
+    /**
+     * Creates operation of type <i>noop</i>. It is a special type of operation which doesn't perform any action.
+     *
+     * @return Operation of type <i>noop</i>.
+     */
+    public static Operation noop() {
+        return new Operation(new Operation.NoOp());
+    }
+
+    /**
+     * Default no-op constructor.
+     */
+    private Operations() {
+        // No-op.
+    }
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchEvent.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchEvent.java
new file mode 100644
index 0000000..bd78ea5
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchEvent.java
@@ -0,0 +1,58 @@
+/*
+ * 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.metastorage.common;
+
+/**
+ * Watch event which can be processed by {@link WatchListener}.
+ */
+public final class WatchEvent {
+    /** Old (previous) entry */
+    private final Entry oldEntry;
+
+    /** New (updated) entry. */
+    private final Entry newEntry;
+
+    /**
+     * Constructs an event with given old and new entries.
+     *
+     * @param oldEntry Old entry.
+     * @param newEntry New entry/
+     */
+    public WatchEvent(Entry oldEntry, Entry newEntry) {
+        this.oldEntry = oldEntry;
+        this.newEntry = newEntry;
+    }
+
+    /**
+     * Returns old entry.
+     *
+     * @return Old entry.
+     */
+    public Entry oldEntry() {
+        return oldEntry;
+    }
+
+    /**
+     * Returns new entry.
+     *
+     * @return New entry.
+     */
+    public Entry newEntry() {
+        return newEntry;
+    }
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchListener.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchListener.java
new file mode 100644
index 0000000..32785e0
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchListener.java
@@ -0,0 +1,42 @@
+/*
+ * 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.metastorage.common;
+
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * The listener which receives and handles watch updates.
+ */
+public interface WatchListener {
+    /**
+     * The method will be called on each meta storage update.
+     *
+     * @param events A single event or batch.
+     * @return {@code True} if listener must continue event handling. If returns {@code false} then the listener and
+     * corresponding watch will be unregistered.
+     */
+    boolean onUpdate(@NotNull Iterable<WatchEvent> events);
+
+    /**
+     * The method will be called in case of an error occurred. The listener and corresponding watch will be
+     * unregistered.
+     *
+     * @param e Exception.
+     */
+    void onError(@NotNull Throwable e);
+}
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/package-info.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/package-info.java
new file mode 100644
index 0000000..084638b
--- /dev/null
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+/**
+ * Contains entities required by both meta storage client and server implementations.
+ */
+package org.apache.ignite.metastorage.common;
diff --git a/pom.xml b/pom.xml
index 4a225d9..cd6f7ae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,8 @@
         <module>modules/configuration</module>
         <module>modules/configuration-annotation-processor</module>
         <module>modules/network</module>
+        <module>modules/metastorage-common</module>
+        <module>modules/metastorage-client</module>
         <module>modules/rest</module>
         <module>modules/runner</module>
         <module>modules/schema</module>

[ignite-3] 02/02: Code review fixes

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

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

commit 973d0fe52aa438a626d281f866472604643e07e4
Author: Andrey Gura <ag...@apache.org>
AuthorDate: Wed Mar 24 01:55:16 2021 +0300

    Code review fixes
---
 .../org/apache/ignite/metastorage/client/MetaStorageService.java   | 7 ++++---
 .../main/java/org/apache/ignite/metastorage/common/Condition.java  | 5 ++---
 .../main/java/org/apache/ignite/metastorage/common/Operations.java | 5 ++++-
 .../java/org/apache/ignite/metastorage/common/WatchListener.java   | 2 +-
 4 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/MetaStorageService.java b/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/MetaStorageService.java
index 255ce4b..2fb7b47 100644
--- a/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/MetaStorageService.java
+++ b/modules/metastorage-client/src/main/java/org/apache/ignite/metastorage/client/MetaStorageService.java
@@ -264,7 +264,7 @@ public interface MetaStorageService {
      *
      * @param keyFrom Start key of range (inclusive). Could be {@code null}.
      * @param keyTo End key of range (exclusive). Could be {@code null}.
-     * @param revision Start revision inclusive. {@code 0} - all revision,
+     * @param revision Start revision inclusive. {@code 0} - all revisions,
      * {@code -1} - latest revision (accordingly to current meta storage state).
      * @param lsnr Listener which will be notified for each update.
      * @return Subscription identifier. Could be used in {@link #stopWatch} method in order to cancel subscription.
@@ -281,8 +281,8 @@ public interface MetaStorageService {
     /**
      * Subscribes on meta storage updates for the given key.
      *
-     * @param key The target key. Could be {@code null}.
-     * @param revision Start revision inclusive. {@code 0} - all revision,
+     * @param key The target key. Couldn't be {@code null}.
+     * @param revision Start revision inclusive. {@code 0} - all revisions,
      * {@code -1} - latest revision (accordingly to current meta storage state).
      * @param lsnr Listener which will be notified for each update.
      * @return Subscription identifier. Could be used in {@link #stopWatch} method in order to cancel subscription.
@@ -329,6 +329,7 @@ public interface MetaStorageService {
      * @return Completed future. Couldn't be {@code null}.
      * @throws OperationTimeoutException If the operation is timed out. Will be thrown on getting future result.
      */
+    @NotNull
     CompletableFuture<Void> compact();
 }
 
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Condition.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Condition.java
index ee3cab6..359829b 100644
--- a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Condition.java
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Condition.java
@@ -71,7 +71,6 @@ public final class Condition {
             // No-op.
         }
 
-        // TODO: eq, ne, lt, le, gt, ge
         /**
          * Produces the condition of type {@link Type#EQUAL}. This condition tests the given revision on equality with
          * target entry revision.
@@ -280,8 +279,8 @@ public final class Condition {
         }
 
         /**
-         * Produces the condition of type {@link Type#NOT_EQUAL}. This condition tests the given мфдгу on inequality
-         * with target entry мфдгу.
+         * Produces the condition of type {@link Type#NOT_EQUAL}. This condition tests the given value on inequality
+         * with target entry value.
          *
          * @param val The value.
          * @return The condition of type {@link Type#NOT_EQUAL}.
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operations.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operations.java
index d7296a7..994f4bd 100644
--- a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operations.java
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/Operations.java
@@ -24,6 +24,9 @@ package org.apache.ignite.metastorage.common;
  * @see Operation
  */
 public final class Operations {
+    /** No-op operation singleton. */
+    private static final Operation.NoOp NO_OP = new Operation.NoOp();
+
     /**
      * Creates operation of type <i>remove</i>. This type of operation removes entry.
      *
@@ -49,7 +52,7 @@ public final class Operations {
      * @return Operation of type <i>noop</i>.
      */
     public static Operation noop() {
-        return new Operation(new Operation.NoOp());
+        return new Operation(NO_OP);
     }
 
     /**
diff --git a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchListener.java b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchListener.java
index 32785e0..1ed196e 100644
--- a/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchListener.java
+++ b/modules/metastorage-common/src/main/java/org/apache/ignite/metastorage/common/WatchListener.java
@@ -26,7 +26,7 @@ public interface WatchListener {
     /**
      * The method will be called on each meta storage update.
      *
-     * @param events A single event or batch.
+     * @param events A single event or a batch. The batch always contains updates for specific revision.
      * @return {@code True} if listener must continue event handling. If returns {@code false} then the listener and
      * corresponding watch will be unregistered.
      */