Akka 2.3.4 Released - Major updates to Akka Persistence

202 views
Skip to first unread message

Patrik Nordwall

unread,
Jun 30, 2014, 8:56:36 AM6/30/14
to akka...@googlegroups.com, akka...@googlegroups.com, scala-user

Dear hAkkers,


We—the Akka committers—are pleased to be able to announce the availability of Akka 2.3.4. This is the fourth maintenance release of the 2.3 branch. This release contains extensive changes to the experimental module Akka Persistence:


  • Processor and EventsourcedProcessor are deprecated and replaced by PersistentActor

  • Channel and PersistentChannel are deprecated and replaced by AtLeastOnceDelivery

  • View is deprecated and replaced by PersistentView


The reason for these changes is to simplify the API and reduce the confusion caused by the many overlapping features of the former API.


Akka Persistence is not backwards binary compatible with version 2.3.3, i.e. if you use Akka Persistence you must recompile your source code with version 2.3.4 and use libraries (e.g. journal plugins) that have been released for Akka 2.3.4. The changes to Akka Persistence are source backwards compatible with deprecation warnings. Please follow the instructions in the migration guide to update to the latest features of Akka Persistence.


Akka 2.3.4 is released for Scala 2.10.4 and 2.11.1. Apart from the Akka Persistence artifact this release is backwards binary compatible with version 2.3.0, 2.3.1, 2.3.2 and 2.3.3 which means that the new JARs are a drop-in replacement for the old one (but not the other way around) as long as your build does not enable the inliner (Scala-only restriction). Always make sure to use at least the latest version required by any of your project’s dependencies.

Migrating from Older Releases

When migrating an existing project from Akka 2.2.x please have a look at the migration guide.


Additional Release Details

The artifacts comprising this release have been published to https://oss.sonatype.org/content/repositories/releases/ and also to Maven Central. In addition, we adopted the sbt standard of encoding the Scala binary version in the artifact name, i.e. the core actor package’s artifactId is “akka-actor_2.10”.


The complete list of closed tickets can be found in the 2.3.4 github issues milestone.

Credits

commits added removed

  19    4856    2884 Patrik Nordwall

  11    3002    1265 Konrad 'ktoso' Malawski

   9     514     105 Björn Antonsson

   1     154       9 Martynas Mickevicius

   1      29      10 Jeroen Gordijn

   1      14       1 Johannes Rudolph

   1      52       5 Marcin Kubala

   1      24       0 Konrad Malawski

   1      73       1 Csongor Somogyi

   1       2       2 André Wolski


Happy hAkking!

--

Patrik Nordwall
Typesafe Reactive apps on the JVM
Twitter: @patriknw

Scott Clasen

unread,
Jun 30, 2014, 4:19:30 PM6/30/14
to akka...@googlegroups.com, akka...@googlegroups.com, scala...@googlegroups.com
Is there any migration work necessary for journal implementations, or just bump the akka version and re-publish?

Patrik Nordwall

unread,
Jun 30, 2014, 4:31:09 PM6/30/14
to akka...@googlegroups.com, akka...@googlegroups.com, scala-user
On Mon, Jun 30, 2014 at 10:19 PM, Scott Clasen <scott....@gmail.com> wrote:
Is there any migration work necessary for journal implementations, or just bump the akka version and re-publish?

It is source compatible, also for journal implementations, so that should be enough.

Two methods have been deprecated in the journal spi, but that is only an indication that you don't have to implement them later (when they have been removed).

/Patrik

 

--
You received this message because you are subscribed to the Google Groups "Akka Developer List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to akka-dev+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Olger Warnier

unread,
Jul 1, 2014, 11:53:26 AM7/1/14
to akka...@googlegroups.com, akka...@googlegroups.com, scala...@googlegroups.com
Nice, thanks :)

A small question, the EventsourcedProcessor will be replaced by the PersistentProcessor (as my compile messages tell me :) )
It seems that it's not available in the 2.3.4 source, is that right ?

The documentation states the use of the PersistentActor instead of the PersistentProcessor. 
With my assumption that this is not in 2.3.4 and will be created, what will be the difference ?

Next to that, I am using the EventsourcedProcessor with ClusterSharding and use the default processorId. Found a nice mention on how to get persistenceId work in the same way, but maybe there is a way to have the created PersistenceProcessor/Actor make use of a constructor that sets the proper ID (and not to be dependent on the actorPath) Any hints where this is done ? (and if it's possible to manipulate it ?) (My structure is similar as the akka cluster sharding activator template. 

Kind regards, 
Olger

Patrik Nordwall

unread,
Jul 1, 2014, 12:05:44 PM7/1/14
to akka...@googlegroups.com, akka...@googlegroups.com, scala-user
Let's continue with questions at akka-user.
/Patrik


--
>>>>>>>>>> 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 post to this group, send email to akka...@googlegroups.com.
Visit this group at http://groups.google.com/group/akka-user.

For more options, visit https://groups.google.com/d/optout.

Patrik Nordwall

unread,
Jul 1, 2014, 12:10:33 PM7/1/14
to akka...@googlegroups.com
On Tue, Jul 1, 2014 at 6:05 PM, Patrik Nordwall <patrik....@gmail.com> wrote:
Let's continue with questions at akka-user.
/Patrik


On Tue, Jul 1, 2014 at 5:53 PM, Olger Warnier <ol...@spectare.nl> wrote:
Nice, thanks :)

A small question, the EventsourcedProcessor will be replaced by the PersistentProcessor (as my compile messages tell me :) )
It seems that it's not available in the 2.3.4 source, is that right ?

The documentation states the use of the PersistentActor instead of the PersistentProcessor. 
With my assumption that this is not in 2.3.4 and will be created, what will be the difference ?

That is a typo in the deprecation message. It is supposed to be PersistentActor. It is the replacement for both Processor and EventsourcedProcessor.
 

Next to that, I am using the EventsourcedProcessor with ClusterSharding and use the default processorId. Found a nice mention on how to get persistenceId work in the same way, but maybe there is a way to have the created PersistenceProcessor/Actor make use of a constructor that sets the proper ID (and not to be dependent on the actorPath) Any hints where this is done ? (and if it's possible to manipulate it ?) (My structure is similar as the akka cluster sharding activator template. 

I would recommend: 
  // self.path.parent.name is the type name (utf-8 URL-encoded) 
  // self.path.name is the entry identifier (utf-8 URL-encoded)
  override def persistenceId: String = self.path.parent.name + "-" + self.path.name

Regards,
Patrik

Olger Warnier

unread,
Jul 1, 2014, 12:18:19 PM7/1/14
to akka...@googlegroups.com

On Tue, Jul 1, 2014 at 6:05 PM, Patrik Nordwall <patrik....@gmail.com> wrote:
Let's continue with questions at akka-user.
/Patrik
Good idea... The groups interface confuses me once in a while.  


On Tue, Jul 1, 2014 at 5:53 PM, Olger Warnier <ol...@spectare.nl> wrote:
Nice, thanks :)

A small question, the EventsourcedProcessor will be replaced by the PersistentProcessor (as my compile messages tell me :) )
It seems that it's not available in the 2.3.4 source, is that right ?

The documentation states the use of the PersistentActor instead of the PersistentProcessor. 
With my assumption that this is not in 2.3.4 and will be created, what will be the difference ?

That is a typo in the deprecation message. It is supposed to be PersistentActor. It is the replacement for both Processor and EventsourcedProcessor.
Good to know, I'll move to the actor then.  
 

Next to that, I am using the EventsourcedProcessor with ClusterSharding and use the default processorId. Found a nice mention on how to get persistenceId work in the same way, but maybe there is a way to have the created PersistenceProcessor/Actor make use of a constructor that sets the proper ID (and not to be dependent on the actorPath) Any hints where this is done ? (and if it's possible to manipulate it ?) (My structure is similar as the akka cluster sharding activator template. 

I would recommend: 
  // self.path.parent.name is the type name (utf-8 URL-encoded) 
  // self.path.name is the entry identifier (utf-8 URL-encoded)
  override def persistenceId: String = self.path.parent.name + "-" + self.path.name
Any reason you like to see the parent name inside the Id ? (I'll play around with it, but wondering if you have a specific reason for doing so)
 

Regards,
Patrik

Thanks for your reply,
Olger 

Patrik Nordwall

unread,
Jul 1, 2014, 12:32:01 PM7/1/14
to akka...@googlegroups.com
To make it unique across different types. E.g. BlogPost("12) must not clash with User("12").
If your ids are are already unique among all PersistentActor instances in your system you can use the plain id.

/Patrik
 

Regards,
Patrik

Thanks for your reply,
Olger 

--
>>>>>>>>>> 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 post to this group, send email to akka...@googlegroups.com.
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Olger Warnier

unread,
Jul 1, 2014, 3:24:46 PM7/1/14
to akka...@googlegroups.com
One small note for people that may run into this issue:

Our project uses the leveldb in a shared mode 'native = off' in our multi-jvm test setup. 
(inmem in our inproc setup) 

It appears that the leveldb dependency gives issues in this setup. 
The whole thing is described here

by excluding the leveldb 0.5 in your dependency setup (on akka-persistence) and added 0.7 manually, this is solved. 

like:

  val akkaPersistence       = "com.typesafe.akka"       %% "akka-persistence-experimental"   % V.akka     exclude("org.iq80.leveldb","leveldb")
  val levelDbFixed          = "org.iq80.leveldb"        %  "leveldb"                         % "0.7"

(thereafter use these in your build definition)
Interesting thing here is that it was updated before:

(but the releasing branches refer to 0.5 it appears (after a bit of browsing)

Patrik Nordwall

unread,
Jul 2, 2014, 2:32:20 AM7/2/14
to akka...@googlegroups.com
Thanks for sharing. I have added some information to the ticket.
/Patrik


--
>>>>>>>>>> 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 post to this group, send email to akka...@googlegroups.com.
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages