kefirfromperm/grails-asynchronous-mail

HibernateOptimisticLockingFailureException after upgrade to grails 3.3

Opened this issue · 3 comments

After upgrade grails 3.2.12 -> 3.3.9 I see on prod periodically exceptions:

org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:283)
at org.grails.orm.hibernate.GrailsHibernateTemplate.convertHibernateAccessException(GrailsHibernateTemplate.java:724)
at org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:303)
at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:243)
at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:117)
at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.performSave(AbstractHibernateGormInstanceApi.groovy:246)
at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.save(AbstractHibernateGormInstanceApi.groovy:163)
at org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:151)
at org.grails.datastore.gorm.GormEntity$Trait$Helper$save$3.call(Unknown Source)
at grails.plugin.asyncmail.AsynchronousMailMessage.save(AsynchronousMailMessage.groovy)
at grails.plugin.asyncmail.AsynchronousMailPersistenceService.save(AsynchronousMailPersistenceService.groovy:16)
at grails.plugin.asyncmail.AsynchronousMailProcessService.processEmailMessage(AsynchronousMailProcessService.groovy:91)
at grails.plugin.asyncmail.AsynchronousMailProcessService$_findAndSendEmails_closure1$_closure3.doCall(AsynchronousMailProcessService.groovy:46)
at grails.plugin.asyncmail.AsynchronousMailProcessService$_findAndSendEmails_closure1$_closure3.call(AsynchronousMailProcessService.groovy)
at org.grails.orm.hibernate.GrailsHibernateTemplate$1.doInHibernate(GrailsHibernateTemplate.java:153)
at org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:299)
at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:243)
at org.grails.orm.hibernate.GrailsHibernateTemplate.executeWithNewSession(GrailsHibernateTemplate.java:150)
at org.grails.orm.hibernate.AbstractHibernateDatastore.withNewSession(AbstractHibernateDatastore.java:356)
at org.grails.orm.hibernate.AbstractHibernateGormStaticApi.withNewSession(AbstractHibernateGormStaticApi.groovy:60)
at org.grails.datastore.gorm.GormEntity$Trait$Helper.withNewSession(GormEntity.groovy:1025)
at org.grails.datastore.gorm.GormEntity$Trait$Helper$withNewSession.call(Unknown Source)
at grails.plugin.asyncmail.AsynchronousMailMessage.withNewSession(AsynchronousMailMessage.groovy)
at grails.plugin.asyncmail.AsynchronousMailProcessService$_findAndSendEmails_closure1.doCall(AsynchronousMailProcessService.groovy:42)
at grails.plugin.asyncmail.AsynchronousMailProcessService$_findAndSendEmails_closure1.call(AsynchronousMailProcessService.groovy)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)

During upgrade flush mode has been changed to COMMIT

We are sending thousands of mails every day

asynchronous.mail.send.repeat.interval=20000l
asynchronous.mail.default.max.attempts.count=3
asynchronous.mail.messages.at.once=350
asynchronous.mail.send.immediately=false  // since 0.1.2
asynchronous.mail.disable=false    // since 0.7
//grails.mail.disabled=true
asynchronous.mail.persistence.provider='hibernate4' // Possible values are 'hibernate', 'hibernate4', 'mongodb'
asynchronous.mail.taskPoolSize=1
asynchronous.mail.newSessionOnImmediateSend=false
Guito commented

Did you find any solution?

nope, we are migrating to mailgun with rest api

Same problems facing after migration from Grails 2.X.X to 3.3.11.
Any solutions on the fixes ?