Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
46c1a71
WIP
nizhikov May 13, 2026
ea5cc9d
WIP
nizhikov May 14, 2026
ddc1cd3
WIP
nizhikov May 14, 2026
998f9f3
WIP
nizhikov May 15, 2026
c77b0bf
WIP
nizhikov May 15, 2026
6091eb1
WIP
nizhikov May 15, 2026
0b6a780
WIP
nizhikov May 15, 2026
579f2cf
WIP
nizhikov May 15, 2026
a49de7f
WIP
nizhikov May 15, 2026
aad04bd
Merge branch 'master' into thin-client-module
nizhikov May 18, 2026
23d2437
WIP
nizhikov May 18, 2026
c5a9be4
WIP
nizhikov May 18, 2026
6f823f8
WIP
nizhikov May 18, 2026
39c12ac
WIP
nizhikov May 18, 2026
b883442
WIP
nizhikov May 18, 2026
56a788a
WIP
nizhikov May 18, 2026
f357bbb
WIP
nizhikov May 18, 2026
1a58cfb
WIP
nizhikov May 19, 2026
db17ecf
Merge branch 'master' into thin-client-module
nizhikov May 22, 2026
95098ff
WIP
nizhikov May 22, 2026
0c0b7a3
IGNITE-28207 Thin client API extraction
nizhikov May 22, 2026
6ed8e86
IGNITE-28207 Thin client API extraction
nizhikov May 22, 2026
9321063
IGNITE-28207 Thin client API extraction
nizhikov May 22, 2026
28fe58c
IGNITE-28207 Thin client API extraction
nizhikov May 22, 2026
43d2de1
Merge branch 'master' into IGNITE-28717
nizhikov May 27, 2026
4781cc5
IGNITE-28720 Remove Message interface from IgniteProductVersion
nizhikov May 27, 2026
8b7e26f
IGNITE-28720 Remove Message interface from IgniteProductVersion
nizhikov May 27, 2026
50bac4c
IGNITE-28720 Remove Message interface from IgniteProductVersion
nizhikov May 28, 2026
2aea728
Merge branch 'master' into IGNITE-28717
nizhikov May 28, 2026
f539f2e
IGNITE-28733 Move QueryEntityPatch to internal
nizhikov May 28, 2026
b9680d2
IGNITE-28733 Move QueryEntityPatch to internal
nizhikov May 28, 2026
496246d
IGNITE-28733 Move QueryEntityPatch to internal
nizhikov May 28, 2026
7986e12
IGNITE-28733 Move QueryEntityPatch to internal
nizhikov May 28, 2026
a9cedd5
Merge branch 'master' into IGNITE-28717
nizhikov May 28, 2026
62a5156
Revert "IGNITE-28733 Move QueryEntityPatch to internal"
nizhikov May 28, 2026
e00ca4e
Revert "IGNITE-28733 Move QueryEntityPatch to internal"
nizhikov May 28, 2026
5266b2f
Fix compatibility tests
nizhikov May 28, 2026
8994bbd
Fix compatibility tests
nizhikov May 28, 2026
34f1dd7
Fix compatibility tests
nizhikov May 28, 2026
4f2a992
Fix compatibility tests
nizhikov May 29, 2026
05d3666
Merge branch 'IGNITE-28717' into IGNITE-28817
nizhikov May 29, 2026
160c9a9
Fix compatibility tests
nizhikov May 29, 2026
b0019c1
Fix compatibility tests
nizhikov May 29, 2026
8abe658
Fix compatibility tests
nizhikov May 29, 2026
6450ec0
Fix compatibility tests
nizhikov May 29, 2026
5b983de
Fix compatibility tests
nizhikov May 29, 2026
e1c23a8
Fix compatibility tests
nizhikov May 29, 2026
20d387e
Fix compatibility tests
nizhikov May 29, 2026
4d0b7a4
Merge branch 'master' into IGNITE-28817
nizhikov Jun 3, 2026
65d30b8
Fix compatibility tests
nizhikov Jun 3, 2026
197d451
Fix compatibility tests
nizhikov Jun 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions assembly/dependencies-apache-ignite-lgpl.xml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@
<exclude>${project.groupId}:ignite-binary-api</exclude>
<exclude>${project.groupId}:ignite-binary-impl</exclude>
<exclude>${project.groupId}:ignite-thin-client-api</exclude>
<exclude>${project.groupId}:ignite-thin-client-impl</exclude>
<exclude>${project.groupId}:ignite-clients</exclude>
<exclude>${project.groupId}:ignite-spring</exclude>
<exclude>${project.groupId}:ignite-tools</exclude>
Expand Down
1 change: 1 addition & 0 deletions assembly/dependencies-apache-ignite-slim.xml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@
<exclude>${project.groupId}:ignite-binary-api</exclude>
<exclude>${project.groupId}:ignite-binary-impl</exclude>
<exclude>${project.groupId}:ignite-thin-client-api</exclude>
<exclude>${project.groupId}:ignite-thin-client-impl</exclude>
<exclude>${project.groupId}:ignite-clients</exclude>
<exclude>${project.groupId}:ignite-spring</exclude>
<exclude>${project.groupId}:ignite-tools</exclude>
Expand Down
1 change: 1 addition & 0 deletions assembly/dependencies-apache-ignite.xml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@
<exclude>${project.groupId}:ignite-binary-api</exclude>
<exclude>${project.groupId}:ignite-binary-impl</exclude>
<exclude>${project.groupId}:ignite-thin-client-api</exclude>
<exclude>${project.groupId}:ignite-thin-client-impl</exclude>
<exclude>${project.groupId}:ignite-clients</exclude>
<exclude>${project.groupId}:ignite-spring</exclude>
<exclude>${project.groupId}:ignite-tools</exclude>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
Expand Down Expand Up @@ -62,13 +63,21 @@
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteCommonsSystemProperties;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.binary.BinaryCollectionFactory;
import org.apache.ignite.binary.BinaryIdMapper;
import org.apache.ignite.binary.BinaryInvalidTypeException;
import org.apache.ignite.binary.BinaryMapFactory;
import org.apache.ignite.binary.BinaryNameMapper;
import org.apache.ignite.binary.BinaryObject;
import org.apache.ignite.binary.BinaryObjectException;
import org.apache.ignite.binary.BinarySerializer;
import org.apache.ignite.binary.BinaryType;
import org.apache.ignite.binary.BinaryTypeConfiguration;
import org.apache.ignite.binary.Binarylizable;
import org.apache.ignite.cache.CacheKeyConfiguration;
import org.apache.ignite.cache.affinity.AffinityKeyMapped;
import org.apache.ignite.configuration.BinaryConfiguration;
import org.apache.ignite.internal.binary.streams.BinaryInputStream;
import org.apache.ignite.internal.binary.streams.BinaryOutputStream;
import org.apache.ignite.internal.util.CommonUtils;
Expand Down Expand Up @@ -176,6 +185,10 @@ TreeSet.class, new BinaryTreeSetWriteReplacer()
/** FNV1 hash prime. */
private static final int FNV1_PRIME = 0x01000193;

/** For tests. */
@SuppressWarnings("PublicField")
public static boolean useTestBinaryCtx;

/** */
public static final BinariesFactory binariesFactory;

Expand Down Expand Up @@ -3067,6 +3080,169 @@ public static int hashCode(byte[] data, int startPos, int endPos) {
return hash;
}

/** @return Empty binary context instance. */
public static BinaryContext binaryContext(
BinaryMetadataHandler metaHnd,
BinaryMarshaller marsh,
BinaryConfiguration bcfg,
String igniteInstanceName,
ClassLoader clsLdr,
CacheKeyConfiguration[] cacheKeyCfgs,
IgniteLogger log
) {
return useTestBinaryCtx
? new TestBinaryContext(
metaHnd,
marsh,
igniteInstanceName,
clsLdr,
bcfg.getSerializer(),
bcfg.getIdMapper(),
bcfg.getNameMapper(),
bcfg.getTypeConfigurations(),
affinityFields(cacheKeyCfgs),
bcfg.isCompactFooter(),
BinaryUtils::affinityFieldName,
log
)
: new BinaryContext(
metaHnd,
marsh,
igniteInstanceName,
clsLdr,
bcfg.getSerializer(),
bcfg.getIdMapper(),
bcfg.getNameMapper(),
bcfg.getTypeConfigurations(),
affinityFields(cacheKeyCfgs),
bcfg.isCompactFooter(),
BinaryUtils::affinityFieldName,
log
);
}

/**
* @param keyCfgs Key configurations.
* @return Type name to affinity key field name mapping.
*/
public static Map<String, String> affinityFields(CacheKeyConfiguration[] keyCfgs) {
Map<String, String> affFields = new HashMap<>();

if (F.isEmpty(keyCfgs))
return affFields;

for (CacheKeyConfiguration keyCfg : keyCfgs)
affFields.put(keyCfg.getTypeName(), keyCfg.getAffinityKeyFieldName());

return affFields;
}

/**
* @param cls Class to get affinity field for.
* @return Affinity field name or {@code null} if field name was not found.
*/
public static String affinityFieldName(Class cls) {
for (; cls != Object.class && cls != null; cls = cls.getSuperclass()) {
for (Field f : cls.getDeclaredFields()) {
if (f.getAnnotation(AffinityKeyMapped.class) != null)
return f.getName();
}
}

return null;
}

/** */
@SuppressWarnings("PublicInnerClass")
public static class TestBinaryContext extends BinaryContext {
/** */
private List<TestBinaryContextListener> listeners;

/** */
public TestBinaryContext(
BinaryMetadataHandler metaHnd,
@Nullable BinaryMarshaller marsh,
@Nullable String igniteInstanceName,
@Nullable ClassLoader clsLdr,
@Nullable BinarySerializer dfltSerializer,
@Nullable BinaryIdMapper idMapper,
@Nullable BinaryNameMapper nameMapper,
@Nullable Collection<BinaryTypeConfiguration> typeCfgs,
Map<String, String> affFlds,
boolean compactFooter,
Function<Class<?>, String> affFldNameProvider,
IgniteLogger log
) {
super(
metaHnd,
marsh,
igniteInstanceName,
clsLdr,
dfltSerializer,
idMapper,
nameMapper,
typeCfgs,
affFlds,
compactFooter,
affFldNameProvider,
log
);
}


/** {@inheritDoc} */
@Nullable @Override public BinaryType metadata(int typeId) throws BinaryObjectException {
BinaryType metadata = super.metadata(typeId);

if (listeners != null) {
for (TestBinaryContextListener listener : listeners)
listener.onAfterMetadataRequest(typeId, metadata);
}

return metadata;
}

/** {@inheritDoc} */
@Override public void updateMetadata(int typeId, BinaryMetadata meta, boolean failIfUnregistered) throws BinaryObjectException {
if (listeners != null) {
for (TestBinaryContextListener listener : listeners)
listener.onBeforeMetadataUpdate(typeId, meta);
}

super.updateMetadata(typeId, meta, failIfUnregistered);
}

/** */
public interface TestBinaryContextListener {
/**
* @param typeId Type id.
* @param type Type.
*/
void onAfterMetadataRequest(int typeId, BinaryType type);

/**
* @param typeId Type id.
* @param metadata Metadata.
*/
void onBeforeMetadataUpdate(int typeId, BinaryMetadata metadata);
}

/** @param lsnr Listener. */
public void addListener(TestBinaryContextListener lsnr) {
if (listeners == null)
listeners = new ArrayList<>();

if (!listeners.contains(lsnr))
listeners.add(lsnr);
}

/** */
public void clearAllListener() {
if (listeners != null)
listeners.clear();
}
}

/**
* Enum type.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,13 @@
import java.util.Objects;
import java.util.function.Consumer;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteCommonsSystemProperties;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteSystemProperties;
import org.apache.ignite.internal.ClassSet;
import org.apache.ignite.plugin.PluginProvider;
import org.jetbrains.annotations.Nullable;

import static org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHALLER_BLACKLIST;
import static org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION;

/**
* Utility marshaller methods.
Expand Down Expand Up @@ -81,7 +80,7 @@ public static IgniteMarshallerClassFilter classNameFilter(ClassLoader clsLdr) th
* @throws IgniteCheckedException if autoconfiguration failed.
*/
public static void autoconfigureObjectInputFilter(IgniteMarshallerClassFilter clsFilter) throws IgniteCheckedException {
if (!IgniteSystemProperties.getBoolean(IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION, true))
if (!IgniteCommonsSystemProperties.getBoolean(IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION, true))
return;

synchronized (MUX) {
Expand Down Expand Up @@ -116,7 +115,7 @@ else if (objFilter instanceof IgniteObjectInputFilter) {
private static ClassSet classWhiteList(ClassLoader clsLdr) throws IgniteCheckedException {
ClassSet clsSet = null;

String fileName = IgniteSystemProperties.getString(IgniteSystemProperties.IGNITE_MARSHALLER_WHITELIST);
String fileName = IgniteCommonsSystemProperties.getString(IgniteCommonsSystemProperties.IGNITE_MARSHALLER_WHITELIST);

if (fileName != null) {
clsSet = new ClassSet();
Expand All @@ -139,7 +138,7 @@ private static ClassSet classBlackList(ClassLoader clsLdr) throws IgniteCheckedE

addClassNames(DEFAULT_BLACKLIST_CLS_NAMES_FILE, clsSet, clsLdr);

String blackListFileName = IgniteSystemProperties.getString(IGNITE_MARSHALLER_BLACKLIST);
String blackListFileName = IgniteCommonsSystemProperties.getString(IgniteCommonsSystemProperties.IGNITE_MARSHALLER_BLACKLIST);

if (blackListFileName != null)
addClassNames(blackListFileName, clsSet, clsLdr);
Expand Down
5 changes: 5 additions & 0 deletions modules/bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,11 @@
<artifactId>ignite-thin-client-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ignite-thin-client-impl</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ignite-codegen</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@

import java.io.Serializable;
import org.apache.ignite.internal.util.GridLogThrottle;
import org.apache.ignite.lang.IgniteExperimental;
import org.jetbrains.annotations.Nullable;

import static org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
import static org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
import static org.apache.ignite.internal.util.CommonUtils.DFLT_MEMORY_PER_BYTE_COPY_THRESHOLD;
import static org.apache.ignite.internal.util.GridLogThrottle.DFLT_LOG_THROTTLE_CAPACITY;
import static org.apache.ignite.internal.util.nio.GridNioRecoveryDescriptor.DFLT_NIO_RECOVERY_DESCRIPTOR_RESERVATION_TIMEOUT;
import static org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_COLLECTION_LIMIT;
import static org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_INCLUDE_SENSITIVE;
import static org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_MAX_LENGTH;
Expand Down Expand Up @@ -153,6 +155,45 @@ public class IgniteCommonsSystemProperties {
"memory block is released. This will help to recognize cases when already released memory is accessed")
public static final String IGNITE_OFFHEAP_SAFE_RELEASE = "IGNITE_OFFHEAP_SAFE_RELEASE";

/** Human-readable ID of a data center where the node is running. */
@IgniteExperimental
@SystemProperty(value = "Data Center ID where local node is running. Not required for a single Data Center deployments",
type = String.class)
public static final String IGNITE_DATA_CENTER_ID = "IGNITE_DATA_CENTER_ID";

/**
* If this parameter is set to true, Ignite will automatically configure an ObjectInputFilter instance for the
* current JVM it is running in.
* Default value is {@code true}.
*/
@SystemProperty(
value = "If this parameter is set to true, Ignite will automatically configure an ObjectInputFilter" +
" instance for the current JVM it is running in. Filtering is based on class lists defined by the" +
" `IGNITE_MARSHALLER_WHITELIST` and `IGNITE_MARSHALLER_BLACKLIST` system properties or their default values." +
" Disabling it is not recommended because the Ignite host may be vulnerable to RCE attacks based on Java" +
" serialization mechanisms",
defaults = "true"
)
public static final String IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION = "IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION";

/** Defines path to the file that contains list of classes allowed to safe deserialization.*/
@SystemProperty(value = "Path to the file that contains list of classes allowed to safe deserialization",
type = String.class)
public static final String IGNITE_MARSHALLER_WHITELIST = "IGNITE_MARSHALLER_WHITELIST";

/** Defines path to the file that contains list of classes disallowed to safe deserialization.*/
@SystemProperty(value = "Path to the file that contains list of classes disallowed to safe deserialization",
type = String.class)
public static final String IGNITE_MARSHALLER_BLACKLIST = "IGNITE_MARSHALLER_BLACKLIST";

/**
* Sets timeout for TCP client recovery descriptor reservation.
*/
@SystemProperty(value = "Timeout for TCP client recovery descriptor reservation in milliseconds",
type = Long.class, defaults = "" + DFLT_NIO_RECOVERY_DESCRIPTOR_RESERVATION_TIMEOUT)
public static final String IGNITE_NIO_RECOVERY_DESCRIPTOR_RESERVATION_TIMEOUT =
"IGNITE_NIO_RECOVERY_DESCRIPTOR_RESERVATION_TIMEOUT";

/**
* @param enumCls Enum type.
* @param name Name of the system property or environment variable.
Expand Down
Loading
Loading