Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Internal Server Error when subsetting many data elements #295

Closed
aaronforshaw opened this issue Mar 17, 2022 · 0 comments · Fixed by #296
Closed

Internal Server Error when subsetting many data elements #295

aaronforshaw opened this issue Mar 17, 2022 · 0 comments · Fixed by #296
Assignees
Labels
bug Something isn't working
Milestone

Comments

@aaronforshaw
Copy link
Contributor

aaronforshaw commented Mar 17, 2022

Description

Using the subset endpoint with many additions can cause an exception.

Steps to reproduce

  1. Create a source data model containing a class with lots of data elements
  2. Create an empty target data model
  3. Using postman, construct a a request to
PUT {{base_url}}/dataModels/{sourceDataModelId}/subset/{targetDataModelId}

with a body containing, for example,

{"additions":["fbfb1a53-42d2-4437-b601-1a90d667f7c0", "6d3a0d42-93e5-427a-8203-a38c2f7a5fd0", "43dbed3c-e1f8-49b1-9ba6-43c3dfa977cc", "bdf06076-aa8e-49e2-97e8-f86fcb521ab9", "27e87165-4acb-4efa-bf87-898954c87e68", "ea8c92e7-a308-44b4-983d-3e053e86caff", "fe7ecaaa-cf86-4e26-8e1d-6db030cd9b56", "6eb3975a-c932-4ae5-8f84-83f15b49f375", "25e52261-f6b1-4e29-bf2b-f35997e9feac", "56bd2761-5a8e-42ca-b7d0-fb4e843cb4ef"], "deletions": []}

Expected behavior

All data elements are saved to the target data model

Screenshots

{
    "status": 500,
    "reason": "Internal Server Error",
    "errorCode": "UEX--",
    "message": "Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: update datamodel.data_type set version=?, date_created=?, domain_type=?, last_updated=?, path=?, breadcrumb_tree_id=?, data_model_id=?, idx=?, created_by=?, aliases_string=?, label=?, description=?, units=? where id=? and version=?",
    "path": "/api/dataModels/8d9ada0f-a53c-470d-b947-cc7a7f80dad5/subset/c9a84242-1d4a-4068-9593-6415baee64f6",
    "environment": "DEVELOPMENT",
    "version": "5.1.0-SNAPSHOT",
    "exception": {
        "type": "StaleStateException",
        "message": "Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: update datamodel.data_type set version=?, date_created=?, domain_type=?, last_updated=?, path=?, breadcrumb_tree_id=?, data_model_id=?, idx=?, created_by=?, aliases_string=?, label=?, description=?, units=? where id=? and version=?",
        "stacktrace": [
            "org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:67)",
            "org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:54)",
            "org.hibernate.engine.jdbc.batch.internal.BatchingBatch.checkRowCounts(BatchingBatch.java:151)",
            "org.hibernate.engine.jdbc.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:126)",
            "org.hibernate.engine.jdbc.batch.internal.BatchingBatch.doExecuteBatch(BatchingBatch.java:106)",
            "org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.execute(AbstractBatchImpl.java:148)",
            "org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.executeBatch(JdbcCoordinatorImpl.java:198)",
            "org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:633)",
            "org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478)",
            "java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)",
            "org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475)",
            "org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:344)",
            "org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40)",
            "org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)",
            "org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1416)",
            "org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1403)",
            "uk.ac.ox.softeng.maurodatamapper.core.model.CatalogueItemService.save(CatalogueItemService.groovy:100)",
            "uk.ac.ox.softeng.maurodatamapper.core.controller.ModelController.serviceUpdateResource(ModelController.groovy:759)",
            "jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
            "jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
            "uk.ac.ox.softeng.maurodatamapper.core.controller.CatalogueItemController.updateResource(CatalogueItemController.groovy:56)",
            "jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
            "jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
            "uk.ac.ox.softeng.maurodatamapper.core.controller.ModelController.updateResource(ModelController.groovy:766)",
            "jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
            "jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
            "uk.ac.ox.softeng.maurodatamapper.datamodel.DataModelController.$tt__subset(DataModelController.groovy:205)",
            "jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
            "jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
            "jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
            "jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
            "grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)",
            "org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)",
            "grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)",
            "jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
            "jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
            "jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
            "jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
            "grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)",
            "org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)",
            "grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)",
            "jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
            "jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
            "org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:211)",
            "org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)",
            "org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)",
            "org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)",
            "org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)",
            "org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)",
            "org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920)",
            "org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)",
            "org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)",
            "org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)",
            "java.lang.Thread.run(Thread.java:833)"
        ]
    }
}

Environment

  • mdm-core Version 5.1.0-SNAPSHOT

Additional context

Not clear exactly what quantity or permutation of data elements is needed to prompt this error

@aaronforshaw aaronforshaw added the bug Something isn't working label Mar 17, 2022
@aaronforshaw aaronforshaw self-assigned this Mar 17, 2022
olliefreeman added a commit that referenced this issue Mar 21, 2022
gh-295 flush when saving data class and data element in the subset operation
@olliefreeman olliefreeman added this to the 5.1.0 milestone Mar 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: Released
2 participants