[
https://issues.apache.org/jira/browse/IGNITE-23190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17884215#comment-17884215
]
Ignite TC Bot commented on IGNITE-23190:
----------------------------------------
{panel:title=Branch: [pull/11541/head] Base: [master] : No blockers
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}
{panel:title=Branch: [pull/11541/head] Base: [master] : New Tests
(1)|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}
{color:#00008b}Client Nodes{color} [[tests
1|https://ci2.ignite.apache.org/viewLog.html?buildId=8074780]]
* {color:#013220}IgniteClientReconnectTestSuite:
IgniteClientReconnectDeploymentTest.testDeployDuringReconnect - PASSED{color}
{panel}
[TeamCity *--> Run :: All*
Results|https://ci2.ignite.apache.org/viewLog.html?buildId=8074855&buildTypeId=IgniteTests24Java8_RunAll]
> Client node deployment manager can be broken on client disconnection
> --------------------------------------------------------------------
>
> Key: IGNITE-23190
> URL: https://issues.apache.org/jira/browse/IGNITE-23190
> Project: Ignite
> Issue Type: Bug
> Reporter: Aleksey Plekhanov
> Assignee: Aleksey Plekhanov
> Priority: Major
> Labels: ise
> Time Spent: 40m
> Remaining Estimate: 0h
>
> On client disconnect we call {{onDisconnected}} method for each grid
> component. For {{GridDeploymentManager}} this callback stops and starts again
> deployment stores (including local deployment store).
> If some process registers a class between client disconnection and client
> reconnection (default timeout between before reconnection is 10 seconds) -
> new local deployment will be registered in local deployment store, but this
> deployment will be binded to the old node id (node id is regenerated on
> reconnect). All futher class registrations with the same local classloader
> will use the same deployment and will throw an exception.
> Reproducer:
> {code:java}
> @WithSystemProperty(key = IGNITE_DISCO_FAILED_CLIENT_RECONNECT_DELAY, value =
> "1000")
> public class IgniteClientReconnectDeploymentTest extends
> IgniteClientReconnectAbstractTest {
> /** {@inheritDoc} */
> @Override protected int serverCount() {
> return 1;
> }
> /** {@inheritDoc} */
> @Override protected int clientCount() {
> return 1;
> }
> /** {@inheritDoc} */
> @Override protected IgniteConfiguration getConfiguration(String
> igniteInstanceName) throws Exception {
> return
> super.getConfiguration(igniteInstanceName).setPeerClassLoadingEnabled(true);
> }
> /**
> * @throws Exception If failed.
> */
> @Test
> public void testDeploy() throws Exception {
> IgniteEx client = grid(serverCount());
> Ignite srv = ignite(0);
> IgniteCache<Integer, Integer> cache =
> client.getOrCreateCache("test_cache");
> reconnectClientNode(client, srv, () -> {
> try {
> client.context().deploy().deploy(TestEntryProcessor.class,
> TestEntryProcessor.class.getClassLoader());
> }
> catch (IgniteCheckedException e) {
> throw new AssertionError(e);
> }
> });
> cache.invoke(0, new TestEntryProcessor());
> }
> /** */
> private static class TestEntryProcessor implements
> EntryProcessor<Integer, Integer, Boolean> {
> /** {@inheritDoc} */
> @Override public Boolean process(MutableEntry<Integer, Integer>
> entry, Object... args) {
> return true;
> }
> }
> }
> {code}
> Shows a warning:
> {noformat}
> [WARN
> ][test-runner-#137%internal.IgniteClientReconnectDeploymentTest%][GridCacheDeploymentManager]
> Should not use deployment to prepare deployable, because local node id does
> not correspond with class loader id, and there are no more participants
> [locNodeId=061e738c-b0d5-4f19-bef9-c220a77619a3,
> deployment=GridDeploymentInfoBean
> [clsLdrId=a1f5ca0e191-914c1515-3b63-4a33-bf76-efaf58300001, depMode=SHARED,
> userVer=0, locDepOwner=false, participants=null],
> deployable=GridNearAtomicSingleUpdateRequest [key=UserKeyCacheObjectImpl
> [part=0, val=0, hasValBytes=true], super=GridNearAtomicSingleUpdateRequest
> [key=UserKeyCacheObjectImpl [part=0, val=0, hasValBytes=true],
> parent=GridNearAtomicAbstractSingleUpdateRequest
> [nodeId=cf943568-0cf9-4848-9037-ed0f2e700000, futId=1,
> topVer=AffinityTopologyVersion [topVer=4, minorTopVer=0],
> parent=GridNearAtomicAbstractUpdateRequest [res=null, flags=needRes]]]],
> locDep=GridDeployment [ts=1726051279184, depMode=SHARED,
> clsLdr=sun.misc.Launcher$AppClassLoader@18b4aac2,
> clsLdrId=a1f5ca0e191-914c1515-3b63-4a33-bf76-efaf58300001, userVer=0,
> loc=true,
> sampleClsName=org.apache.ignite.internal.IgniteClientReconnectDeploymentTest$TestEntryProcessor,
> pendingUndeploy=false, undeployed=false, usage=0]]
> {noformat}
> And throws an exception later:
> {noformat}
> javax.cache.CacheException: class
> org.apache.ignite.internal.processors.cache.IgnitePeerToPeerClassLoadingException:
> Failed to load class using class loader with given id (loader id doesn't
> match sender id and there are no more participants)
> [clsLdrId=a1f5ca0e191-914c1515-3b63-4a33-bf76-efaf58300001,
> senderId=061e738c-b0d5-4f19-bef9-c220a77619a3, participants=null]
> at
> org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1207)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.cacheException(IgniteCacheProxyImpl.java:2090)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1731)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.invoke(GatewayProtectedCacheProxy.java:1220)
> ~[classes/:?]
> at
> org.apache.ignite.internal.IgniteClientReconnectDeploymentTest.testDeploy(IgniteClientReconnectDeploymentTest.java:71)
> ~[test-classes/:?]
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ~[?:1.8.0_412]
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> ~[?:1.8.0_412]
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[?:1.8.0_412]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_412]
> at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
> ~[junit-4.12.jar:4.12]
> at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> ~[junit-4.12.jar:4.12]
> at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
> ~[junit-4.12.jar:4.12]
> at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
> ~[junit-4.12.jar:4.12]
> at
> org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:2499)
> ~[test-classes/:?]
> at java.lang.Thread.run(Thread.java:750) ~[?:1.8.0_412]
> Caused by:
> org.apache.ignite.internal.processors.cache.IgnitePeerToPeerClassLoadingException:
> Failed to load class using class loader with given id (loader id doesn't
> match sender id and there are no more participants)
> [clsLdrId=a1f5ca0e191-914c1515-3b63-4a33-bf76-efaf58300001,
> senderId=061e738c-b0d5-4f19-bef9-c220a77619a3, participants=null]
> at
> org.apache.ignite.internal.processors.cache.GridCacheDeploymentManager.p2pContext(GridCacheDeploymentManager.java:407)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.unmarshall(GridCacheIoManager.java:1608)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:592)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:398)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:316)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:104)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:306)
> ~[classes/:?]
> at
> org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1893)
> ~[classes/:?]
> at
> org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1514)
> ~[classes/:?]
> at
> org.apache.ignite.internal.managers.communication.GridIoManager.access$5300(GridIoManager.java:240)
> ~[classes/:?]
> at
> org.apache.ignite.internal.managers.communication.GridIoManager$9.execute(GridIoManager.java:1418)
> ~[classes/:?]
> at
> org.apache.ignite.internal.managers.communication.TraceRunnable.run(TraceRunnable.java:55)
> ~[classes/:?]
> at
> org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:637)
> ~[classes/:?]
> at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
> ~[classes/:?]
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)