Re: [Lift] Re: Actor.timer daemon thread terminates after first request?

2010-01-20 Thread David Pollak
On Tue, Jan 19, 2010 at 11:58 PM, Yu-Shan Fung wrote:

> Thanks for the reply, David!
>
> I finally realized my problem is that I was compiling against the scala
> 2.7.3 library instead of 2.7.7 as I thought. When I use the newer lib, the
> exception apparently goes away.
>

Scala is very version sensitive.  If you're using Lift 1.1-M5+, you must use
Scala 2.7.7.  If you're using Lift 1.0.2, I think the correct version is
2.7.5.


>
> Regardless, what would be a good replacement for the scala actors library?
>


Akka:  akkasource.org


>
> Thanks,
> Yu-Shan
>
>
> On Tue, Jan 19, 2010 at 8:44 PM, David Pollak <
> feeder.of.the.be...@gmail.com> wrote:
>
>> 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 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  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  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
 .
 For more options, visit this group at
 http://groups.google.com/group/liftweb?hl=en.



>

Re: [Lift] Re: Actor.timer daemon thread terminates after first request?

2010-01-20 Thread Yu-Shan Fung
Thanks for the reply, David!

I finally realized my problem is that I was compiling against the scala
2.7.3 library instead of 2.7.7 as I thought. When I use the newer lib, the
exception apparently goes away.

Regardless, what would be a good replacement for the scala actors library?

Thanks,
Yu-Shan


On Tue, Jan 19, 2010 at 8:44 PM, David Pollak  wrote:

> 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 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  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  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
>>> .
>>> 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.
>>

Re: [Lift] Re: Actor.timer daemon thread terminates after first request?

2010-01-19 Thread David Pollak
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  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  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  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
>> .
>> 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
> .
> 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

Re: [Lift] Re: Actor.timer daemon thread terminates after first request?

2010-01-19 Thread Yu-Shan Fung
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  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  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
> .
> 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.
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.




[Lift] Re: Actor.timer daemon thread terminates after first request?

2010-01-19 Thread Marius
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  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.
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.