Improve information provided on failed linkage progress 69/99969/2
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 4 Mar 2022 18:53:05 +0000 (19:53 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 4 Mar 2022 18:56:40 +0000 (19:56 +0100)
Linkage algorithm seems to have a issue with a set of proprietary
models. Rather than throwing a simple exception, add debug logging
to track which items progress and report any remaining items as
suppressed exceptions.

Change-Id: Ia7f1efe498f1ac82de35facf0188d0a2972e2b09
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AugmentRequirement.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/GeneratorReactor.java

index ee1b940a737edee77d7bbc211eb85782d7462e75..461a3111503410d2323668e458566820b7b51649 100644 (file)
@@ -11,6 +11,7 @@ import static com.google.common.base.Verify.verify;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.base.MoreObjects;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
@@ -68,6 +69,15 @@ final class AugmentRequirement implements Mutable {
         return qname == null ? resolveAsTarget() : resolveAsChild();
     }
 
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this).omitNullValues()
+            .add("augment", augment)
+            .add("target", target)
+            .add("qname", qname)
+            .toString();
+    }
+
     private @NonNull LinkageProgress resolveAsTarget() {
         // Resolved requirement, if we also have original we end resolution here and now
         final var original = target.tryOriginal();
index 4cfde54f751f866bd885059b4500016198aad7e6..8a8feed0995d528301bd64b6918bccf652a027ce 100644 (file)
@@ -163,7 +163,16 @@ public final class GeneratorReactor extends GeneratorContext implements Mutable
                 break;
             }
 
-            verify(progress, "Failed to make progress on linking of original generators");
+            if (!progress) {
+                final var ex = new VerifyException("Failed to make progress on linking of original generators");
+                for (var augment : augments) {
+                    ex.addSuppressed(new IllegalStateException(augment + " is incomplete"));
+                }
+                for (var module : unlinkedModules) {
+                    ex.addSuppressed(new IllegalStateException(module + " remains unlinked"));
+                }
+                throw ex;
+            }
         }
 
         /*
@@ -364,12 +373,19 @@ public final class GeneratorReactor extends GeneratorContext implements Mutable
 
         final var it = items.iterator();
         while (it.hasNext()) {
-            final var tmp = function.apply(it.next());
-            if (tmp != LinkageProgress.NONE) {
-                progress = true;
+            final var item = it.next();
+            final var tmp = function.apply(item);
+            if (tmp == LinkageProgress.NONE) {
+                LOG.debug("No progress made linking {}", item);
+                continue;
             }
+
+            progress = true;
             if (tmp == LinkageProgress.DONE) {
+                LOG.debug("Finished linking {}", item);
                 it.remove();
+            } else {
+                LOG.debug("Progress made linking {}", item);
             }
         }