X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.project%2Fsrc%2Forg%2Fsimantics%2Fproject%2Fmanagement%2FPlatformUtil.java;h=a8916251e07c738413866bde501a42b3e7c3eec6;hb=refs%2Fchanges%2F93%2F1593%2F4;hp=fde15003643668c33548125195e17b199874a6cb;hpb=b913419ca9037bf9734c56a5f079024c3a1cd177;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.project/src/org/simantics/project/management/PlatformUtil.java b/bundles/org.simantics.project/src/org/simantics/project/management/PlatformUtil.java index fde150036..a8916251e 100644 --- a/bundles/org.simantics.project/src/org/simantics/project/management/PlatformUtil.java +++ b/bundles/org.simantics.project/src/org/simantics/project/management/PlatformUtil.java @@ -315,7 +315,11 @@ public class PlatformUtil { AtomicReference problem = new AtomicReference<>(); Collection gbundles = Arrays.stream(getBundles()) - .parallel() + // #7806: Due to databoard Binding/Serializer construction process thread-unsafety + // not even the DataContainer.readHeader invocations can run in parallel, most likely + // due to recurring serializer construction for Variant datatypes. + // Therefore, we must disable parallel loading for now. + //.parallel() .map(b -> { try { return problem.get() == null ? getGraph(b) : null; @@ -388,10 +392,10 @@ public class PlatformUtil { private static GraphBundleEx tryGetOnDemandGraph(Bundle bundle, URL url) throws IOException { try { Integer cachedHash = readCachedHash(url); - System.out.println("Read cached hashcode from " + bundle + ": " + cachedHash); - if (cachedHash == null) -// if (true) + if (cachedHash == null) { + LOGGER.info("No cached hash for " + bundle); return null; + } Supplier graphSource = () -> { try { @@ -416,28 +420,32 @@ public class PlatformUtil { throw new IOException("Problem loading graph.tg from bundle " + bundle.getSymbolicName(), e); } } + + private static FormatHandler FORMAT_HANDLER = new FormatHandler() { + @Override + public Binding getBinding() { + return TransferableGraph1.BINDING; + } + @Override + public TransferableGraph1 process(DataContainer container) throws Exception { + return (TransferableGraph1) container.content.getValue(TransferableGraph1.BINDING); + } + }; @SuppressWarnings("unchecked") private static Map> handlers = ArrayMap.make( new String[] { - "graph:1" + "graph:1", + "sharedLibrary:1" }, - new FormatHandler() { - @Override - public Binding getBinding() { - return TransferableGraph1.BINDING; - } - @Override - public TransferableGraph1 process(DataContainer container) throws Exception { - return (TransferableGraph1) container.content.getValue(TransferableGraph1.BINDING); - } - }); + FORMAT_HANDLER, + FORMAT_HANDLER); private static TransferableGraph1 readTG(InputStream is) throws Exception { // For an unknown reason this is totally broken when running the TestSCLOsgi // in the SDK Tycho build. It returns incomplete results because the // ReadableByteChannel used by ByteFileReader starts returning 0 unexpectedly. -// try (TransferableGraphFileReader reader = new TransferableGraphFileReader(is)) { +// try (TransferableGraphFileReader reader = new TransferableGraphFileReader(is)) { // return reader.readTG(); // } return DataContainers.readFile(new DataInputStream(is), handlers);