Re: [akka-user] Re: [akka-persistence] Testing systems which have Persistence

2015-01-06 Thread Anders Båtstrand
Ah, I did not understand that.

I have solved that by starting a new Akka system and a new JavaTestKit in 
each test, and doing the test code in a static initializer. Before, I 
switch to the in-mem journal using system properties. 

In my abstract super-class:



*private *ActorSystem *system*;

@Before
*public void *startAkka() {
*system *= ActorSystem.*create*(*TestSys*, ConfigFactory.*load*()
.withValue(*akka.persistence.journal.plugin*, *fromAnyRef*(
*akka.persistence.journal.inmem*)));
}

@After
*public void *stoppAkka() {
*system*.shutdown();
*system*.awaitTermination();
}

*protected *ActorSystem system() {
*return **system*;
}

And in my tests:

@Test
*public void *test() {
*new *JavaTestKit(system()) {{
// test code

}};
}




JavaTestKit is (afaik) just a wrapper around the Akka system, so if you 
have common code used in more than one test, just send in the system as a 
parameter, and create a new JavaTestKit.

If you use Scala, this can probably (?) be done in a different way, I would 
not know...

Kind regards,

Anders


kl. 04:04:05 UTC+1 tirsdag 6. januar 2015 skrev Ian Holsman følgende:

 Thanks for answering Anders, your answers were very helpful. 

 for #1 (starting in a known state). I was more asking how do I start 
 with a 'fresh/clean' journal with no history. I can manually remove 
 the files, but I was hoping there was something in the test-kit I 
 could do which will achieve this so I can do the tests in my IDE. 



 On Mon, Jan 5, 2015 at 6:55 AM, Anders Båtstrand ande...@gmail.com 
 javascript: wrote: 
  I have only been using Akka Persistence for a few months, but this is my 
  suggestions: 
  
  1. I always start empty, but that is possibly not what you want. Maybe a 
  file based storage, and you copy the files in place right before you 
 start 
  the Akka system? 
  
  2. I have solved the same problem by letting the parent actor be 
 responsible 
  for killing the children. That is: The child receives an event that it 
  calculates should result in it's own destruction, and it then calls the 
  parent, which then kills it (and updates a map over actors). In my case 
 the 
  parent is also delegating messages to the child, so this way I am sure 
 not 
  to send messages to any actor that is on the way down (that is, before 
 the 
  parent received the Terminated-message). 
  
  3. I am not sure i understood the question. I have CreateChild and 
 KillChild 
  events persistent from the parent actor. During recovery, it makes a map 
  over actors it should create or not, and only creates then 
  onRecoveryComplete. That way I do not create actors I would immediatly 
 kill. 
  
  Hope this was helpful! 
  
  Best regards, 
  
  Anders Båtstrand 
  
  kl. 19:20:30 UTC+1 fredag 2. januar 2015 skrev Ian Holsman følgende: 
  
  Hi. 
  
  I'm building a 'toy' game that makes uses of akka-persistence, in order 
 to 
  learn it. 
  
  in a nutshell the game is 1000's of people/bots create villages, they 
 act 
  independently of each other, and generally pass messages to each other 
 to 
  chat/fight and all that good stuff. 
  
  Where I am having problems are: 
  
  1. how do I initialize the persistence system at the start of testing 
 so I 
  am in a 'known state' when I start. 
  
  2. how I assign IDs (persistanceId)  to actors. 
  Ideally I would use a map reference for while the villages exist, and 
 be 
  able to re-use them if a new village is created. but the problem is it 
 finds 
  the old village, and replays all the events (including the death event 
 which 
  kills it). 
  I don't mind re-using a old actor, but i'd like to stop it (ie 
 poisonpill) 
  when it isn't active. 
  
  It seems like they need to be unique for the life of the system, and to 
 do 
  so I would need a counter in place or GUIDs. but then I would need to 
 keep 
  track of the Map reference/GUID mapping meaning my code would need to 
 first 
  talk to the mapping holder, and then to the village itself (2 messages, 
 1 
  sync) which seems like non-ideal. (as opposed to 
 context.actorselection(XYZ 
  map-reference) ! message which I guess is still 2 messages under the 
  covers, 1 sync too) 
  
  3. the recovery log only seems to 'start' when I bring up the actor. 
  Is there a way to know which actors are currently 'active' and just let 
  Akka start them all up, instead of me keeping a list/map of 'active' 
  villages, and manually restarting them. 
  
  
  
  Thanks .. 
  
  Ian. 
  
  -- 
  Read the docs: http://akka.io/docs/ 
  Check the FAQ: 
  http://doc.akka.io/docs/akka/current/additional/faq.html 
  Search the archives: https://groups.google.com/group/akka-user 
  --- 
  You received this message because you are subscribed to the Google 
 Groups 
  Akka User List group. 
  To unsubscribe from this group and stop receiving emails from it, send 
 an 
  email to akka-user+...@googlegroups.com javascript:. 
  To post to this group, send email 

Re: [akka-user] Re: [akka-persistence] Testing systems which have Persistence

2015-01-06 Thread Ian Holsman
That's exactly what I needed.

Thanks Anders.
(I put it in my akka.conf)

On Tue, Jan 6, 2015 at 2:41 AM, Anders Båtstrand ander...@gmail.com wrote:
 Ah, I did not understand that.

 I have solved that by starting a new Akka system and a new JavaTestKit in
 each test, and doing the test code in a static initializer. Before, I switch
 to the in-mem journal using system properties.

 In my abstract super-class:



 private ActorSystem system;

 @Before
 public void startAkka() {
 system = ActorSystem.create(TestSys, ConfigFactory.load()
 .withValue(akka.persistence.journal.plugin,
 fromAnyRef(akka.persistence.journal.inmem)));
 }

 @After
 public void stoppAkka() {
 system.shutdown();
 system.awaitTermination();
 }

 protected ActorSystem system() {
 return system;
 }


 And in my tests:

 @Test
 public void test() {
 new JavaTestKit(system()) {{
 // test code

 }};
 }




 JavaTestKit is (afaik) just a wrapper around the Akka system, so if you have
 common code used in more than one test, just send in the system as a
 parameter, and create a new JavaTestKit.

 If you use Scala, this can probably (?) be done in a different way, I would
 not know...

 Kind regards,

 Anders


 kl. 04:04:05 UTC+1 tirsdag 6. januar 2015 skrev Ian Holsman følgende:

 Thanks for answering Anders, your answers were very helpful.

 for #1 (starting in a known state). I was more asking how do I start
 with a 'fresh/clean' journal with no history. I can manually remove
 the files, but I was hoping there was something in the test-kit I
 could do which will achieve this so I can do the tests in my IDE.



 On Mon, Jan 5, 2015 at 6:55 AM, Anders Båtstrand ande...@gmail.com
 wrote:
  I have only been using Akka Persistence for a few months, but this is my
  suggestions:
 
  1. I always start empty, but that is possibly not what you want. Maybe a
  file based storage, and you copy the files in place right before you
  start
  the Akka system?
 
  2. I have solved the same problem by letting the parent actor be
  responsible
  for killing the children. That is: The child receives an event that it
  calculates should result in it's own destruction, and it then calls the
  parent, which then kills it (and updates a map over actors). In my case
  the
  parent is also delegating messages to the child, so this way I am sure
  not
  to send messages to any actor that is on the way down (that is, before
  the
  parent received the Terminated-message).
 
  3. I am not sure i understood the question. I have CreateChild and
  KillChild
  events persistent from the parent actor. During recovery, it makes a map
  over actors it should create or not, and only creates then
  onRecoveryComplete. That way I do not create actors I would immediatly
  kill.
 
  Hope this was helpful!
 
  Best regards,
 
  Anders Båtstrand
 
  kl. 19:20:30 UTC+1 fredag 2. januar 2015 skrev Ian Holsman følgende:
 
  Hi.
 
  I'm building a 'toy' game that makes uses of akka-persistence, in order
  to
  learn it.
 
  in a nutshell the game is 1000's of people/bots create villages, they
  act
  independently of each other, and generally pass messages to each other
  to
  chat/fight and all that good stuff.
 
  Where I am having problems are:
 
  1. how do I initialize the persistence system at the start of testing
  so I
  am in a 'known state' when I start.
 
  2. how I assign IDs (persistanceId)  to actors.
  Ideally I would use a map reference for while the villages exist, and
  be
  able to re-use them if a new village is created. but the problem is it
  finds
  the old village, and replays all the events (including the death event
  which
  kills it).
  I don't mind re-using a old actor, but i'd like to stop it (ie
  poisonpill)
  when it isn't active.
 
  It seems like they need to be unique for the life of the system, and to
  do
  so I would need a counter in place or GUIDs. but then I would need to
  keep
  track of the Map reference/GUID mapping meaning my code would need to
  first
  talk to the mapping holder, and then to the village itself (2 messages,
  1
  sync) which seems like non-ideal. (as opposed to
  context.actorselection(XYZ
  map-reference) ! message which I guess is still 2 messages under the
  covers, 1 sync too)
 
  3. the recovery log only seems to 'start' when I bring up the actor.
  Is there a way to know which actors are currently 'active' and just let
  Akka start them all up, instead of me keeping a list/map of 'active'
  villages, and manually restarting them.
 
 
 
  Thanks ..
 
  Ian.
 
  --
  Read the docs: http://akka.io/docs/
  Check the FAQ:
  http://doc.akka.io/docs/akka/current/additional/faq.html
  Search the archives: https://groups.google.com/group/akka-user
  ---
  You received this message because you are subscribed to the Google
  Groups
  Akka User List group.
  To unsubscribe from this group and stop receiving emails from it, send
  an
  email to akka-user+...@googlegroups.com.
  To 

[akka-user] Re: [akka-persistence] Testing systems which have Persistence

2015-01-05 Thread Anders Båtstrand
I have only been using Akka Persistence for a few months, but this is my 
suggestions:

1. I always start empty, but that is possibly not what you want. Maybe a 
file based storage, and you copy the files in place right before you start 
the Akka system?

2. I have solved the same problem by letting the parent actor be 
responsible for killing the children. That is: The child receives an event 
that it calculates should result in it's own destruction, and it then calls 
the parent, which then kills it (and updates a map over actors). In my case 
the parent is also delegating messages to the child, so this way I am sure 
not to send messages to any actor that is on the way down (that is, before 
the parent received the Terminated-message).

3. I am not sure i understood the question. I have CreateChild and 
KillChild events persistent from the parent actor. During recovery, it 
makes a map over actors it should create or not, and only creates then 
onRecoveryComplete. That way I do not create actors I would immediatly kill.

Hope this was helpful!

Best regards,

Anders Båtstrand

kl. 19:20:30 UTC+1 fredag 2. januar 2015 skrev Ian Holsman følgende:

 Hi.

 I'm building a 'toy' game that makes uses of akka-persistence, in order to 
 learn it.

 in a nutshell the game is 1000's of people/bots create villages, they act 
 independently of each other, and generally pass messages to each other to 
 chat/fight and all that good stuff.

 Where I am having problems are:

 1. how do I initialize the persistence system at the start of testing so I 
 am in a 'known state' when I start. 

 2. how I assign IDs (persistanceId)  to actors. 
 Ideally I would use a map reference for while the villages exist, and be 
 able to re-use them if a new village is created. but the problem is it 
 finds the old village, and replays all the events (including the death 
 event which kills it). 
 I don't mind re-using a old actor, but i'd like to stop it (ie poisonpill) 
 when it isn't active.

 It seems like they need to be unique for the life of the system, and to do 
 so I would need a counter in place or GUIDs. but then I would need to keep 
 track of the Map reference/GUID mapping meaning my code would need to first 
 talk to the mapping holder, and then to the village itself (2 messages, 1 
 sync) which seems like non-ideal. (as opposed to 
 context.actorselection(XYZ map-reference) ! message which I guess is 
 still 2 messages under the covers, 1 sync too)

 3. the recovery log only seems to 'start' when I bring up the actor. 
 Is there a way to know which actors are currently 'active' and just let 
 Akka start them all up, instead of me keeping a list/map of 'active' 
 villages, and manually restarting them.



 Thanks .. 

 Ian.


-- 
  Read the docs: http://akka.io/docs/
  Check the FAQ: 
 http://doc.akka.io/docs/akka/current/additional/faq.html
  Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups Akka 
User List group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to akka-user+unsubscr...@googlegroups.com.
To post to this group, send email to akka-user@googlegroups.com.
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.


Re: [akka-user] Re: [akka-persistence] Testing systems which have Persistence

2015-01-05 Thread Ian Holsman
Thanks for answering Anders, your answers were very helpful.

for #1 (starting in a known state). I was more asking how do I start
with a 'fresh/clean' journal with no history. I can manually remove
the files, but I was hoping there was something in the test-kit I
could do which will achieve this so I can do the tests in my IDE.



On Mon, Jan 5, 2015 at 6:55 AM, Anders Båtstrand ander...@gmail.com wrote:
 I have only been using Akka Persistence for a few months, but this is my
 suggestions:

 1. I always start empty, but that is possibly not what you want. Maybe a
 file based storage, and you copy the files in place right before you start
 the Akka system?

 2. I have solved the same problem by letting the parent actor be responsible
 for killing the children. That is: The child receives an event that it
 calculates should result in it's own destruction, and it then calls the
 parent, which then kills it (and updates a map over actors). In my case the
 parent is also delegating messages to the child, so this way I am sure not
 to send messages to any actor that is on the way down (that is, before the
 parent received the Terminated-message).

 3. I am not sure i understood the question. I have CreateChild and KillChild
 events persistent from the parent actor. During recovery, it makes a map
 over actors it should create or not, and only creates then
 onRecoveryComplete. That way I do not create actors I would immediatly kill.

 Hope this was helpful!

 Best regards,

 Anders Båtstrand

 kl. 19:20:30 UTC+1 fredag 2. januar 2015 skrev Ian Holsman følgende:

 Hi.

 I'm building a 'toy' game that makes uses of akka-persistence, in order to
 learn it.

 in a nutshell the game is 1000's of people/bots create villages, they act
 independently of each other, and generally pass messages to each other to
 chat/fight and all that good stuff.

 Where I am having problems are:

 1. how do I initialize the persistence system at the start of testing so I
 am in a 'known state' when I start.

 2. how I assign IDs (persistanceId)  to actors.
 Ideally I would use a map reference for while the villages exist, and be
 able to re-use them if a new village is created. but the problem is it finds
 the old village, and replays all the events (including the death event which
 kills it).
 I don't mind re-using a old actor, but i'd like to stop it (ie poisonpill)
 when it isn't active.

 It seems like they need to be unique for the life of the system, and to do
 so I would need a counter in place or GUIDs. but then I would need to keep
 track of the Map reference/GUID mapping meaning my code would need to first
 talk to the mapping holder, and then to the village itself (2 messages, 1
 sync) which seems like non-ideal. (as opposed to context.actorselection(XYZ
 map-reference) ! message which I guess is still 2 messages under the
 covers, 1 sync too)

 3. the recovery log only seems to 'start' when I bring up the actor.
 Is there a way to know which actors are currently 'active' and just let
 Akka start them all up, instead of me keeping a list/map of 'active'
 villages, and manually restarting them.



 Thanks ..

 Ian.

 --
 Read the docs: http://akka.io/docs/
 Check the FAQ:
 http://doc.akka.io/docs/akka/current/additional/faq.html
 Search the archives: https://groups.google.com/group/akka-user
 ---
 You received this message because you are subscribed to the Google Groups
 Akka User List group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to akka-user+unsubscr...@googlegroups.com.
 To post to this group, send email to akka-user@googlegroups.com.
 Visit this group at http://groups.google.com/group/akka-user.
 For more options, visit https://groups.google.com/d/optout.



-- 
Ian Holsman
i...@holsman.com.au
PH: + 61-3-9028 8133 / +1-(425) 998-7083

-- 
  Read the docs: http://akka.io/docs/
  Check the FAQ: 
 http://doc.akka.io/docs/akka/current/additional/faq.html
  Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups Akka 
User List group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to akka-user+unsubscr...@googlegroups.com.
To post to this group, send email to akka-user@googlegroups.com.
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.