Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AssertionError in pickling lib for a transient field #8921

Closed
scabug opened this issue Oct 16, 2014 · 5 comments
Closed

AssertionError in pickling lib for a transient field #8921

scabug opened this issue Oct 16, 2014 · 5 comments
Assignees
Milestone

Comments

@scabug
Copy link

scabug commented Oct 16, 2014

Hi,
I came across a very random (low probability) bug using the scalax graph library.

I am attempting to recreate the bug in a simple test case by looping over a test that creates a small cyclic graph and calling graph.isCyclic.

import scalax.collection.Graph
import scalax.collection.edge.Implicits._
import scalax.collection.GraphEdge._

test("cycles") {
(0 until 10000).foreach(_ ⇒ Graph((1 ~+> 2)("a"), (1 ~+> 3)("b"), (2 ~+> 3)("c"), (3 ~+> 4)("d"), (4 ~+> 2)("e")).isCyclic)
}

The relevant code where the stack starts looks like this :

https://github.com/scala-graph/scala-graph/blob/master/core/src/main/scala/scalax/collection/Graph.scala#L43

@transient lazy val isDirected =
edgeT.tpe.baseClasses contains (typeOf[DiHyperEdgeLike[_]].typeSymbol)

Here is the stack

[11:10:56][Step 1/1] java.lang.AssertionError: assertion failed: trait EdgeLike
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.finishSym$1(UnPickler.scala:281)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:292)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.run(UnPickler.scala:76)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:37)
[11:10:56][Step 1/1] at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:565)
[11:10:56][Step 1/1] at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:32)
[11:10:56][Step 1/1] at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1231)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.scala$reflect$internal$pickling$UnPickler$Scan$$fromName$1(UnPickler.scala:207)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readExtSymbol$1(UnPickler.scala:226)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:250)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolRef(UnPickler.scala:783)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:346)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTypeRef$1.apply(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTypeRef$1.apply(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readTypeRef(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readType$1.apply(UnPickler.scala:353)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readType$1.apply(UnPickler.scala:353)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.PickleBuffer.until(PickleBuffer.scala:163)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.PickleBuffer.until(PickleBuffer.scala:163)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:353)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTypeRef$1.apply(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTypeRef$1.apply(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readTypeRef(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:358)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTypeRef$1.apply(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTypeRef$1.apply(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readTypeRef(UnPickler.scala:792)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readType(UnPickler.scala:366)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef$$anonfun$34.apply(UnPickler.scala:855)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef$$anonfun$34.apply(UnPickler.scala:855)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.complete(UnPickler.scala:855)
[11:10:56][Step 1/1] at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1231)
[11:10:56][Step 1/1] at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1374)
[11:10:56][Step 1/1] at scala.reflect.internal.Symbols$Symbol.annotations(Symbols.scala:1581)
[11:10:56][Step 1/1] at scala.reflect.internal.Symbols$Symbol.addAnnotation(Symbols.scala:1600)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolAnnotation(UnPickler.scala:491)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler$Scan.run(UnPickler.scala:88)
[11:10:56][Step 1/1] at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:37)
[11:10:56][Step 1/1] at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:565)
[11:10:56][Step 1/1] at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:32)
[11:10:56][Step 1/1] at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1231)
[11:10:56][Step 1/1] at scala.reflect.internal.Types$TypeRef.thisInfo(Types.scala:2407)
[11:10:56][Step 1/1] at scala.reflect.internal.Types$TypeRef.baseClasses(Types.scala:2412)
[11:10:56][Step 1/1] at scalax.collection.GraphLike$class.isDirected(Graph.scala:44)
[11:10:56][Step 1/1] at scalax.collection.immutable.DefaultGraphImpl.isDirected$lzycompute(Graph.scala:41)
[11:10:56][Step 1/1] at scalax.collection.immutable.DefaultGraphImpl.isDirected(Graph.scala:41)

@scabug
Copy link
Author

scabug commented Oct 16, 2014

Imported From: https://issues.scala-lang.org/browse/SI-8921?orig=1
Reporter: Channing Walton (channingwalton)
Affected Versions: 2.10.4

@scabug
Copy link
Author

scabug commented Oct 16, 2014

@retronym said:
Is this in a mulittreaded setting? Looks like scalex uses experimental TypeTags (runtime reflection) which are not thread safe in Scala 2.10.x

@scabug scabug closed this as completed Oct 16, 2014
@scabug
Copy link
Author

scabug commented Oct 16, 2014

Channing Walton (channingwalton) said:
No its not multithreaded - which is even more baffling.

@scabug
Copy link
Author

scabug commented Oct 16, 2014

@retronym said:
Are you sure the test framework isn't executing tests in parallel? Could you please publish a small sbt project with steps to reproduce?

@scabug
Copy link
Author

scabug commented Oct 17, 2014

Channing Walton (channingwalton) said:
Sure. It's entirely possible it's something going on in sbt. I'll be back if I manage to reproduce it in a small project.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants