Howdy,

The short (and not politically popular) answer is that Scala's Actor
implementation is generally fragile and often broken.  Lift made the painful
switch away from Scala Actors 4 or so months ago for this reason.

If you can put together a simple example of the failure (basically something
that we can run with mvn jetty:run) and make it available on GitHub, we can
take a look at it.

Thanks,

David

On Tue, Jan 19, 2010 at 5:02 PM, Yu-Shan Fung <ambivale...@gmail.com> wrote:

> Thanks for the reply, Marius. Where can I get the 1.1 or 2.0 snapshot?
>
> I'm not doing any scheduling myself. I just created a bunch of Future's,
> and then call Futures.awaitAll. But my understanding is that Future is
> implemented with Actor's.
>
>     val fResults = ids.map { id => future(computeStuff(id)) }
>     val fList = fResults.toList     // forces creation of the future
> variables. otherwise they are created lazily, defeating parallelism
>     val finalResults = Futures.awaitAll(5000, fList: _*)
>
> This works the first time (and sometimes for a few times). But pretty soon,
> the call to awaitAll would fail with the aforementioned exception.
>
> I dug a bit into the scala code, and the code that fails within
> Futures.awaitAll is this:
>
>    Actor.timer.schedule(new java.util.TimerTask {
>      def run() { thisActor ! TIMEOUT }
>    }, timeout)
>
> And Actor.timer is defined as such:
>
> object Actor {
> ...
>   private[actors] val timer = new Timer(true)
> ...
> }
>
>
> I'm pretty new to both scala and lift, but it looks like the Actor.timer is
> initialized once (created as a daemon), and expected to always be available.
> But I don't fully understand what aspects of the lift environment persists
> across requests, and how, if at all, would Actor.timer end up in a
> cancelled/terminated state.
>
> Any idea? Thanks in advance!
>
>
>
>
> On Tue, Jan 19, 2010 at 6:40 AM, Marius <marius.dan...@gmail.com> wrote:
>
>> I'd recommend using Lisft 1.1-SNAPSHOT or 2.0-SNAPSHOT
>>
>> You stacktrace doesn't indicate anything related with Lift, so are you
>> using Java's scheduler, or are you using actors? Lift's ActorPing and
>> actors is a good way of doing scheduling. So can you elaborate on how
>> are you doing the scheduling?
>>
>> Br's,
>> Marius
>>
>> On Jan 19, 8:04 am, Yu-Shan Fung <ambivale...@gmail.com> wrote:
>> > Hi All,
>> >
>> > I have a lift app, where one of the functions performs sub-computations
>> > (including network operations) in parallel via future(s) &
>> Futures.awaitAll.
>> > It runs fine on the first request, but subsequent requests throws a
>> > IllegalStateException:
>> >
>> > Exception in thread "Thread-30" java.lang.IllegalStateException: Timer
>> > already cancelled.
>> >         at java.util.Timer.sched(Timer.java:376)
>> >         at java.util.Timer.schedule(Timer.java:192)
>> >         at scala.actors.Futures$.awaitAll(Future.scala:76)
>> >         at MyWorker.run(MyWorker.scala:20)
>> >         at java.lang.Thread.run(Thread.java:636)
>> >
>> > I dug up more documentation and it looks like this exception indicates
>> an
>> > attempt to schedule a task on a timer that has already been cancelled
>> > (associated daemon thread terminated?). Any idea why, or if I'm doing
>> > something wrong?
>> >
>> > In case it matters, I'm running Scala code runner version 2.7.7.final,
>> > Liftweb 1.0, Jetty 6.1.22.
>> >
>> > Any tips/pointers would be appreciated. Thanks!
>> > Yu-Shan
>> >
>> > --
>> > “When nothing seems to help, I go look at a stonecutter hammering away
>> at
>> > his rock perhaps a hundred times without as much as a crack showing in
>> it.
>> > Yet at the hundred and first blow it will split in two, and I know it
>> was
>> > not that blow that did it, but all that had gone before.” — Jacob Riis
>>
>> --
>>
>> You received this message because you are subscribed to the Google Groups
>> "Lift" group.
>> To post to this group, send email to lift...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>>
>>
>>
>>
>
>
> --
> “When nothing seems to help, I go look at a stonecutter hammering away at
> his rock perhaps a hundred times without as much as a crack showing in it.
> Yet at the hundred and first blow it will split in two, and I know it was
> not that blow that did it, but all that had gone before.” — Jacob Riis
>
> --
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
> To post to this group, send email to lift...@googlegroups.com.
> To unsubscribe from this group, send email to
> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=en.
>



-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics
--
You received this message because you are subscribed to the Google Groups "Lift" group.
To post to this group, send email to lift...@googlegroups.com.
To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.

Reply via email to