From 91f5603bd9509bdee711b38ecc1e7f31398d83a7 Mon Sep 17 00:00:00 2001 From: Ryan Caudy Date: Sun, 4 Dec 2022 02:03:50 -0500 Subject: [PATCH] Account for SyncTableFilter weirdness, and allow failure notification after update on the same cycle --- .../main/java/io/deephaven/engine/table/impl/BaseTable.java | 4 +--- .../java/io/deephaven/engine/table/impl/MergedListener.java | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/BaseTable.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/BaseTable.java index 30db391d0ef..9601926f6a8 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/BaseTable.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/BaseTable.java @@ -893,12 +893,10 @@ private void validateUpdateOverlaps(final TableUpdate update) { */ public final void notifyListenersOnError(final Throwable e, @Nullable final TableListener.Entry sourceEntry) { Assert.eqFalse(isFailed, "isFailed"); - final long currentStep = LogicalClock.DEFAULT.currentStep(); - Assert.lt(lastNotificationStep, "lastNotificationStep", currentStep, "LogicalClock.DEFAULT.currentStep()"); isFailed = true; maybeSignal(); - lastNotificationStep = currentStep; + lastNotificationStep = LogicalClock.DEFAULT.currentStep(); final NotificationQueue notificationQueue = getNotificationQueue(); childListenerReferences.forEach((listenerRef, listener) -> notificationQueue diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/MergedListener.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/MergedListener.java index f7b6b786de8..4dd9489c6b8 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/MergedListener.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/MergedListener.java @@ -113,7 +113,7 @@ private void notifyInternal(@Nullable final Throwable upstreamError, } private void propagateProcessError(@NotNull final Exception updateException, final long currentStep) { - if (result.getLastNotificationStep() == currentStep) { + if (result != null && result.getLastNotificationStep() == currentStep) { // If the result managed to send its notification, we should not send our own. if (result.isFailed()) { // That said, if the result is now failed, let's make sure we're out of the DAG. @@ -141,11 +141,11 @@ private void propagateErrorInternal(@NotNull final Throwable error, @Nullable fi } } - private boolean systemicResult() { + protected boolean systemicResult() { return SystemicObjectTracker.isSystemic(MergedListener.this.result); } - private void propagateErrorDownstream(@NotNull final Throwable error, @Nullable final TableListener.Entry entry) { + protected void propagateErrorDownstream(@NotNull final Throwable error, @Nullable final TableListener.Entry entry) { result.notifyListenersOnError(error, entry); }