setTimeout(int timeout, TimeUnit timeUnit) {
- this.timeout = QueryUtils.validateTimeout(timeout, timeUnit);
+ this.timeout = CommonUtils.validateTimeout(timeout, timeUnit);
return this;
}
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index 7140c603e5cd8..4a8d52e81e770 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -79,13 +79,10 @@
* can be configured from Spring XML files (or other DI frameworks). Note that absolutely all configuration
* properties are optional, so users should only change what they need.
*/
-public class CacheConfiguration extends MutableConfiguration {
+public class CacheConfiguration extends MutableConfiguration implements CacheConfigurationDefaults {
/** */
private static final long serialVersionUID = 0L;
- /** Maximum number of partitions. */
- public static final int MAX_PARTITIONS_COUNT = 65000;
-
/**
* Default size of rebalance thread pool.
* @deprecated Use {@link IgniteConfiguration#DFLT_REBALANCE_THREAD_POOL_SIZE} instead.
@@ -114,37 +111,15 @@ public class CacheConfiguration extends MutableConfiguration {
@Deprecated
public static final long DFLT_REBALANCE_THROTTLE = IgniteConfiguration.DFLT_REBALANCE_THROTTLE;
- /** Default number of backups. */
- public static final int DFLT_BACKUPS = 0;
-
- /** Default caching mode. */
- public static final CacheMode DFLT_CACHE_MODE = CacheMode.PARTITIONED;
-
- /** Default atomicity mode. */
- public static final CacheAtomicityMode DFLT_CACHE_ATOMICITY_MODE = CacheAtomicityMode.ATOMIC;
-
- /**
- * Default lock timeout.
- * @deprecated Default lock timeout configuration property has no effect.
- */
- @Deprecated
- public static final long DFLT_LOCK_TIMEOUT = 0;
-
/** Default cache size to use with eviction policy. */
public static final int DFLT_CACHE_SIZE = 100000;
- /** Default maximum inline size for sql indexes. */
- public static final int DFLT_SQL_INDEX_MAX_INLINE_SIZE = -1;
-
/** Initial default near cache size. */
public static final int DFLT_NEAR_START_SIZE = 1500000 / 4;
/** Default value for 'invalidate' flag that indicates if this is invalidation-based cache. */
public static final boolean DFLT_INVALIDATE = false;
- /** Default rebalance mode for distributed cache. */
- public static final CacheRebalanceMode DFLT_REBALANCE_MODE = CacheRebalanceMode.ASYNC;
-
/**
* Default rebalance batch size in bytes.
* @deprecated Use {@link IgniteConfiguration#DFLT_REBALANCE_BATCH_SIZE} instead.
@@ -152,12 +127,6 @@ public class CacheConfiguration extends MutableConfiguration {
@Deprecated
public static final int DFLT_REBALANCE_BATCH_SIZE = IgniteConfiguration.DFLT_REBALANCE_BATCH_SIZE;
- /** Default value for eager ttl flag. */
- public static final boolean DFLT_EAGER_TTL = true;
-
- /** Default value for 'maxConcurrentAsyncOps'. */
- public static final int DFLT_MAX_CONCURRENT_ASYNC_OPS = 500;
-
/** Default value for 'writeBehindEnabled' flag. */
public static final boolean DFLT_WRITE_BEHIND_ENABLED = false;
@@ -179,15 +148,9 @@ public class CacheConfiguration extends MutableConfiguration {
/** Default write coalescing for write-behind cache store. */
public static final boolean DFLT_WRITE_BEHIND_COALESCING = true;
- /** Default maximum number of query iterators that can be stored. */
- public static final int DFLT_MAX_QUERY_ITERATOR_CNT = 1024;
-
/** Default value for load previous value flag. */
public static final boolean DFLT_LOAD_PREV_VAL = false;
- /** Default value for 'readFromBackup' flag. */
- public static final boolean DFLT_READ_FROM_BACKUP = true;
-
/** Filter that accepts all nodes. */
public static final IgnitePredicate ALL_NODES = new IgniteAllNodesPredicate();
@@ -195,9 +158,6 @@ public class CacheConfiguration extends MutableConfiguration {
@Deprecated
public static final long DFLT_LONG_QRY_WARN_TIMEOUT = 3000;
- /** Default number of queries detail metrics to collect. */
- public static final int DFLT_QRY_DETAIL_METRICS_SIZE = 0;
-
/** Default value for keep binary in store behavior . */
@SuppressWarnings({"UnnecessaryBoxing", "BooleanConstructorCall"})
public static final Boolean DFLT_STORE_KEEP_BINARY = new Boolean(false);
@@ -205,12 +165,6 @@ public class CacheConfiguration extends MutableConfiguration {
/** Default threshold for concurrent loading of keys from {@link CacheStore}. */
public static final int DFLT_CONCURRENT_LOAD_ALL_THRESHOLD = 5;
- /** Default partition loss policy. */
- public static final PartitionLossPolicy DFLT_PARTITION_LOSS_POLICY = PartitionLossPolicy.IGNORE;
-
- /** Default query parallelism. */
- public static final int DFLT_QUERY_PARALLELISM = 1;
-
/** Default value for events disabled flag. */
public static final boolean DFLT_EVENTS_DISABLED = false;
@@ -274,9 +228,6 @@ public class CacheConfiguration extends MutableConfiguration {
/** Platform cache configuration. Enables native cache in platforms (.NET, ...). */
private PlatformCacheConfiguration platformCfg;
- /** Default value for 'copyOnRead' flag. */
- public static final boolean DFLT_COPY_ON_READ = true;
-
/** Write synchronization mode. */
private CacheWriteSynchronizationMode writeSync;
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index 16d0bac76cf53..481bbdeae118a 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -105,7 +105,7 @@
* For more information about grid configuration and startup refer to {@link Ignition}
* documentation.
*/
-public class IgniteConfiguration {
+public class IgniteConfiguration implements IgniteConfigurationDefaults {
/** Courtesy notice log category. */
public static final String COURTESY_LOGGER_NAME = "org.apache.ignite.CourtesyConfigNotice";
@@ -166,18 +166,6 @@ public class IgniteConfiguration {
/** Default limit of threads used for rebalance. */
public static final int DFLT_REBALANCE_THREAD_POOL_SIZE = min(4, max(1, AVAILABLE_PROC_CNT / 4));
- /** Default rebalance message timeout in milliseconds (value is {@code 10000}). */
- public static final long DFLT_REBALANCE_TIMEOUT = 10000;
-
- /** Default rebalance batches prefetch count (value is {@code 3}). */
- public static final long DFLT_REBALANCE_BATCHES_PREFETCH_COUNT = 3;
-
- /** Time to wait between rebalance messages in milliseconds to avoid overloading CPU (value is {@code 0}). */
- public static final long DFLT_REBALANCE_THROTTLE = 0;
-
- /** Default rebalance batch size in bytes (value is {@code 512Kb}). */
- public static final int DFLT_REBALANCE_BATCH_SIZE = 512 * 1024; // 512K
-
/** Default size of system thread pool. */
public static final int DFLT_SYSTEM_CORE_THREAD_CNT = DFLT_PUBLIC_THREAD_CNT;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java b/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java
index f1f7883ea1961..3e4492cd0ca50 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java
@@ -238,7 +238,6 @@
import org.apache.ignite.internal.util.distributed.FullMessage;
import org.apache.ignite.internal.util.distributed.InitMessage;
import org.apache.ignite.internal.util.distributed.SingleNodeMessage;
-import org.apache.ignite.lang.IgniteProductVersion;
import org.apache.ignite.marshaller.Marshaller;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.plugin.extensions.communication.Message;
@@ -344,7 +343,6 @@ public CoreMessagesProvider(Marshaller dfltMarsh, Marshaller schemaAwareMarsh, C
withNoSchema(InetSocketAddressMessage.class);
withNoSchema(InetAddressMessage.class);
withNoSchema(TcpDiscoveryNode.class);
- withNoSchema(IgniteProductVersion.class);
withNoSchema(DiscoveryDataPacket.class);
withNoSchema(GridByteArrayList.class);
withNoSchema(CacheVersionedValue.class);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QuerySchema.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QuerySchema.java
index 6b5838ee824fa..0105eaa68b909 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QuerySchema.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QuerySchema.java
@@ -140,7 +140,7 @@ public QuerySchemaPatch makePatch(CacheConfiguration, ?> targetCfg, Collection
if (locEntities.containsKey(qryEntity.getTableName())) {
QueryEntity locEntity = locEntities.get(qryEntity.getTableName());
- QueryEntityPatch entityPatch = locEntity.makePatch(qryEntity);
+ QueryEntityPatch entityPatch = QueryUtils.makePatch(locEntity, qryEntity);
if (entityPatch.hasConflict()) {
if (conflicts.length() > 0)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
index 782012cc9da2a..916b6ad26a3f6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
@@ -20,15 +20,8 @@
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.SQLException;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -44,6 +37,7 @@
import org.apache.ignite.IgniteSystemProperties;
import org.apache.ignite.binary.BinaryField;
import org.apache.ignite.cache.QueryEntity;
+import org.apache.ignite.cache.QueryEntityPatch;
import org.apache.ignite.cache.QueryIndex;
import org.apache.ignite.cache.QueryIndexType;
import org.apache.ignite.cache.affinity.AffinityKeyMapper;
@@ -68,9 +62,12 @@
import org.apache.ignite.internal.processors.query.property.QueryPropertyAccessor;
import org.apache.ignite.internal.processors.query.property.QueryReadOnlyMethodsAccessor;
import org.apache.ignite.internal.processors.query.schema.SchemaOperationException;
+import org.apache.ignite.internal.processors.query.schema.operation.SchemaAbstractOperation;
+import org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableAddColumnOperation;
+import org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexCreateOperation;
+import org.apache.ignite.internal.util.CommonUtils;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.X;
-import org.apache.ignite.internal.util.typedef.internal.A;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -113,10 +110,10 @@ public class QueryUtils {
public static final String SCHEMA_INFORMATION = "INFORMATION_SCHEMA";
/** Field name for key. */
- public static final String KEY_FIELD_NAME = "_KEY";
+ public static final String KEY_FIELD_NAME = CommonUtils.KEY_FIELD_NAME;
/** Field name for value. */
- public static final String VAL_FIELD_NAME = "_VAL";
+ public static final String VAL_FIELD_NAME = CommonUtils.VAL_FIELD_NAME;
/** Well-known template name for PARTITIONED cache. */
public static final String TEMPLATE_PARTITIONED = "PARTITIONED";
@@ -131,9 +128,6 @@ public class QueryUtils {
private static final int DISCO_HIST_SIZE =
getInteger(IGNITE_INDEXING_DISCOVERY_HISTORY_SIZE, DFLT_INDEXING_DISCOVERY_HISTORY_SIZE);
- /** */
- private static final Set> SQL_TYPES = createSqlTypes();
-
/** Default SQL delimeter. */
public static final char DEFAULT_DELIM = '\n';
@@ -157,36 +151,6 @@ public class QueryUtils {
public static final ThreadLocal INCLUDE_SENSITIVE_TL =
ThreadLocal.withInitial(() -> DFLT_TO_STRING_INCLUDE_SENSITIVE);
- /**
- * Creates SQL types set.
- *
- * @return SQL types set.
- */
- @NotNull private static Set> createSqlTypes() {
- Set> sqlClasses = new HashSet<>(Arrays.>asList(
- Integer.class,
- Boolean.class,
- Byte.class,
- Short.class,
- Long.class,
- BigDecimal.class,
- Double.class,
- Float.class,
- Time.class,
- Timestamp.class,
- Date.class,
- java.sql.Date.class,
- LocalTime.class,
- LocalDate.class,
- LocalDateTime.class,
- String.class,
- UUID.class,
- byte[].class
- ));
-
- return sqlClasses;
- }
-
/**
* Get table name for entity.
*
@@ -1168,9 +1132,7 @@ private static boolean mustDeserializeBinary(GridKernalContext ctx, Class cls) {
* @return {@code true} If can.
*/
public static boolean isSqlType(Class> cls) {
- cls = U.box(cls);
-
- return SQL_TYPES.contains(cls) || U.isGeometryClass(cls);
+ return CommonUtils.isSqlType(cls);
}
/**
@@ -1231,22 +1193,6 @@ public static String typeName(Class> cls) {
return typeName;
}
- /**
- * @param timeout Timeout.
- * @param timeUnit Time unit.
- * @return Converted time.
- */
- public static int validateTimeout(int timeout, TimeUnit timeUnit) {
- A.ensure(timeUnit != TimeUnit.MICROSECONDS && timeUnit != TimeUnit.NANOSECONDS,
- "timeUnit minimal resolution is millisecond.");
-
- A.ensure(timeout >= 0, "timeout value should be non-negative.");
-
- long tmp = TimeUnit.MILLISECONDS.convert(timeout, timeUnit);
-
- return (int)tmp;
- }
-
/**
* @param ccfg Cache configuration.
* @return {@code true} If query index must be enabled for this cache.
@@ -1811,6 +1757,228 @@ public static IgniteInternalCache cacheForDML(IgniteInternalCache qryFieldsToAdd = checkFields(locEntity, target, conflicts);
+
+ Collection indexesToAdd = checkIndexes(locEntity, target, conflicts);
+
+ if (conflicts.length() != 0)
+ return QueryEntityPatch.conflict(locEntity.getTableName() + " conflict: \n" + conflicts.toString());
+
+ Collection patchOperations = new ArrayList<>();
+
+ if (!qryFieldsToAdd.isEmpty())
+ patchOperations.add(new SchemaAlterTableAddColumnOperation(
+ UUID.randomUUID(),
+ null,
+ null,
+ locEntity.getTableName(),
+ qryFieldsToAdd,
+ true,
+ true
+ ));
+
+ if (!indexesToAdd.isEmpty()) {
+ for (QueryIndex idx : indexesToAdd) {
+ patchOperations.add(new SchemaIndexCreateOperation(
+ UUID.randomUUID(),
+ null,
+ null,
+ locEntity.getTableName(),
+ idx,
+ true,
+ 0
+ ));
+ }
+ }
+
+ return QueryEntityPatch.patch(patchOperations);
+ }
+
+ /**
+ * Comparing local entity fields and target entity fields.
+ *
+ * @param target Query entity for check.
+ * @param conflicts Storage of conflicts.
+ * @return Fields which exist in target and not exist in local.
+ */
+ private static List checkFields(QueryEntity locEntity, QueryEntity target, StringBuilder conflicts) {
+ List qryFieldsToAdd = new ArrayList<>();
+
+ for (Map.Entry targetField : target.getFields().entrySet()) {
+ String targetFieldName = targetField.getKey();
+ String targetFieldType = targetField.getValue();
+ String targetFieldAlias = target.getAliases().get(targetFieldName);
+
+ if (locEntity.getFields().containsKey(targetFieldName)) {
+ checkEquals(
+ conflicts,
+ "alias of " + targetFieldName,
+ locEntity.getAliases().get(targetFieldName),
+ targetFieldAlias
+ );
+
+ checkEquals(
+ conflicts,
+ "fieldType of " + targetFieldName,
+ locEntity.getFields().get(targetFieldName),
+ targetFieldType
+ );
+
+ checkEquals(
+ conflicts,
+ "nullable of " + targetFieldName,
+ contains(locEntity.getNotNullFields(), targetFieldName),
+ contains(target.getNotNullFields(), targetFieldName)
+ );
+
+ checkEquals(
+ conflicts,
+ "default value of " + targetFieldName,
+ getFromMap(locEntity.getDefaultFieldValues(), targetFieldName),
+ getFromMap(target.getDefaultFieldValues(), targetFieldName)
+ );
+
+ checkEquals(conflicts,
+ "precision of " + targetFieldName,
+ getFromMap(locEntity.getFieldsPrecision(), targetFieldName),
+ getFromMap(target.getFieldsPrecision(), targetFieldName));
+
+ checkEquals(
+ conflicts,
+ "scale of " + targetFieldName,
+ getFromMap(locEntity.getFieldsScale(), targetFieldName),
+ getFromMap(target.getFieldsScale(), targetFieldName));
+ }
+ else {
+ boolean isAliasConflictsFound = findAliasConflicts(locEntity, targetFieldAlias, targetFieldName, conflicts);
+
+ if (!isAliasConflictsFound) {
+ Integer precision = getFromMap(target.getFieldsPrecision(), targetFieldName);
+ Integer scale = getFromMap(target.getFieldsScale(), targetFieldName);
+
+ qryFieldsToAdd.add(new QueryField(
+ targetFieldName,
+ targetFieldType,
+ targetFieldAlias,
+ !contains(target.getNotNullFields(), targetFieldName),
+ getFromMap(target.getDefaultFieldValues(), targetFieldName),
+ precision == null ? -1 : precision,
+ scale == null ? -1 : scale
+ ));
+ }
+ }
+ }
+
+ return qryFieldsToAdd;
+ }
+
+ /**
+ * Comparing local fields and target fields.
+ *
+ * @param target Query entity for check.
+ * @param conflicts Storage of conflicts.
+ * @return Indexes which exist in target and not exist in local.
+ */
+ @NotNull private static Collection checkIndexes(QueryEntity locEntity, QueryEntity target, StringBuilder conflicts) {
+ HashSet indexesToAdd = new HashSet<>();
+
+ Map curIndexes = new HashMap<>();
+
+ for (QueryIndex idx : locEntity.getIndexes()) {
+ if (curIndexes.put(idx.getName(), idx) != null)
+ throw new IllegalStateException("Duplicate key");
+ }
+
+ for (QueryIndex qryIdx : target.getIndexes()) {
+ if (curIndexes.containsKey(qryIdx.getName())) {
+ checkEquals(
+ conflicts,
+ "index " + qryIdx.getName(),
+ curIndexes.get(qryIdx.getName()),
+ qryIdx
+ );
+ }
+ else
+ indexesToAdd.add(qryIdx);
+ }
+ return indexesToAdd;
+ }
+
+ /**
+ * @param collection Collection for checking.
+ * @param elementToCheck Element for checking to containing in collection.
+ * @return {@code true} if collection contain elementToCheck.
+ */
+ private static boolean contains(Collection collection, String elementToCheck) {
+ return collection != null && collection.contains(elementToCheck);
+ }
+
+ /**
+ * @return Value from sourceMap or null if map is null.
+ */
+ private static V getFromMap(Map sourceMap, String key) {
+ return sourceMap == null ? null : sourceMap.get(key);
+ }
+
+ /**
+ * Comparing two objects and add formatted text to conflicts if needed.
+ *
+ * @param conflicts Storage of conflicts resulting error message.
+ * @param name Name of comparing object.
+ * @param local Local object.
+ * @param received Received object.
+ */
+ private static void checkEquals(StringBuilder conflicts, String name, V local, V received) {
+ if (!Objects.equals(local, received))
+ conflicts.append(String.format("%s is different: local=%s, received=%s\n", name, local, received));
+ }
+
+ /**
+ * Checks if received query entity field has the alias which is already used by a field on the local node.
+ *
+ * @return Whether conflicts were found.
+ */
+ private static boolean findAliasConflicts(
+ QueryEntity locEntity,
+ String targetFieldAlias,
+ String targetFieldName,
+ StringBuilder conflicts
+ ) {
+ for (Map.Entry entry : locEntity.getAliases().entrySet()) {
+ if (Objects.equals(entry.getValue(), targetFieldAlias)) {
+ conflicts.append(String.format(
+ "multiple fields are associated with the same alias: alias=%s, localField=%s, receivedField=%s\n",
+ targetFieldAlias,
+ entry.getKey(),
+ targetFieldName)
+ );
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
* Private constructor.
*/
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index c8ea0134a6ad5..1513346138589 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -356,9 +356,6 @@ public abstract class IgniteUtils extends CommonUtils {
/** Default buffer size = 4K. */
private static final int BUF_SIZE = 4096;
- /** Byte bit-mask. */
- private static final int MASK = 0xf;
-
/** Long date format pattern for log messages. */
public static final DateTimeFormatter LONG_DATE_FMT =
DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss").withZone(ZoneId.systemDefault());
@@ -377,9 +374,6 @@ public abstract class IgniteUtils extends CommonUtils {
/** Supplier of network interfaces. Could be used for tests purposes, must not be changed in production code. */
public static InterfaceSupplier INTERFACE_SUPPLIER = NetworkInterface::getNetworkInterfaces;
- /** Boxed class map. */
- private static final Map, Class>> boxedClsMap = new HashMap<>(16, .5f);
-
/** MAC OS invalid argument socket error message. */
public static final String MAC_INVALID_ARG_MSG = "On MAC OS you may have too many file descriptors open " +
"(simple restart usually solves the issue)";
@@ -486,16 +480,6 @@ public abstract class IgniteUtils extends CommonUtils {
jvm32Bit = "32".equals(jvmArchDataModel);
- boxedClsMap.put(byte.class, Byte.class);
- boxedClsMap.put(short.class, Short.class);
- boxedClsMap.put(int.class, Integer.class);
- boxedClsMap.put(long.class, Long.class);
- boxedClsMap.put(float.class, Float.class);
- boxedClsMap.put(double.class, Double.class);
- boxedClsMap.put(char.class, Character.class);
- boxedClsMap.put(boolean.class, Boolean.class);
- boxedClsMap.put(void.class, Void.class);
-
// Disable hostname SSL verification for development and testing with self-signed certificates.
if (Boolean.parseBoolean(System.getProperty(IGNITE_DISABLE_HOSTNAME_VERIFIER))) {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@@ -1802,23 +1786,6 @@ public static boolean hasParent(@Nullable ClassLoader parent, ClassLoader ldr) {
return true;
}
- /**
- * Writes byte array to output stream accounting for null values.
- *
- * @param out Output stream to write to.
- * @param arr Array to write, possibly null.
- * @throws java.io.IOException If write failed.
- */
- public static void writeByteArray(DataOutput out, @Nullable byte[] arr) throws IOException {
- if (arr == null)
- out.writeInt(-1);
- else {
- out.writeInt(arr.length);
-
- out.write(arr);
- }
- }
-
/**
* Writes byte array to output stream accounting for null values.
*
@@ -1838,26 +1805,6 @@ public static void writeByteArray(DataOutput out, @Nullable byte[] arr, int maxL
}
}
- /**
- * Reads byte array from input stream accounting for null values.
- *
- * @param in Stream to read from.
- * @return Read byte array, possibly null.
- * @throws java.io.IOException If read failed.
- */
- @Nullable public static byte[] readByteArray(DataInput in) throws IOException {
- int len = in.readInt();
-
- if (len == -1)
- return null; // Value "-1" indicates null.
-
- byte[] res = new byte[len];
-
- in.readFully(res);
-
- return res;
- }
-
/**
* Join byte arrays into single one.
*
@@ -2205,42 +2152,6 @@ public static boolean bytesEqual(byte[] a, int aOff, byte[] b, int bOff, int len
}
}
- /**
- * Converts an array of characters representing hexidecimal values into an
- * array of bytes of those same values. The returned array will be half the
- * length of the passed array, as it takes two characters to represent any
- * given byte. An exception is thrown if the passed char array has an odd
- * number of elements.
- *
- * @param data An array of characters containing hexidecimal digits
- * @return A byte array containing binary data decoded from
- * the supplied char array.
- * @throws IgniteCheckedException Thrown if an odd number or illegal of characters is supplied.
- */
- public static byte[] decodeHex(char[] data) throws IgniteCheckedException {
- int len = data.length;
-
- if ((len & 0x01) != 0)
- throw new IgniteCheckedException("Odd number of characters.");
-
- byte[] out = new byte[len >> 1];
-
- // Two characters form the hex value.
- for (int i = 0, j = 0; j < len; i++) {
- int f = toDigit(data[j], j) << 4;
-
- j++;
-
- f |= toDigit(data[j], j);
-
- j++;
-
- out[i] = (byte)(f & 0xFF);
- }
-
- return out;
- }
-
/**
* @param bytes Number of bytes to display.
* @param si If {@code true}, then unit base is 1000, otherwise unit base is 1024.
@@ -2757,40 +2668,6 @@ public static URL resolveSpringUrl(String springCfgPath) throws IgniteCheckedExc
return null;
}
- /**
- * Converts byte array to hex string.
- *
- * @param arr Array of bytes.
- * @return Hex string.
- */
- public static String byteArray2HexString(byte[] arr) {
- return byteArray2HexString(arr, true);
- }
-
- /**
- * Converts byte array to hex string.
- *
- * @param arr Array of bytes.
- * @param toUpper If {@code true} returns upper cased result.
- * @return Hex string.
- */
- public static String byteArray2HexString(byte[] arr, boolean toUpper) {
- StringBuilder sb = new StringBuilder(arr.length << 1);
-
- for (byte b : arr)
- addByteAsHex(sb, b);
-
- return toUpper ? sb.toString().toUpperCase() : sb.toString();
- }
-
- /**
- * @param sb String builder.
- * @param b Byte to add in hexadecimal format.
- */
- private static void addByteAsHex(StringBuilder sb, byte b) {
- sb.append(Integer.toHexString(MASK & b >>> 4)).append(Integer.toHexString(MASK & b));
- }
-
/**
* Checks for containment of the value in the array.
* Both array cells and value may be {@code null}. Two {@code null}s are considered equal.
@@ -5806,22 +5683,6 @@ public static long ensurePositive(long i, long dflt) {
return i <= 0 ? dflt : i;
}
- /**
- * Gets wrapper class for a primitive type.
- *
- * @param cls Class. If {@code null}, method is no-op.
- * @return Wrapper class or original class if it is non-primitive.
- */
- @Nullable public static Class> box(@Nullable Class> cls) {
- if (cls == null)
- return null;
-
- if (!cls.isPrimitive())
- return cls;
-
- return boxedClsMap.get(cls);
- }
-
/**
* Gets class for provided name. Accepts primitive types names.
*
@@ -6432,23 +6293,6 @@ public static IgniteCheckedException exceptionWithSuppressed(String msg, @Nullab
return e;
}
- /**
- * Converts a hexadecimal character to an integer.
- *
- * @param ch A character to convert to an integer digit
- * @param idx The index of the character in the source
- * @return An integer
- * @throws IgniteCheckedException Thrown if ch is an illegal hex character
- */
- public static int toDigit(char ch, int idx) throws IgniteCheckedException {
- int digit = Character.digit(ch, 16);
-
- if (digit == -1)
- throw new IgniteCheckedException("Illegal hexadecimal character " + ch + " at index " + idx);
-
- return digit;
- }
-
/**
* Gets oldest node out of collection of nodes.
*
diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
index f2190a1e86a41..08adcf1febb84 100644
--- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
+++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
@@ -26,6 +26,7 @@
import org.apache.ignite.internal.processors.cache.CacheObject;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
import org.apache.ignite.internal.util.GridLongList;
+import org.apache.ignite.lang.IgniteProductVersion;
import org.apache.ignite.lang.IgniteUuid;
/**
@@ -270,6 +271,11 @@ public default T readMessage() {
*/
public > M readMap(MessageMapType type, boolean compress);
+ /** @return Ignite product version. */
+ default IgniteProductVersion readIgniteProductVersion() {
+ return null;
+ }
+
/**
* Tells whether last invocation of any of {@code readXXX(...)}
* methods has fully written the value. {@code False} is returned
diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java
index c29e3ac093db9..02a6cff137da9 100644
--- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java
+++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java
@@ -26,6 +26,7 @@
import org.apache.ignite.internal.processors.cache.CacheObject;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
import org.apache.ignite.internal.util.GridLongList;
+import org.apache.ignite.lang.IgniteProductVersion;
import org.apache.ignite.lang.IgniteUuid;
import org.jetbrains.annotations.Nullable;
@@ -328,6 +329,16 @@ public default boolean writeMap(Map map, MessageMapType type) {
*/
public boolean writeMap(Map map, MessageMapType type, boolean compress);
+ /**
+ * Writes ignite product version.
+ *
+ * @param ver Version.
+ * @return Whether value was fully written.
+ */
+ default boolean writeIgniteProductVersion(IgniteProductVersion ver) {
+ return true;
+ }
+
/**
* @return Whether header of current message is already written.
*/
diff --git a/modules/thin-client/api/README.txt b/modules/thin-client/api/README.txt
new file mode 100644
index 0000000000000..a3562700500f6
--- /dev/null
+++ b/modules/thin-client/api/README.txt
@@ -0,0 +1,9 @@
+Apache Ignite Binary API Module
+------------------------
+
+ignite-thin-client-api module is internal module to separate thin-client API and implementation.
+Other modules like ignite-core must depend on ignite-thin-client-api, only.
+Implementation of API in ignite-thin-client-impl, it added in runtime.
+
+Note, class files of this module are copied in ignite-core.jar during project assembly
+to ensure compatibility with previous Ignite releases.
diff --git a/modules/thin-client/api/pom.xml b/modules/thin-client/api/pom.xml
new file mode 100644
index 0000000000000..d329d6d7522be
--- /dev/null
+++ b/modules/thin-client/api/pom.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+ 4.0.0
+
+
+ org.apache.ignite
+ ignite-parent-internal
+ ${revision}
+ ../../../parent-internal/pom.xml
+
+
+ ignite-thin-client-api
+
+ http://ignite.apache.org
+
+
+
+ ${project.groupId}
+ ignite-commons
+ provided
+
+
+
+ ${project.groupId}
+ ignite-binary-api
+ provided
+
+
+
+ org.jetbrains
+ annotations
+ ${jetbrains.annotations.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 2.8.2
+
+ false
+
+
+
+
+
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientAddressFinder.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAddressFinder.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientAddressFinder.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAddressFinder.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientAffinityConfiguration.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAffinityConfiguration.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientAffinityConfiguration.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAffinityConfiguration.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientAtomicConfiguration.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAtomicConfiguration.java
similarity index 98%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientAtomicConfiguration.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAtomicConfiguration.java
index 248265fdd7240..8d0ab76905ca2 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientAtomicConfiguration.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAtomicConfiguration.java
@@ -17,7 +17,6 @@
package org.apache.ignite.client;
-import org.apache.ignite.IgniteAtomicSequence;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.internal.util.typedef.internal.S;
import static org.apache.ignite.cache.CacheMode.PARTITIONED;
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientAtomicLong.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAtomicLong.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientAtomicLong.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAtomicLong.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientAuthenticationException.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAuthenticationException.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientAuthenticationException.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAuthenticationException.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientAuthorizationException.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAuthorizationException.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientAuthorizationException.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAuthorizationException.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientAutoCloseableIterator.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAutoCloseableIterator.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientAutoCloseableIterator.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientAutoCloseableIterator.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientCache.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCache.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientCache.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCache.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientCacheConfiguration.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCacheConfiguration.java
similarity index 94%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientCacheConfiguration.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCacheConfiguration.java
index 693832b30add7..04e8b597e124d 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientCacheConfiguration.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCacheConfiguration.java
@@ -26,9 +26,8 @@
import org.apache.ignite.cache.CacheWriteSynchronizationMode;
import org.apache.ignite.cache.PartitionLossPolicy;
import org.apache.ignite.cache.QueryEntity;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.DataStorageConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.configuration.CacheConfigurationDefaults;
+import org.apache.ignite.configuration.IgniteConfigurationDefaults;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.lang.IgniteExperimental;
import org.jetbrains.annotations.Nullable;
@@ -42,55 +41,55 @@ public final class ClientCacheConfiguration implements Serializable {
private String name;
/** @serial Atomicity mode. */
- private CacheAtomicityMode atomicityMode = CacheConfiguration.DFLT_CACHE_ATOMICITY_MODE;
+ private CacheAtomicityMode atomicityMode = CacheConfigurationDefaults.DFLT_CACHE_ATOMICITY_MODE;
/** @serial Backups. */
- private int backups = CacheConfiguration.DFLT_BACKUPS;
+ private int backups = CacheConfigurationDefaults.DFLT_BACKUPS;
/** @serial Cache mode. */
- private CacheMode cacheMode = CacheConfiguration.DFLT_CACHE_MODE;
+ private CacheMode cacheMode = CacheConfigurationDefaults.DFLT_CACHE_MODE;
/** @serial Eager TTL flag. */
- private boolean eagerTtl = CacheConfiguration.DFLT_EAGER_TTL;
+ private boolean eagerTtl = CacheConfigurationDefaults.DFLT_EAGER_TTL;
/** @serial Group name. */
private String grpName = null;
/** @serial Default lock timeout. */
- private long dfltLockTimeout = CacheConfiguration.DFLT_LOCK_TIMEOUT;
+ private long dfltLockTimeout = CacheConfigurationDefaults.DFLT_LOCK_TIMEOUT;
/** @serial Partition loss policy. */
- private PartitionLossPolicy partLossPlc = CacheConfiguration.DFLT_PARTITION_LOSS_POLICY;
+ private PartitionLossPolicy partLossPlc = CacheConfigurationDefaults.DFLT_PARTITION_LOSS_POLICY;
/** @serial Read from backup. */
- private boolean readFromBackup = CacheConfiguration.DFLT_READ_FROM_BACKUP;
+ private boolean readFromBackup = CacheConfigurationDefaults.DFLT_READ_FROM_BACKUP;
/** @serial Rebalance batch size. */
- private int rebalanceBatchSize = IgniteConfiguration.DFLT_REBALANCE_BATCH_SIZE;
+ private int rebalanceBatchSize = IgniteConfigurationDefaults.DFLT_REBALANCE_BATCH_SIZE;
/** @serial Rebalance batches prefetch count. */
- private long rebalanceBatchesPrefetchCnt = IgniteConfiguration.DFLT_REBALANCE_BATCHES_PREFETCH_COUNT;
+ private long rebalanceBatchesPrefetchCnt = IgniteConfigurationDefaults.DFLT_REBALANCE_BATCHES_PREFETCH_COUNT;
/** @serial Rebalance delay. */
private long rebalanceDelay = 0;
/** @serial Rebalance mode. */
- private CacheRebalanceMode rebalanceMode = CacheConfiguration.DFLT_REBALANCE_MODE;
+ private CacheRebalanceMode rebalanceMode = CacheConfigurationDefaults.DFLT_REBALANCE_MODE;
/** @serial Rebalance order. */
private int rebalanceOrder = 0;
/** @serial Rebalance throttle. */
- private long rebalanceThrottle = IgniteConfiguration.DFLT_REBALANCE_THROTTLE;
+ private long rebalanceThrottle = IgniteConfigurationDefaults.DFLT_REBALANCE_THROTTLE;
/** @serial Rebalance timeout. */
- private long rebalanceTimeout = IgniteConfiguration.DFLT_REBALANCE_TIMEOUT;
+ private long rebalanceTimeout = IgniteConfigurationDefaults.DFLT_REBALANCE_TIMEOUT;
/** @serial Write synchronization mode. */
private CacheWriteSynchronizationMode writeSynchronizationMode = CacheWriteSynchronizationMode.PRIMARY_SYNC;
/** @serial Copy on read. */
- private boolean cpOnRead = CacheConfiguration.DFLT_COPY_ON_READ;
+ private boolean cpOnRead = CacheConfigurationDefaults.DFLT_COPY_ON_READ;
/** @serial Data region name. */
private String dataRegionName = null;
@@ -99,25 +98,25 @@ public final class ClientCacheConfiguration implements Serializable {
private boolean statisticsEnabled = false;
/** @serial Max concurrent async operations. */
- private int maxConcurrentAsyncOperations = CacheConfiguration.DFLT_MAX_CONCURRENT_ASYNC_OPS;
+ private int maxConcurrentAsyncOperations = CacheConfigurationDefaults.DFLT_MAX_CONCURRENT_ASYNC_OPS;
/** @serial Max query iterators count. */
- private int maxQryIteratorsCnt = CacheConfiguration.DFLT_MAX_QUERY_ITERATOR_CNT;
+ private int maxQryIteratorsCnt = CacheConfigurationDefaults.DFLT_MAX_QUERY_ITERATOR_CNT;
/** @serial Onheap cache enabled. */
private boolean onheapCacheEnabled = false;
/** @serial Query detail metrics size. */
- private int qryDetailMetricsSize = CacheConfiguration.DFLT_QRY_DETAIL_METRICS_SIZE;
+ private int qryDetailMetricsSize = CacheConfigurationDefaults.DFLT_QRY_DETAIL_METRICS_SIZE;
/** @serial Query parallelism. */
- private int qryParallelism = CacheConfiguration.DFLT_QUERY_PARALLELISM;
+ private int qryParallelism = CacheConfigurationDefaults.DFLT_QUERY_PARALLELISM;
/** @serial Sql escape all. */
private boolean sqlEscapeAll = false;
/** @serial Sql index max inline size. */
- private int sqlIdxMaxInlineSize = CacheConfiguration.DFLT_SQL_INDEX_MAX_INLINE_SIZE;
+ private int sqlIdxMaxInlineSize = CacheConfigurationDefaults.DFLT_SQL_INDEX_MAX_INLINE_SIZE;
/** @serial Sql schema. */
private String sqlSchema = null;
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientCluster.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCluster.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientCluster.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCluster.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientClusterGroup.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientClusterGroup.java
similarity index 98%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientClusterGroup.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientClusterGroup.java
index 01f8d31ebb2cc..bde1c9b54083b 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientClusterGroup.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientClusterGroup.java
@@ -20,9 +20,7 @@
import java.util.Collection;
import java.util.UUID;
import java.util.function.Predicate;
-import org.apache.ignite.Ignition;
import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.configuration.IgniteConfiguration;
import org.jetbrains.annotations.Nullable;
/**
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientCollectionConfiguration.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCollectionConfiguration.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientCollectionConfiguration.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCollectionConfiguration.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientCompute.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCompute.java
similarity index 99%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientCompute.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCompute.java
index d97b99197efdf..ab307c44169b7 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientCompute.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientCompute.java
@@ -18,7 +18,6 @@
package org.apache.ignite.client;
import java.util.concurrent.Future;
-import org.apache.ignite.compute.ComputeTask;
import org.jetbrains.annotations.Nullable;
/**
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientConnectionException.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientConnectionException.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientConnectionException.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientConnectionException.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientDisconnectListener.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientDisconnectListener.java
similarity index 80%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientDisconnectListener.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientDisconnectListener.java
index e2c76b86be49a..ccacdf97fd422 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientDisconnectListener.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientDisconnectListener.java
@@ -18,12 +18,12 @@
package org.apache.ignite.client;
import javax.cache.configuration.CacheEntryListenerConfiguration;
-import org.apache.ignite.cache.query.ContinuousQuery;
/**
- * Client disconnected event listener. Such listeners can be used in {@link ClientCache#query(ContinuousQuery,
- * ClientDisconnectListener)} or {@link ClientCache#registerCacheEntryListener(CacheEntryListenerConfiguration,
- * ClientDisconnectListener)} methods to handle client channel failure.
+ * Client disconnected event listener. Such listeners can be used in
+ * {@link ClientCache#query(org.apache.ignite.cache.query.ContinuousQuery, ClientDisconnectListener)} or
+ * {@link ClientCache#registerCacheEntryListener(CacheEntryListenerConfiguration, ClientDisconnectListener)}
+ * methods to handle client channel failure.
*/
public interface ClientDisconnectListener {
/**
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientException.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientException.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientException.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientException.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientIgniteSet.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientIgniteSet.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientIgniteSet.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientIgniteSet.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientOperationType.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientOperationType.java
similarity index 97%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientOperationType.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientOperationType.java
index 913ec88107d52..bb8e318c08932 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientOperationType.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientOperationType.java
@@ -20,10 +20,6 @@
import java.util.Collection;
import java.util.Set;
import javax.cache.processor.EntryProcessor;
-import org.apache.ignite.cache.query.ContinuousQuery;
-import org.apache.ignite.cache.query.Query;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.cluster.ClusterState;
/**
* Client operation type.
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapper.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapper.java
similarity index 90%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapper.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapper.java
index 64ea78b928211..dc9af29bad0e7 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapper.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapper.java
@@ -17,10 +17,6 @@
package org.apache.ignite.client;
-import org.apache.ignite.cache.affinity.AffinityFunction;
-import org.apache.ignite.cache.affinity.AffinityKeyMapper;
-import org.apache.ignite.configuration.ClientConfiguration;
-
/**
* This function calculates the cache key to a partition mapping for each cache key. It is used only for local calculation on a client side.
*
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapperFactory.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapperFactory.java
similarity index 95%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapperFactory.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapperFactory.java
index c26421dda8454..d49aba72e7cf8 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapperFactory.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientPartitionAwarenessMapperFactory.java
@@ -17,9 +17,6 @@
package org.apache.ignite.client;
-import org.apache.ignite.cache.affinity.AffinityFunction;
-import org.apache.ignite.cache.affinity.AffinityKeyMapper;
-
/**
* This factory is used on the client side and only when the partition awareness thin client feature is enabled. By default,
* on a new cache the RendezvousAffinityFunction will be used for calculating mappings 'key-to-partition' and 'partition-to-node'.
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientReconnectedException.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientReconnectedException.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientReconnectedException.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientReconnectedException.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientRetryAllPolicy.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryAllPolicy.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientRetryAllPolicy.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryAllPolicy.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientRetryNonePolicy.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryNonePolicy.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientRetryNonePolicy.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryNonePolicy.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientRetryPolicy.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryPolicy.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientRetryPolicy.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryPolicy.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientRetryPolicyContext.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryPolicyContext.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientRetryPolicyContext.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryPolicyContext.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientRetryReadPolicy.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryReadPolicy.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientRetryReadPolicy.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientRetryReadPolicy.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientServiceDescriptor.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientServiceDescriptor.java
similarity index 98%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientServiceDescriptor.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientServiceDescriptor.java
index 1feba70a92ee8..75fe4621a8f3b 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientServiceDescriptor.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientServiceDescriptor.java
@@ -19,7 +19,6 @@
import java.util.UUID;
import org.apache.ignite.platform.PlatformType;
-import org.apache.ignite.services.Service;
import org.jetbrains.annotations.Nullable;
/**
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientServices.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientServices.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientServices.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientServices.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientTransaction.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientTransaction.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientTransaction.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientTransaction.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/ClientTransactions.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientTransactions.java
similarity index 96%
rename from modules/core/src/main/java/org/apache/ignite/client/ClientTransactions.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientTransactions.java
index c6db25b35775d..183439d4b88ba 100644
--- a/modules/core/src/main/java/org/apache/ignite/client/ClientTransactions.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/client/ClientTransactions.java
@@ -17,8 +17,6 @@
package org.apache.ignite.client;
-import org.apache.ignite.configuration.ClientConfiguration;
-import org.apache.ignite.configuration.ClientTransactionConfiguration;
import org.apache.ignite.internal.client.thin.ClientServerError;
import org.apache.ignite.transactions.TransactionConcurrency;
import org.apache.ignite.transactions.TransactionIsolation;
diff --git a/modules/core/src/main/java/org/apache/ignite/client/IgniteClient.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/IgniteClient.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/IgniteClient.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/IgniteClient.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/IgniteClientFuture.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/IgniteClientFuture.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/IgniteClientFuture.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/IgniteClientFuture.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/SslMode.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/SslMode.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/SslMode.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/SslMode.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/SslProtocol.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/SslProtocol.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/SslProtocol.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/SslProtocol.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ClientFailEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientFailEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ClientFailEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientFailEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ClientLifecycleEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientLifecycleEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ClientLifecycleEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientLifecycleEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ClientLifecycleEventListener.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientLifecycleEventListener.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ClientLifecycleEventListener.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientLifecycleEventListener.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ClientStartEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientStartEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ClientStartEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientStartEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ClientStopEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientStopEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ClientStopEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ClientStopEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ConnectionClosedEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ConnectionClosedEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ConnectionClosedEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ConnectionClosedEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ConnectionDescription.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ConnectionDescription.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ConnectionDescription.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ConnectionDescription.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ConnectionEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ConnectionEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ConnectionEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ConnectionEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/ConnectionEventListener.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ConnectionEventListener.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/ConnectionEventListener.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/ConnectionEventListener.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/HandshakeFailEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/HandshakeFailEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/HandshakeFailEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/HandshakeFailEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/HandshakeStartEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/HandshakeStartEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/HandshakeStartEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/HandshakeStartEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/HandshakeSuccessEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/HandshakeSuccessEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/HandshakeSuccessEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/HandshakeSuccessEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/RequestEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/RequestEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/RequestEventListener.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestEventListener.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/RequestEventListener.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestEventListener.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/RequestFailEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestFailEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/RequestFailEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestFailEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/RequestStartEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestStartEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/RequestStartEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestStartEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/events/RequestSuccessEvent.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestSuccessEvent.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/events/RequestSuccessEvent.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/events/RequestSuccessEvent.java
diff --git a/modules/core/src/main/java/org/apache/ignite/client/package-info.java b/modules/thin-client/api/src/main/java/org/apache/ignite/client/package-info.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/client/package-info.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/client/package-info.java
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/ClientConfiguration.java b/modules/thin-client/api/src/main/java/org/apache/ignite/configuration/ClientConfiguration.java
similarity index 99%
rename from modules/core/src/main/java/org/apache/ignite/configuration/ClientConfiguration.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/configuration/ClientConfiguration.java
index 8badaa9fd93a8..58b99f92429dd 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/ClientConfiguration.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/configuration/ClientConfiguration.java
@@ -27,7 +27,6 @@
import javax.net.ssl.SSLContext;
import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.cache.query.IndexQuery;
import org.apache.ignite.cache.query.ScanQuery;
import org.apache.ignite.client.ClientAddressFinder;
import org.apache.ignite.client.ClientPartitionAwarenessMapper;
@@ -37,7 +36,6 @@
import org.apache.ignite.client.ClientTransactions;
import org.apache.ignite.client.SslMode;
import org.apache.ignite.client.SslProtocol;
-import org.apache.ignite.internal.client.thin.TcpIgniteClient;
import org.apache.ignite.internal.util.typedef.internal.LT;
import org.apache.ignite.internal.util.typedef.internal.S;
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/ClientTransactionConfiguration.java b/modules/thin-client/api/src/main/java/org/apache/ignite/configuration/ClientTransactionConfiguration.java
similarity index 98%
rename from modules/core/src/main/java/org/apache/ignite/configuration/ClientTransactionConfiguration.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/configuration/ClientTransactionConfiguration.java
index fd1d50f8008a9..ddde73b1c7b75 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/ClientTransactionConfiguration.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/configuration/ClientTransactionConfiguration.java
@@ -19,7 +19,6 @@
import java.io.Serializable;
import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionConcurrency;
import org.apache.ignite.transactions.TransactionIsolation;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientError.java b/modules/thin-client/api/src/main/java/org/apache/ignite/internal/client/thin/ClientError.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientError.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/internal/client/thin/ClientError.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientServerError.java b/modules/thin-client/api/src/main/java/org/apache/ignite/internal/client/thin/ClientServerError.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientServerError.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/internal/client/thin/ClientServerError.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java b/modules/thin-client/api/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
similarity index 93%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
rename to modules/thin-client/api/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
index 6c4a3fa676c0f..b3287169a2e3c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
+++ b/modules/thin-client/api/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
@@ -20,12 +20,6 @@
import java.util.BitSet;
import java.util.Collection;
import java.util.EnumSet;
-import org.apache.ignite.client.ClientCacheConfiguration;
-import org.apache.ignite.client.ClientServices;
-import org.apache.ignite.cluster.ClusterState;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheProcessor;
/**
* Defines supported bitmask features for thin client.
diff --git a/modules/thin-client/impl/pom.xml b/modules/thin-client/impl/pom.xml
new file mode 100644
index 0000000000000..772e79f6d51e9
--- /dev/null
+++ b/modules/thin-client/impl/pom.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+ 4.0.0
+
+
+ org.apache.ignite
+ ignite-parent-internal
+ ${revision}
+ ../../../parent-internal/pom.xml
+
+
+ ignite-thin-client-impl
+
+ http://ignite.apache.org
+
+
+
+ ${project.groupId}
+ ignite-commons
+ provided
+
+
+
+ ${project.groupId}
+ ignite-binary-api
+ provided
+
+
+
+ ${project.groupId}
+ ignite-thin-client-api
+ provided
+
+
+
+ org.jetbrains
+ annotations
+ ${jetbrains.annotations.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 2.8.2
+
+ false
+
+
+
+
+
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/BinaryNameMapperMode.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/BinaryNameMapperMode.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/BinaryNameMapperMode.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/BinaryNameMapperMode.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientCacheEntry.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientCacheEntry.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientCacheEntry.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientCacheEntry.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientFieldsQueryCursor.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientFieldsQueryCursor.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientFieldsQueryCursor.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientFieldsQueryCursor.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheAdapter.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheAdapter.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheAdapter.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheAdapter.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheEntryListenerAdapter.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheEntryListenerAdapter.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheEntryListenerAdapter.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheEntryListenerAdapter.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientNotificationType.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientNotificationType.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientNotificationType.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientNotificationType.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientOperation.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientOperation.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientOperation.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientOperation.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientProtocolError.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientProtocolError.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientProtocolError.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientProtocolError.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientQueryCursor.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientQueryCursor.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientQueryCursor.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientQueryCursor.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientRetryPolicyContextImpl.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientRetryPolicyContextImpl.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientRetryPolicyContextImpl.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ClientRetryPolicyContextImpl.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/FieldsQueryPager.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/FieldsQueryPager.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/FieldsQueryPager.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/FieldsQueryPager.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/IgniteClientFutureImpl.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/IgniteClientFutureImpl.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/IgniteClientFutureImpl.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/IgniteClientFutureImpl.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/NotificationListener.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/NotificationListener.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/NotificationListener.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/NotificationListener.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolContext.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ProtocolContext.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolContext.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ProtocolContext.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersion.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersion.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersion.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersion.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersionFeature.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersionFeature.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersionFeature.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersionFeature.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/QueryPager.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/QueryPager.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/QueryPager.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/QueryPager.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnection.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnection.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnection.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnection.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnectionMultiplexer.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnectionMultiplexer.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnectionMultiplexer.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnectionMultiplexer.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnectionStateHandler.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnectionStateHandler.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnectionStateHandler.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientConnectionStateHandler.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientMessageDecoder.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientMessageDecoder.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientMessageDecoder.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientMessageDecoder.java
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientMessageHandler.java b/modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientMessageHandler.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/ClientMessageHandler.java
rename to modules/thin-client/impl/src/main/java/org/apache/ignite/internal/client/thin/io/ClientMessageHandler.java
diff --git a/pom.xml b/pom.xml
index 02103bcccd055..f84aaa792e262 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,6 +42,8 @@
modules/commons
modules/binary/api
modules/binary/impl
+ modules/thin-client/api
+ modules/thin-client/impl
modules/unsafe
modules/core
modules/compress