typedb
typedb copied to clipboard
GraphIterator assertion error
Description
GraphIterator
throws an assertion error for a test scenario that has dependably passed since reasoner verification testing was introduced. The failure occurs when testing completeness, though this should be irrelevant to the cause.
Environment
- OS (where TypeDB server runs): Mac OS 10
- TypeDB version (and platform): TypeDB commit
1803d9f9ae7d4294193a55e2e44cc06131246817
on PR https://github.com/vaticle/typedb/pull/6403 - TypeDB client: Internal verification tests
Reproducible Steps
Steps to create the smallest reproducible scenario:
Run Feature: Recursion Resolution, Scenario: linear transitivity matrix test
10 times
Expected Output
Test should pass
Actual Output
Test fails 1 in 10 times with this trace:
java.lang.AssertionError
com.vaticle.typedb.core.common.exception.TypeDBException:
at com.vaticle.typedb.core.common.exception.TypeDBException.of(TypeDBException.java:51)
at com.vaticle.typedb.core.concurrent.producer.ProducerIterator.hasNext(ProducerIterator.java:100)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:132)
at com.vaticle.typedb.core.common.iterator.AbstractFunctionalIterator.toList(AbstractFunctionalIterator.java:136)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.numReasonedAnswers(CompletenessVerifier.java:140)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.validateNumConcludableAnswers(CompletenessVerifier.java:107)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.verifyConcludableReasoning(CompletenessVerifier.java:85)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.lambda$verifyConjunction$3(CompletenessVerifier.java:77)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.verifyConjunction(CompletenessVerifier.java:67)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.lambda$verifyConjunction$2(CompletenessVerifier.java:74)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.lambda$verifyConjunction$3(CompletenessVerifier.java:69)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.verifyConjunction(CompletenessVerifier.java:67)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.lambda$verifyQuery$0(CompletenessVerifier.java:62)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.lambda$verifyQuery$1(CompletenessVerifier.java:62)
at java.base/java.util.HashMap.forEach(HashMap.java:1425)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CompletenessVerifier.verifyQuery(CompletenessVerifier.java:61)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CorrectnessVerifier.verifyCompleteness(CorrectnessVerifier.java:48)
at com.vaticle.typedb.core.test.behaviour.reasoner.ReasonerSteps.verify_answers_are_complete(ReasonerSteps.java:197)
at ✽.verify answers are complete(file:///private/var/tmp/_bazel_jamesfletcher/91bfc2886b4509aa35a584e846a96d83/execroot/vaticle_typedb/bazel-out/darwin-fastbuild/bin/test/behaviour/debug/test.runfiles/vaticle_typedb/test/behaviour/debug/debug.feature:198)
Caused by:
at com.vaticle.typedb.core.traversal.iterator.GraphIterator$Scopes$Scoped.replaceLast(GraphIterator.java:408)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.lambda$branch$2(GraphIterator.java:298)
at com.vaticle.typedb.core.common.iterator.FilteredIterator.fetchAndCheck(FilteredIterator.java:41)
at com.vaticle.typedb.core.common.iterator.FilteredIterator.hasNext(FilteredIterator.java:37)
at com.vaticle.typedb.core.common.iterator.MappedIterator.hasNext(MappedIterator.java:35)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeNext(GraphIterator.java:221)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.backTrack(GraphIterator.java:316)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeNextBranch(GraphIterator.java:248)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeNext(GraphIterator.java:225)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.hasNext(GraphIterator.java:99)
at com.vaticle.typedb.core.common.iterator.DistinctIterator.fetchAndCheck(DistinctIterator.java:48)
at com.vaticle.typedb.core.common.iterator.DistinctIterator.hasNext(DistinctIterator.java:44)
at com.vaticle.typedb.core.common.iterator.FlatMappedIterator.fetchAndCheck(FlatMappedIterator.java:52)
at com.vaticle.typedb.core.common.iterator.FlatMappedIterator.hasNext(FlatMappedIterator.java:48)
at com.vaticle.typedb.core.common.iterator.MappedIterator.hasNext(MappedIterator.java:35)
at com.vaticle.typedb.core.common.poller.BasePoller.poll(BasePoller.java:35)
at com.vaticle.typedb.core.common.poller.LinkedPollers.poll(LinkedPollers.java:36)
at com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.searchSourceForAnswer(AnswerCache.java:136)
at com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache$SubsumptionAnswerCache.searchForAnswer(AnswerCache.java:233)
at com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.get(AnswerCache.java:122)
at com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache$Reader.poll(AnswerCache.java:166)
at com.vaticle.typedb.core.common.poller.FlatMappedPoller.poll(FlatMappedPoller.java:45)
at com.vaticle.typedb.core.reasoner.resolution.framework.RequestState$CachingRequestState.nextAnswer(RequestState.java:90)
at com.vaticle.typedb.core.reasoner.resolution.resolver.BoundRetrievableResolver.sendAnswerOrFail(BoundRetrievableResolver.java:126)
at com.vaticle.typedb.core.reasoner.resolution.resolver.BoundRetrievableResolver.receiveDirectRequest(BoundRetrievableResolver.java:100)
at com.vaticle.typedb.core.reasoner.resolution.resolver.BoundRetrievableResolver.receiveRequest(BoundRetrievableResolver.java:72)
at com.vaticle.typedb.core.reasoner.resolution.framework.Resolver.lambda$requestFromDownstream$0(Resolver.java:118)
at com.vaticle.typedb.core.concurrent.actor.Actor$Driver.lambda$execute$0(Actor.java:79)
at com.vaticle.typedb.core.concurrent.actor.ActorExecutor$Task.run(ActorExecutor.java:127)
at com.vaticle.typedb.core.concurrent.actor.ActorExecutor.run(ActorExecutor.java:71)
at java.base/java.lang.Thread.run(Thread.java:831)
I've separately encountered the same error from another scenario in recursion: Scenario: when relations' and attributes' inferences are mutually recursive, the inferred concepts can be retrieved
:
java.lang.AssertionError
com.vaticle.typedb.core.common.exception.TypeDBException:
at com.vaticle.typedb.core.common.exception.TypeDBException.of(TypeDBException.java:51)
at com.vaticle.typedb.core.concurrent.producer.ProducerIterator.hasNext(ProducerIterator.java:100)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:132)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.Materialiser$Rule.materialise(Materialiser.java:130)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.Materialiser.materialise(Materialiser.java:76)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.Materialiser.materialise(Materialiser.java:66)
at com.vaticle.typedb.core.test.behaviour.reasoner.verification.CorrectnessVerifier.initialise(CorrectnessVerifier.java:35)
at com.vaticle.typedb.core.test.behaviour.reasoner.ReasonerSteps.verifier_is_initialised(ReasonerSteps.java:134)
at ✽.verifier is initialised(file:///private/var/tmp/_bazel_jamesfletcher/91bfc2886b4509aa35a584e846a96d83/execroot/vaticle_typedb/bazel-out/darwin-fastbuild/bin/test/behaviour/reasoner/tests/recursion/test.runfiles/vaticle_typedb/external/vaticle_typedb_behaviour/typeql/reasoner/recursion.feature:363)
Caused by:
at com.vaticle.typedb.core.traversal.iterator.GraphIterator$Scopes$Scoped.popLast(GraphIterator.java:395)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.popScope(GraphIterator.java:326)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeFirstBranch(GraphIterator.java:144)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeFirst(GraphIterator.java:120)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeFirstBranch(GraphIterator.java:133)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeFirst(GraphIterator.java:120)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeFirstBranch(GraphIterator.java:133)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.computeFirst(GraphIterator.java:120)
at com.vaticle.typedb.core.traversal.iterator.GraphIterator.hasNext(GraphIterator.java:95)
at com.vaticle.typedb.core.common.iterator.DistinctIterator.fetchAndCheck(DistinctIterator.java:48)
at com.vaticle.typedb.core.common.iterator.DistinctIterator.hasNext(DistinctIterator.java:44)
at com.vaticle.typedb.core.common.iterator.MappedIterator.hasNext(MappedIterator.java:35)
at com.vaticle.typedb.core.concurrent.producer.AsyncProducer.job(AsyncProducer.java:125)
at com.vaticle.typedb.core.concurrent.producer.AsyncProducer.lambda$compensate$5(AsyncProducer.java:116)
at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:783)
at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:831)
No longer relevant in the new traversal engine is tested in #6636