GitHub user alt-freem opened a pull request:
https://github.com/apache/ignite/pull/1869
Ignite 3935
ÐÑо не PullRequest, в Ñом ÑмÑÑле ÑÑо задаÑа не
вÑполнена, PR завел пÑоÑÑо как плоÑÐ°Ð´ÐºÑ Ð´Ð»Ñ
обÑÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸ возможноÑÑи комменÑиÑоваÑÑ
по кодÑ.
ТÑÑ Ð½Ð°Ñ
одиÑÑÑ Ð³ÑÑзнÑй код моиÑ
попÑÑок
воÑпÑоизвеÑÑи пÑоблемÑ, код не пÑиÑеÑÑвал,
Ñак задаÑа ÑеÑ
ниÑеÑки не ÑеÑена и неÑ
оÑобого ÑмÑÑла ÑÑо делаÑÑ.
УдалоÑÑ Ð²Ð¾ÑпÑоизвеÑÑи пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð½Ð°
опиÑанном в ÑикеÑе пÑимеÑе, в ÑлÑÑае когда
ÐÐ»Ð¸Ð½ÐµÑ Ð¸ СеÑÐ²ÐµÑ ÑÑаÑÑÑÑÑ Ð² ÑазнÑÑ
jvm и имеÑÑ
ÑазнÑе classpath, Ñо еÑÑÑ Ð½Ð° ÑеÑвеÑе Ñвно
оÑÑÑÑÑÑвÑÐµÑ ÐºÐ»Ð¸ÐµÐ½ÑÑÐºÐ°Ñ ÑеализаÑиÑ
CacheEntryProcessor.
ÐÑоблема, Ñ Ð¿Ð¾Ð»Ð°Ð³Ð°Ñ Ð² меÑоде
GridDeploymentManager#getGlobalDeployment - Ñам еÑÑÑ
опÑимизаÑÐ¸Ñ ÐºÐ¾ÑоÑÐ°Ñ ÑнаÑала иÑеÑ
пеÑеданнÑй Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа клаÑÑ Ð² localDeployment и
еÑли его наÑ
одиÑ, Ñо далÑнейÑÑÑ
деÑеÑиализаÑÐ¸Ñ Ð¾ÑвеÑа пÑÐ¾Ð²Ð¾Ð´Ð¸Ñ Ñ classloader'ом
localDeployment'а, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº пÑоблемам в
опиÑанном ÑлÑÑае: в localDeployment наÑ
одиÑÑÑÑ
StreamTrasformer$1 внÑÑÑи коÑоÑого ÑÑÑлка не
клиенÑÑкий клаÑÑ ÑеализаÑии CacheEntryProcessor,
ÑооÑвеÑÑÑвенно деÑÑеÑиализаÑиÑ
ÑазваливаеÑÑÑ.
ÐÐµÐ½Ñ ÑмÑÑÐ°ÐµÑ ÑÑо код
GridDeploymentManager#getGlobalDeployment не менÑлÑÑ Ñ 14го
года, Ñо еÑÑÑ Ð²Ñоде как ÑÑабилÑнÑй и вÑоде
как должен бÑÑÑ ÑабоÑим, в Ñоже вÑÐµÐ¼Ñ Ñ Ð½Ðµ
наÑел на него какиÑ
либо ÑеÑÑов коÑоÑÑе
как-Ñо пÑовеÑÑли Ð±Ñ ÐµÐ³Ð¾ коÑÑекÑноÑÑÑ.
РлÑбом ÑлÑÑае Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð¼Ð½Ðµ
кажеÑÑÑ ÑомниÑелÑной, как ÑеÑение Ñ Ð±Ñ
пÑедложил вÑпилиÑÑ Ð²ÑÑ Ð²ÐµÑÐºÑ Ð²Ð¾ÐºÑÑг
пеÑеменной <code>boolean reuse = true</code> и безÑÑловно
возвÑаÑаÑÑ <code>verStore.getDeployment(meta)</code>.
Classloader коÑоÑого мог Ð±Ñ Ð¸Ð¼ÐµÑÑ parent'ом -
localDeployment.classloader.
Таким обÑазом GridDeploymentClassLoader
<ul>
<li/><i>StreamTrasformer$1</i> загÑÑÐ·Ð¸Ñ Ð¸Ð· локалÑного
classloader'а
<li/> а ÑвÑзаннÑÑ Ñ Ð½Ð¸Ð¼ ÑеализаÑиÑ
<i>CacheEntryProcessor</i> (не Ð½Ð°Ð¹Ð´Ñ Ð² локалÑном)
загÑÑÐ·Ð¸Ñ Ð·Ð°Ð¿ÑоÑом Ñ ÐºÐ»Ð¸ÐµÐ½Ñа
</ul>
СобÑÑвенно ÑкÑпеÑÐ¸Ð¼ÐµÐ½Ñ Ð½Ð° оÑделÑнÑÑ
JVM
ÑÑо подÑвеÑдил (клаÑÑÑ Client, Server),
ÑÑÑеÑÑвÑÑÑий Ð½Ð°Ð±Ð¾Ñ ÑеÑÑов пакеÑа
<i>org.apache.ignite.internal.processors.datastreamer</i> пÑоÑел без
изменений.
Ðогда наÑал вÑе ÑÑо завоÑаÑиваÑÑ Ð² один
junit ÑеÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ñем ÑÑо клиенÑ
ignite Ñо ÑÑÑ Ñо Ñам ÑеплÑл не ÑÐ¾Ñ classloder'
коÑоÑÑй мне бÑл нÑжен,
<b>напÑимеÑ</b> в каÑеÑÑве базового classloader'a
ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿ÐµÑед оÑпÑавкой ÑÑÑима на ÑеÑвеÑ
вÑбиÑал не ÑÐ¾Ñ classloader коÑоÑÑм бÑл загÑÑжен
пеÑедаваемÑй обÑекÑ, ÑÐ¾Ñ ÐºÐ¾ÑоÑÑм бÑл
загÑÑжен пеÑвÑй <i>nonJdk</i> клаÑÑ ÑвÑзаннÑй Ñ
пеÑедаваемÑм обÑекÑом.
<i>DataStreamerPda#deployClass</i>
```java
for (Iterator<Object> it = objs.iterator(); (cls0 == null || U.isJdk(cls0))
&& it.hasNext(); ) {
Object o = it.next();
if (o != null)
cls0 = U.detectClass(o);
}
```
Такого Ñода пÑоблем бÑло неÑколÑко и Ñ Ð½Ðµ
ÑÑпел иÑ
ÑеÑиÑÑ.
Ðад задаÑей ÑабоÑал Сб. и ÐÑ. Ð½Ñ Ð¸ ÑегоднÑ
Ð²Ð¾Ñ ÑезÑме оÑоÑмил еÑÑ Ð¼Ð¸Ð½ÑÑ 30.
ÐанимаÑÑÑÑ Ð·Ð°Ð´Ð°Ñей на бÑднÑÑ
- неÑ
вÑемени, ÑÑаÑиÑÑ ÐµÑе одни вÑÑ
однÑе - неÑ
желаниÑ.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/alt-freem/ignite IGNITE-3935
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/ignite/pull/1869.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #1869
----
commit fd2f31dc678ff83df7eef7056ec184a5e963e710
Author: freem <[email protected]>
Date: 2017-04-23T10:21:31Z
IGNITE-3935: reloadingClassLoader
commit 6b78256168e5a2957d1511469745ec3c3cceabb4
Author: freem <[email protected]>
Date: 2017-04-23T12:39:08Z
IGNITE-3935: new client-test-module
commit 0f79ec2b2b88ae17a89d03851369d2b0042f1b70
Author: freem <[email protected]>
Date: 2017-04-23T16:50:44Z
IGNITE-3935: disable local deployment optimisation on
GridDeploymentManager.getGlobalDeployment
commit 6b9613bbdc839594bd4eeee609ef535d92cff0a4
Author: freem <[email protected]>
Date: 2017-04-25T09:38:11Z
IGNITE-3935: attempt to load 2 ingnte instances with different class loaders
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---