Uploaded image for project: 'Bitbucket Data Center'
  1. Bitbucket Data Center
  2. BSERV-4358

Problems with serialization ListHashMultimap in not HTTP threads

    XMLWordPrintable

Details

    • Bug
    • Resolution: Support Request
    • Low
    • None
    • 2.10.1
    • API - Java
    • None

    Description

      If you run some tasks from com.atlassian.sal.api.scheduling.PluginScheduler them will be runned with WebappClassloader.

      If your plugin job try to check merge vetos for other pull request via com.atlassian.stash.scm.pull.MergeRequestCheckService in this job thread, then all MergeChecks will executed not in http-threads-xxx, bu in other threads. And then, if you try to serialize ListHashMultimap in some of this MergeChecks (other plugins), you may get strange exception:

      2014-02-10 01:46:42,645 WARN  [scheduler_Worker-5]  java.lang.ClassNotFoundException: com.acme.stash.plugin.other.content.SomeKeyInSetMultimap
              at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) ~[catalina.jar:7.0.47]
              at java.lang.Class.forName0(Native Method) ~[na:1.6.0_45]
              at java.lang.Class.forName(Class.java:249) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:602) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1589) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1494) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1748) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1327) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349) ~[na:1.6.0_45]
              at com.google.common.collect.Serialization.populateMultimap(Serialization.java:184) ~[guava-10.0.1.jar:na]
              at com.google.common.collect.LinkedHashMultimap.readObject(LinkedHashMultimap.java:383) ~[guava-10.0.1.jar:na]
              at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1775) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1327) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1969) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1775) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1327) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349) ~[na:1.6.0_45]
              at java.util.HashSet.readObject(HashSet.java:291) ~[na:1.6.0_45]
              at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1775) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1327) ~[na:1.6.0_45]
              at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349) ~[na:1.6.0_45]
      ... (skipped) ...
              at com.atlassian.stash.internal.pull.DefaultMergeRequestCheckService.check(DefaultMergeRequestCheckService.java:46) [stash-service-impl-2.10.1.jar:na]
              at com.sun.proxy.$Proxy168.check(Unknown Source) [na:na]
              at com.sun.proxy.$Proxy218.check(Unknown Source) [na:na]
              at com.sun.proxy.$Proxy218.check(Unknown Source) [na:na]
              at com.acme.stash.plugin.pull.merge.AutoMergingJob$2.perform(AutoMergingJob.java:218) [plugin.6818593026216650093.stash-pull-request-automerge-1.0.32_1390605423000.jar:na]
      

      The bug only in this thread, the same check from Web UI work fine. I think, that PluginScheduler load tasks in not valid ClassLoader.

      Attachments

        Activity

          People

            Unassigned Unassigned
            3652ed9ede2e Alexey Efimov
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: