typedb icon indicating copy to clipboard operation
typedb copied to clipboard

GraphIterator assertion error

Open jmsfltchr opened this issue 3 years ago • 1 comments

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

  1. OS (where TypeDB server runs): Mac OS 10
  2. TypeDB version (and platform): TypeDB commit 1803d9f9ae7d4294193a55e2e44cc06131246817 on PR https://github.com/vaticle/typedb/pull/6403
  3. 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)

jmsfltchr avatar Jul 20 '21 13:07 jmsfltchr

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)

jmsfltchr avatar Jul 21 '21 08:07 jmsfltchr

No longer relevant in the new traversal engine is tested in #6636

flyingsilverfin avatar Sep 07 '22 15:09 flyingsilverfin