Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-6803

UriDeploymentSpi affects execution of other tasks, including Ignite internals

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 2.2
    • None
    • None
    • None

    Description

      From the maillist:
      http://apache-ignite-users.70518.x6.nabble.com/Code-deployment-throught-UriDeploumentSpi-tt17807.html

      In our project we need to deploy custom compute tasks into cluster without cluster restart and p2p class loading.
      I try to use org.apache.ignite.spi.deployment.uri.UriDeploumentSpi for that purpose, but I have a problem.

      I have simple Ignite Service and Ignite Compute Task which use it throught @ServiceResource.
      This ComputeTask located into .gar file which was deployed via UriDeploumentSpi.

      If I have service implementation on each node(node singleton service) then it works great.
      But if I deploy service as a cluster singleton then task executes correctly only on node with this service.

      On other nodes @ServiceResource returns ServiceProxy that throws exception on service remote method invokation (lambda with service call cannot be deployed):

      SEVERE: Failed to execute job [jobId=68a96d76f51-7919c34c-9a48-4068-bcd6-70dad5595e86, ses=GridJobSessionImpl [ses=GridTaskSessionImpl [taskName=task-one, dep=GridDeployment [ts=1509275650885, depMode=SHARED, clsLdr=GridUriDeploymentClassLoader [urls=[file:/C:/IdeaProjects/dmp_code_deployment/test/out/deployment/gg.uri.deployment.tmp/428ec712-e6d0-4eab-97f9-ce58d7b3e0f5/dirzip_task-one6814855127293591501.gar/]], clsLdrId=7eb15d76f51-428ec712-e6d0-4eab-97f9-ce58d7b3e0f5, userVer=0, loc=true, sampleClsName=com.gridfore.tfedyanin.deploy.Task1, pendingUndeploy=false, undeployed=false, usage=1], taskClsName=com.gridfore.tfedyanin.deploy.Task1, sesId=38a96d76f51-7919c34c-9a48-4068-bcd6-70dad5595e86, startTime=1509275650601, endTime=9223372036854775807, taskNodeId=7919c34c-9a48-4068-bcd6-70dad5595e86, clsLdr=GridUriDeploymentClassLoader [urls=[file:/C:/IdeaProjects/dmp_code_deployment/test/out/deployment/gg.uri.deployment.tmp/428ec712-e6d0-4eab-97f9-ce58d7b3e0f5/dirzip_task-one6814855127293591501.gar/]], closed=false, cpSpi=null, failSpi=null, loadSpi=null, usage=1, fullSup=false, internal=false, subjId=7919c34c-9a48-4068-bcd6-70dad5595e86, mapFut=IgniteFuture [orig=GridFutureAdapter [ignoreInterrupts=false, state=INIT, res=null, hash=1254296516]], execName=null], jobId=68a96d76f51-7919c34c-9a48-4068-bcd6-70dad5595e86]]
      class org.apache.ignite.IgniteDeploymentException: Failed to auto-deploy task (was task (re|un)deployed?): class org.apache.ignite.internal.processors.service.GridServiceProcessor$ServiceTopologyCallable
      

      Problem works as follows:

      • Ignite has to determine which node has deployed service, by name.
      • Ignite has to send ServiceTopologyCallable task.
      • Ignite tries to deploy ServiceTopologyCallable task using UriDeploymentSpi.
      • UriDeploymentSpi doesn't have it obviously, but it also tries to fallback towards "CLASS" loading from local ClassLoader
      • Which fails because it is told that ServiceTopologyCallable comes from its classloader and not from the local one!

      So I'm at loss where it should be fixed properly. It is also sad that we are using all that deploy pipeline to handle IgniteInternal tasks, but there obviously are non-internal local tasks which might be affected by same problem.

      Attachments

        1. tc.png
          29 kB
          Evgeny Stanilovsky

        Activity

          People

            agoncharuk Alexey Goncharuk
            ilyak Ilya Kasnacheev
            Votes:
            1 Vote for this issue
            Watchers:
            8 Start watching this issue

            Dates

              Created:
              Updated: