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 <[hidden email]> Date: 2017-04-23T10:21:31Z IGNITE-3935: reloadingClassLoader commit 6b78256168e5a2957d1511469745ec3c3cceabb4 Author: freem <[hidden email]> Date: 2017-04-23T12:39:08Z IGNITE-3935: new client-test-module commit 0f79ec2b2b88ae17a89d03851369d2b0042f1b70 Author: freem <[hidden email]> Date: 2017-04-23T16:50:44Z IGNITE-3935: disable local deployment optimisation on GridDeploymentManager.getGlobalDeployment commit 6b9613bbdc839594bd4eeee609ef535d92cff0a4 Author: freem <[hidden email]> 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 [hidden email] or file a JIRA ticket with INFRA. --- |
Github user alt-freem closed the pull request at:
https://github.com/apache/ignite/pull/1869 --- 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 [hidden email] or file a JIRA ticket with INFRA. --- |
Free forum by Nabble | Edit this page |