X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2Flru%2FClusterUpdateOperation.java;h=254fbf55c10cf121f16479261534894d86e4f51b;hp=40a44bc43bc17e85c1114b3bae21aee53bb6573d;hb=33b349001037197a526a49e5820f0317dc74d934;hpb=c01cbb8505a717426eb6a30faf816534eb532e97 diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/lru/ClusterUpdateOperation.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/lru/ClusterUpdateOperation.java index 40a44bc43..254fbf55c 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/lru/ClusterUpdateOperation.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/lru/ClusterUpdateOperation.java @@ -2,10 +2,9 @@ package org.simantics.acorn.lru; import org.simantics.acorn.ClusterManager; import org.simantics.acorn.cluster.ClusterImpl; -import org.simantics.acorn.internal.ClusterChange; -import org.simantics.acorn.internal.ClusterChange2; +import org.simantics.acorn.exception.AcornAccessVerificationException; +import org.simantics.acorn.exception.IllegalAcornStateException; import org.simantics.acorn.internal.ClusterUpdateProcessor; -import org.simantics.acorn.internal.ClusterUpdateProcessor2; import org.simantics.db.service.Bytes; import org.simantics.db.service.ClusterUID; @@ -21,7 +20,7 @@ final public class ClusterUpdateOperation { public ClusterChangeSet ccs; boolean finished = false; - public ClusterUpdateOperation(ClusterManager manager, byte[] data) { + public ClusterUpdateOperation(ClusterManager manager, byte[] data) throws IllegalAcornStateException, AcornAccessVerificationException { long cuid1 = Bytes.readLE8(data, 8); long cuid2 = Bytes.readLE8(data, 16); @@ -30,20 +29,19 @@ final public class ClusterUpdateOperation { this.uid = ClusterUID.make(cuid1, cuid2); this.data = data; this.info = manager.clusterLRU.getOrCreate(uid, true); - } public void finish() { finished = true; } - public void scheduled(String ccsInfoId) { + public void scheduled(String ccsInfoId) throws AcornAccessVerificationException, IllegalAcornStateException { ccs = new ClusterChangeSet(ccsInfoId, uid); chunk = ccs.getChunk(manager); manager.addIntoCurrentChangeSet(ccsInfoId); } - public void run() { + public void run() throws AcornAccessVerificationException, IllegalAcornStateException { ClusterUpdateOperation op = null; byte[] data = null; chunk.acquireMutex(); @@ -51,35 +49,23 @@ final public class ClusterUpdateOperation { chunk.makeResident(); op = chunk.operations.get(ccs.chunkOffset); data = op.data; - } catch (Throwable t) { - throw new IllegalStateException(t); } finally { chunk.releaseMutex(); } op.runWithData(data); } - public void runWithData(byte[] data) { - + public void runWithData(byte[] data) throws IllegalAcornStateException, AcornAccessVerificationException { try { - int version = Bytes.readLE4(data, 4); - if(version == ClusterChange.VERSION) { - ClusterUpdateProcessor processor = new ClusterUpdateProcessor(manager, manager.support, data, this); - ClusterImpl cluster = info.getForUpdate(); - cluster = processor.process(cluster); - manager.update(uid, cluster); - } else if (version == ClusterChange2.VERSION) { - ClusterUpdateProcessor2 processor = new ClusterUpdateProcessor2(manager.support, data, this); - ClusterImpl cluster = info.getForUpdate(); - processor.process(cluster); - manager.update(uid, cluster); - } else { - throw new IllegalStateException(); - } + ClusterUpdateProcessor processor = new ClusterUpdateProcessor(manager, manager.support, data, this); + ClusterImpl cluster = info.getForUpdate(); + cluster = processor.process(cluster); + manager.update(uid, cluster); + } catch (IllegalAcornStateException | AcornAccessVerificationException e) { + throw e; } catch (Throwable t) { - t.printStackTrace(); + throw new IllegalAcornStateException(t); } - } @Override