The title is not exact, I wanted to mean tx.success() instead of tx.close().
Thanks ;)
On Tuesday, August 12, 2014 12:36:12 PM UTC+2, Michael Azerhad wrote:
>
> Hi,
>
> I'm using SDN 3.1.2 with Neo4j 2.1.2.
>
> I have this (simple) Akka code (a worker actor retrieving new events in a
> kind of loop to consume them):
>
> def receive = {
> case RetrieveNewEvents =>
> val tx = graphDatabaseService.beginTx() //starts transaction
> try {
> val newEvents = eventRepository.findNewEvents(
> EventBatchSizeProperty) //involving @Query("MATCH (e:Event:New) RETURN e
> ORDER BY e.occurredOn LIMIT {0}")
> newEvents.foreach {
> event => {
> log.info("sending event: " + event.id + " to eventStream")
> context.system.eventStream.publish(event) // sent event
> to consumers - no importance for the issue
> log.info("event sent to actors to be consumed !")
> eventRepository.flagAsConsumed(event.id) // involving
> @Query("MATCH (e:Event {_id: {0}}) REMOVE e:New SET e:Consumed return e")
> log.info("event: " + event.id + " flagged as consumed !")
> }
> }
> tx.success() // commit the transaction
> }
> catch {
> case e: Throwable => log.info(e.getMessage)
> }
> finally {
> tx.close() //close the transation
> system.scheduler.scheduleOnce(EventListenerScheduleProperty
> seconds, self, RetrieveNewEvents) // loop again by sending a
> RetrieveNewEvents after 1 second
> }
> }
>
> I noticed that for some events, I retrieved them more that once (written
> in my logs)... as if the transaction was not commited, meaning that the
> label was not set to CONSUMED yet.
> Obviously, if was not set to CONSUMED before the next loop, it would be
> retrieve again since still viewed as NEW.
>
> My question is:
>
> May it possible that tx.success() or tx.close() works...asynchronously?!
> It seems absurd but it sounds to be the only explanation I guess for
> retrieving more than once the same event.
> I tried to update the duration from 1 second to 3 seconds, and now the
> whole works without this issue.
>
> Is there an apparent issue in my code that I may ignore? Why timing is
> important here?
>
> Thanks a lot,
>
> Michael
>
>
--
You received this message because you are subscribed to the Google Groups
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.