import org.simantics.acorn.ClusterManager;
import org.simantics.acorn.cluster.ClusterImpl;
+import org.simantics.acorn.exception.AcornAccessVerificationException;
+import org.simantics.acorn.exception.IllegalAcornStateException;
import org.simantics.acorn.internal.ClusterChange;
import org.simantics.acorn.internal.ClusterChange2;
import org.simantics.acorn.internal.ClusterUpdateProcessor;
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);
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();
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);
processor.process(cluster);
manager.update(uid, cluster);
} else {
- throw new IllegalStateException();
+ throw new IllegalAcornStateException("unsupported clusterChange version " + version);
}
+ } catch (IllegalAcornStateException | AcornAccessVerificationException e) {
+ throw e;
} catch (Throwable t) {
- t.printStackTrace();
+ throw new IllegalAcornStateException(t);
}
-
}
@Override