Open jamesrwelch opened 2 years ago
Stack trace for a new branch:
2022-05-24 14:32:10,239 [080-exec-1] ERROR o.g.web.errors.GrailsExceptionResolver : ApiInternalException occurred when processing request: [PUT] /api/versionedFolders/5ca6ec5d-f874-4f20-bb66-282b39c522f1/newBranchModelVersion
Cannot store on an unlocked GroupBasedUserSecurityPolicyManager. Stacktrace follows:
uk.ac.ox.softeng.maurodatamapper.api.exception.ApiInternalException: Cannot store on an unlocked GroupBasedUserSecurityPolicyManager
at uk.ac.ox.softeng.maurodatamapper.security.policy.GroupBasedSecurityPolicyManagerService.$tt__storeUserSecurityPolicyManager(GroupBasedSecurityPolicyManagerService.groovy:213)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.security.policy.GroupBasedSecurityPolicyManagerService.$tt__refreshUserSecurityPolicyManager(GroupBasedSecurityPolicyManagerService.groovy:239)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.security.policy.GroupBasedSecurityPolicyManagerService.$tt__groupBasedSecurityPolicyManagerService_addSecurityForSecurableResource(GroupBasedSecurityPolicyManagerService.groovy:119)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.FolderService.$tt__copyFolderPass(FolderService.groovy:378)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.FolderService$__tt__copyFolderContents_closure63.doCall(FolderService.groovy:442)
at uk.ac.ox.softeng.maurodatamapper.core.container.FolderService.$tt__copyFolderContents(FolderService.groovy:431)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.FolderService.$tt__copyFolderPass(FolderService.groovy:383)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.FolderService$__tt__copyFolderContents_closure63.doCall(FolderService.groovy:442)
at uk.ac.ox.softeng.maurodatamapper.core.container.FolderService.$tt__copyFolderContents(FolderService.groovy:431)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.FolderService.$tt__copyFolderPass(FolderService.groovy:383)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.FolderService.$tt__copyFolder(FolderService.groovy:336)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.VersionedFolderService.$tt__copyVersionedFolder(VersionedFolderService.groovy:560)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.VersionedFolderService.$tt__copyFolderAsNewBranchFolder(VersionedFolderService.groovy:536)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.VersionedFolderService.$tt__createNewBranchModelVersion(VersionedFolderService.groovy:476)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at uk.ac.ox.softeng.maurodatamapper.core.container.VersionedFolderController.$tt__newBranchModelVersion(VersionedFolderController.groovy:181)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126)
due to the way the code is called theres no way for the lock to be removed by the same process, therefore the lock must being removed by another competing process. Therefore the solution is to have the "lock" call actually "holdForLock" to allow any other process to complete and unlock the policy before relocking and starting a new run
unfortunately this doesnt seem to be replicatable locally, so i'm going to push a fix which will have to be tested insitu inside the nhsdd instance
The same error message is occurring for both deleting (see below) and creating new branches.