Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8200421

Testing parallel streams and using executor service

XMLWordPrintable

    • x86_64
    • windows_10

      FULL PRODUCT VERSION :
      9.0.4+11

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 10.0.16299.309]

      A DESCRIPTION OF THE PROBLEM :
      Creating parallel streams to try to process Json strings and submitting to a FixedThreadPool executor service.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Try to compile source


      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Information:java: An exception has occurred in the compiler (9.0.4). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
      Information:java: java.lang.NullPointerException
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Infer$CheckUpperBounds.apply(Infer.java:951)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Infer.doIncorporation(Infer.java:1122)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Infer$GraphSolver.solve(Infer.java:1658)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.InferenceContext.solve(InferenceContext.java:475)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.InferenceContext.solve(InferenceContext.java:482)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Infer$PartiallyInferredMethodType.check(Infer.java:341)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr$ResolvedMemberType.overloadCheck(ArgumentAttr.java:560)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr$ArgumentType.complete(ArgumentAttr.java:352)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredType.check(DeferredAttr.java:326)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredType.check(DeferredAttr.java:312)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr.checkSpeculative(ArgumentAttr.java:154)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr$ExplicitLambdaType.checkLambdaCompatible(ArgumentAttr.java:524)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr$ExplicitLambdaType.overloadCheck(ArgumentAttr.java:509)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve$MethodResultInfo.check(Resolve.java:1047)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve$4.checkArg(Resolve.java:874)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve$AbstractMethodCheck.argumentsAcceptable(Resolve.java:774)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve$4.argumentsAcceptable(Resolve.java:883)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve.rawInstantiate(Resolve.java:617)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve.selectBest(Resolve.java:1566)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve.findMethodInScope(Resolve.java:1725)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1794)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1768)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve$10.doLookup(Resolve.java:2627)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve$BasicLookupHelper.lookup(Resolve.java:3241)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve.lookupMethod(Resolve.java:3491)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve.resolveQualifiedMethod(Resolve.java:2624)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Resolve.resolveQualifiedMethod(Resolve.java:2618)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.selectSym(Attr.java:3574)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3453)
      Information:java: at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2104)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1911)
      Information:java: at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1628)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3425)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:693)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:1155)
      Information:java: at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:950)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:723)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:742)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1203)
      Information:java: at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1014)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1094)
      Information:java: at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:866)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4562)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4454)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4383)
      Information:java: at jdk.compiler/com.sun.tools.javac.comp.Attr.attrib(Attr.java:4328)
      Information:java: at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1329)
      Information:java: at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:959)
      Information:java: at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
      Information:java: at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
      Information:java: at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
      Information:java: at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
      Information:java: at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:198)
      Information:java: at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:453)
      Information:java: at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:317)
      Information:java: at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:244)
      Information:java: at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:202)
      Information:java: at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1314)
      Information:java: at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:991)
      Information:java: at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1063)
      Information:java: at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:954)
      Information:java: at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:787)
      Information:java: at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376)
      Information:java: at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:183)
      Information:java: at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:138)
      Information:java: at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:308)
      Information:java: at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:137)
      Information:java: at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:235)
      Information:java: at org.jetbrains.jps.service.impl.SharedThreadPoolImpl.lambda$executeOnPooledThread$0(SharedThreadPoolImpl.java:42)
      Information:java: at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
      Information:java: at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      Information:java: at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
      Information:java: at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
      Information:java: at java.base/java.lang.Thread.run(Thread.java:844)
      Information:java: Errors occurred while compiling module 'func_test_main'
      Information:javac 9.0.4 was used to compile java sources
      Information:3/28/2018 11:34 PM - Compilation completed with 1 error and 0 warnings in 2s 696ms
      Error:java: Compilation failed: internal java compiler error

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      ##### build.gradle:

      group 'pnts'
      version '1.0-SNAPSHOT'

      apply plugin: 'java'

      sourceCompatibility = 1.8

      repositories {
          mavenCentral()
      }

      dependencies {
          testCompile group: 'junit', name: 'junit', version: '4.12'
          compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
      }

      ##### settings.gradle:

      rootProject.name = 'func_test'

      ##### src/main/java/Main/JsonParseGo.java:

      package Main;

      import com.google.gson.Gson;
      import com.google.gson.GsonBuilder;
      import com.google.gson.JsonElement;

      import java.util.ArrayList;
      import java.util.List;
      import java.util.concurrent.ExecutionException;
      import java.util.concurrent.ExecutorService;
      import java.util.concurrent.Executors;
      import java.util.function.Supplier;
      import java.util.stream.Collectors;
      import java.util.stream.Stream;

      import static Main.RandomJsonGen.getRandomJsonGenerator;

      public class JsonParseGo {
          public static final int numJsons = 100000;
          public static final int numThreads = 4;

          public static void main (String[] args) throws ExecutionException, InterruptedException {
              Gson gson = new GsonBuilder().create();
              Supplier<String> gen = getRandomJsonGenerator(1);

              List<String> strings = Stream.generate(gen)
                      .limit(100)
                      .collect(Collectors.toCollection(ArrayList::new));

              List<JsonElement> jsonsSeq = new ArrayList<>();

              for (String str : strings) {
                  jsonsSeq.add(gson.fromJson(str, JsonElement.class));
              }


              ExecutorService threadPool = Executors.newFixedThreadPool(numThreads);
              List<JsonElement> jsonsPar = threadPool.submit(() -> {
                  return strings.parallelStream()
                          .map((str) -> gson.fromJson(str, JsonElement.class))
                          .collect(Collectors.toCollection(ArrayList::new));
              }).get();


              return;
          }
      }

      ##### src/main/java/Main/RandomJsonGen.java:

      package Main;

      import java.util.ArrayList;
      import java.util.List;
      import java.util.Random;
      import java.util.function.Supplier;
      import java.util.stream.Collectors;
      import java.util.stream.Stream;

      public class RandomJsonGen {
          private static final String chars = "ABCDEF";
          private static final String nums = "0123456789";

          public static Supplier<String> getRandomJsonGenerator(long seed) {
              Random random = new Random(seed);

              Supplier<String> stringGen = () -> {
                  StringBuilder sb = new StringBuilder();
                  for (int i = 0; i < 5 ; ++i) {
                      sb.append(chars.charAt(random.nextInt(chars.length())));
                  }
                  for (int i = 0; i < 5 ; ++i) {
                      sb.append(nums.charAt(random.nextInt(nums.length())));
                  }
                  return sb.toString();
              };

              Supplier<Long> numberGen = () -> {
                  long num = 0;
                  for (int i = 0; i < 8 ; ++i) {
                      num = num * 10 + random.nextInt(10);
                  }
                  return num;
              };

              return () -> {
                  int numStrings = random.nextInt(6) + 1;
                  int numInts = random.nextInt(6) + 1;

                  StringBuilder sb = new StringBuilder("[[");

                  for (int i = 0; i < numStrings - 1; ++i) {
                      sb.append("\"").append(stringGen.get()).append("\",");
                  }
                  sb.append("\"").append(stringGen.get()).append("\"],[");
                  for (int i = 0; i < numInts - 1; ++i) {
                      sb.append(numberGen.get()).append(",");
                  }
                  sb.append(numberGen.get()).append("]]");

                  return sb.toString();
              };
          }

          public static void main(String[] args) {
              Supplier<String> gen = getRandomJsonGenerator(1);

              List<String> strings = Stream.generate(gen)
                      .limit(100)
                      .collect(Collectors.toCollection(ArrayList::new));

              return;
          }
      }
      ---------- END SOURCE ----------

            fmatte Fairoz Matte
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: