AtomicReference<IOException> problem = new AtomicReference<>();
Collection<GraphBundle> 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;
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<TransferableGraph1> graphSource = () -> {
try {
throw new IOException("Problem loading graph.tg from bundle " + bundle.getSymbolicName(), e);
}
}
+
+ private static FormatHandler<TransferableGraph1> FORMAT_HANDLER = new FormatHandler<TransferableGraph1>() {
+ @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<String, FormatHandler<TransferableGraph1>> handlers = ArrayMap.make(
new String[] {
- "graph:1"
+ "graph:1",
+ "sharedLibrary:1"
},
- new FormatHandler<TransferableGraph1>() {
- @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);