Fix commit.andThen() logic.
This commit is contained in:
parent
9df97b3e44
commit
50f656bc8a
1 changed files with 14 additions and 11 deletions
|
@ -17,7 +17,6 @@ package net.helenus.core;
|
||||||
|
|
||||||
import static net.helenus.core.HelenusSession.deleted;
|
import static net.helenus.core.HelenusSession.deleted;
|
||||||
|
|
||||||
import com.diffplug.common.base.Errors;
|
|
||||||
import com.google.common.base.Stopwatch;
|
import com.google.common.base.Stopwatch;
|
||||||
import com.google.common.collect.HashBasedTable;
|
import com.google.common.collect.HashBasedTable;
|
||||||
import com.google.common.collect.Table;
|
import com.google.common.collect.Table;
|
||||||
|
@ -309,6 +308,18 @@ public abstract class AbstractUnitOfWork<E extends Exception>
|
||||||
*/
|
*/
|
||||||
public PostCommitFunction<Void, Void> commit() throws E, TimeoutException {
|
public PostCommitFunction<Void, Void> commit() throws E, TimeoutException {
|
||||||
|
|
||||||
|
// Only the outter-most UOW batches statements for commit time, execute them.
|
||||||
|
if (batch != null) {
|
||||||
|
try {
|
||||||
|
committedAt = batch.sync(this); //TODO(gburd): update cache with writeTime...
|
||||||
|
} catch (Exception e) {
|
||||||
|
if (!(e instanceof ConflictingUnitOfWorkException)) {
|
||||||
|
aborted = true;
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// All nested UnitOfWork should be committed (not aborted) before calls to
|
// All nested UnitOfWork should be committed (not aborted) before calls to
|
||||||
// commit, check.
|
// commit, check.
|
||||||
boolean canCommit = true;
|
boolean canCommit = true;
|
||||||
|
@ -321,7 +332,6 @@ public abstract class AbstractUnitOfWork<E extends Exception>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!canCommit) {
|
if (!canCommit) {
|
||||||
nested.forEach((uow) -> Errors.rethrow().wrap(uow::abort));
|
|
||||||
elapsedTime.stop();
|
elapsedTime.stop();
|
||||||
|
|
||||||
if (parent == null) {
|
if (parent == null) {
|
||||||
|
@ -337,17 +347,10 @@ public abstract class AbstractUnitOfWork<E extends Exception>
|
||||||
|
|
||||||
return new PostCommitFunction(this, null, null, false);
|
return new PostCommitFunction(this, null, null, false);
|
||||||
} else {
|
} else {
|
||||||
// Only the outter-most UOW batches statements for commit time, execute them.
|
elapsedTime.stop();
|
||||||
if (batch != null) {
|
|
||||||
committedAt = batch.sync(this); //TODO(gburd): update cache with writeTime...
|
|
||||||
}
|
|
||||||
|
|
||||||
committed = true;
|
committed = true;
|
||||||
aborted = false;
|
aborted = false;
|
||||||
|
|
||||||
nested.forEach((uow) -> Errors.rethrow().wrap(uow::commit));
|
|
||||||
elapsedTime.stop();
|
|
||||||
|
|
||||||
if (parent == null) {
|
if (parent == null) {
|
||||||
|
|
||||||
// Apply all post-commit commit functions, this is the outter-most UnitOfWork.
|
// Apply all post-commit commit functions, this is the outter-most UnitOfWork.
|
||||||
|
@ -355,7 +358,7 @@ public abstract class AbstractUnitOfWork<E extends Exception>
|
||||||
.postOrderTraversal(this)
|
.postOrderTraversal(this)
|
||||||
.forEach(
|
.forEach(
|
||||||
uow -> {
|
uow -> {
|
||||||
applyPostCommitFunctions("committed", commitThunks);
|
applyPostCommitFunctions("committed", uow.commitThunks);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Merge our cache into the session cache.
|
// Merge our cache into the session cache.
|
||||||
|
|
Loading…
Reference in a new issue