orc-lang / orc

Orc programming language implementation
https://orc.csres.utexas.edu/
BSD 3-Clause "New" or "Revised" License
41 stars 3 forks source link

Virtual Clock -- assertion failed on shortest path example #95

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
From:   Jayadev Misra
Date:   December 1, 2011 16:43:20 CST

Procedure to Repeat:

import site IntegerTimeOrder="orc.lib.time.IntegerTimeOrder"

val cells = Table(6, lambda(_) = Cell())
def conn(0) = [(1, 1), (2, 2)]
def conn(1) = [(4, 4), (2, 2)]
def conn(2) = [(5, 3), (1, 4), (4, 5)]
def conn(3) = [(1, 5)]
def conn(4) = [(1, 3), (2, 5)]
def conn(5) = [(1, 0)]
def succ(u) = forkMap(Let, conn(u))

def Vwait(t) = Vawait(t + Vtime())
def eval(u) = cells(u) := Vtime() >> Println((u,cells(u)?)) >>
  succ(u) >(d, v)>
  Vwait(d) >>
  eval(v)

Vclock(IntegerTimeOrder) >> Vawait(0) >>
  (eval(0) | cells(5)?)

Expected / Actual Results:
The program works correctly, but it says "assertion failed" on termination 
(after publishing the correct output).

Version and Platform:
Orchard Try Orc on orc.csres, SVN rev. 2914

Original issue reported on code.google.com by jthywissen on 4 Dec 2011 at 8:44

GoogleCodeExporter commented 9 years ago
Vawait assert stack trace, from the server log:

Problem: java.lang.AssertionError: assertion failed
java.lang.AssertionError: assertion failed        at 
scala.Predef$.assert(Predef.scala:89)
       at orc.run.core.VirtualClock.await(VirtualClock.scala:115)
       at orc.run.core.Token.clockCall(Token.scala:392)
       at orc.run.core.Token.siteCall(Token.scala:409)
       at orc.run.core.Token$$anonfun$makeCall$4.apply(Token.scala:438)
       at orc.run.core.Token$$anonfun$makeCall$4.apply(Token.scala:438)
       at orc.util.BlockableMapExtension$ListWithBlockableMap.walk$1(BlockableMapExtension.scala:40)
       at orc.util.BlockableMapExtension$ListWithBlockableMap$$anonfun$walk$1$1.apply(BlockableMapExtension.scala:39)
       at orc.util.BlockableMapExtension$ListWithBlockableMap$$anonfun$walk$1$1.apply(BlockableMapExtension.scala:39)
       at orc.run.core.Token$$anonfun$resolve$1.apply(Token.scala:292)
       at orc.run.core.Token$$anonfun$resolve$1.apply(Token.scala:291)
       at orc.run.core.Token.resolveOptional(Token.scala:313)
       at orc.run.core.Token.resolve(Token.scala:291)
       at orc.run.core.Token$$anonfun$makeCall$3$$anonfun$apply$3.apply(Token.scala:438)
       at orc.run.core.Token$$anonfun$makeCall$3$$anonfun$apply$3.apply(Token.scala:438)
       at orc.util.BlockableMapExtension$ListWithBlockableMap.walk$1(BlockableMapExtension.scala:39)
       at orc.util.BlockableMapExtension$ListWithBlockableMap.blockableMap(BlockableMapExtension.scala:43)
       at orc.run.core.Token.makeCall(Token.scala:438)
       at orc.run.core.Token$$anonfun$eval$2.apply(Token.scala:480)
       at orc.run.core.Token$$anonfun$eval$2.apply(Token.scala:480)
       at orc.run.core.Token$$anonfun$resolve$1.apply(Token.scala:292)
       at orc.run.core.Token$$anonfun$resolve$1.apply(Token.scala:291)
       at orc.run.core.Token.resolveOptional(Token.scala:313)
       at orc.run.core.Token.resolve(Token.scala:291)
       at orc.run.core.Token.eval(Token.scala:480)
       at orc.run.core.Token.run(Token.scala:453)
       at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
       at java.lang.Thread.run(Thread.java:662)

Original comment by jthywissen on 4 Dec 2011 at 8:45

GoogleCodeExporter commented 9 years ago

Original comment by jthywissen on 28 Jun 2012 at 10:33

GoogleCodeExporter commented 9 years ago
Looks like VirtualClock.readyCount [the setQuiescent/unsetQuiescent counter] is 
incorrect.

Was this implementation finished?  It looks like there may be some missing 
pieces (or I'm not seeing it all).

Original comment by jthywissen on 29 Jun 2012 at 2:22

GoogleCodeExporter commented 9 years ago
(just cleaning up -- accepting "New" issues)

Original comment by jthywissen on 6 Jul 2012 at 9:59

GoogleCodeExporter commented 9 years ago
This will be addressed by David, John, and Arthur as a group, due to complexity 
and the need for more eyes to see race conditions in the code.

Original comment by arthur.peters on 29 Nov 2012 at 9:44

GoogleCodeExporter commented 9 years ago
Some additional test cases that expose this error:

{- abuse test one -}
upto(50000) >>
Vclock(IntegerTimeOrder) >> Vawait(0)

{- abuse test two -}
def VtimeI() = (Vtime() :!: Integer)

upto(50000) >>
Vclock(IntegerTimeOrder) >> Vawait(0) >>
( Rwait(999) >> Vawait(VtimeI()+2) >> VtimeI() >x> Println("999:"+x) >> stop
| Println("test") >> VtimeI()
| Rwait(1000) >> Vawait(VtimeI()+3)  >> VtimeI() >x> Println("1000:"+x) >> stop
)

Original comment by dkitc...@gmail.com on 6 Dec 2012 at 11:12

GoogleCodeExporter commented 9 years ago
This issue was closed by revision r3128.

Original comment by jthywissen on 22 Dec 2012 at 11:48

GoogleCodeExporter commented 9 years ago

Original comment by jthywissen on 2 Sep 2014 at 7:37