Deflake test by enforcing deterministic order of returned reverse deps when marking clean.

PiperOrigin-RevId: 234229893
diff --git a/src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java b/src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java
index 9a83bde..c50e597 100644
--- a/src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java
+++ b/src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java
@@ -69,8 +69,8 @@
 
   @Nullable
   @Override
-  protected DeterministicValueEntry wrapEntry(SkyKey key, @Nullable ThinNodeEntry entry) {
-    return entry == null ? null : new DeterministicValueEntry(key, entry);
+  protected DeterministicNodeEntry wrapEntry(SkyKey key, @Nullable ThinNodeEntry entry) {
+    return entry == null ? null : new DeterministicNodeEntry(key, entry);
   }
 
   private static Map<SkyKey, ? extends NodeEntry> makeDeterministic(
@@ -126,8 +126,8 @@
    * This class uses TreeSet to store reverse dependencies of NodeEntry. As a result all values are
    * lexicographically sorted.
    */
-  private class DeterministicValueEntry extends NotifyingNodeEntry {
-    private DeterministicValueEntry(SkyKey myKey, ThinNodeEntry delegate) {
+  private class DeterministicNodeEntry extends NotifyingNodeEntry {
+    private DeterministicNodeEntry(SkyKey myKey, ThinNodeEntry delegate) {
       super(myKey, delegate);
     }
 
@@ -154,5 +154,12 @@
       result.addAll(super.setValue(value, version, depFingerprintList));
       return result;
     }
+
+    @Override
+    public Set<SkyKey> markClean() throws InterruptedException {
+      TreeSet<SkyKey> result = new TreeSet<>(ALPHABETICAL_SKYKEY_COMPARATOR);
+      result.addAll(super.markClean());
+      return result;
+    }
   }
 }
diff --git a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
index 2cfbf44..a011d22 100644
--- a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
@@ -70,7 +70,6 @@
 import javax.annotation.Nullable;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -4484,7 +4483,6 @@
    * evaluation depending on a node in error.
    */
   @Test
-  @Ignore // TODO(b/124505961): This test hangs with a thread blocked in CDL.await.
   public void shutDownBuildOnCachedError_Done() throws Exception {
     // errorKey will be invalidated due to its dependence on invalidatedKey, but later revalidated
     // since invalidatedKey re-evaluates to the same value on a subsequent build.