Skip to content

Commit Exception on the second commit after thread interruption #42

@Sat-Ing

Description

@Sat-Ing

Reproducible with CDO Version 4.23.0.
If an interrupted thread makes changes to the model, then we can run into the following problem.
I can only reliably reproduce this problem when using a CDOMergingConflictResolver. But I think that it also happened (rarely) if no conflict resolver was in place.

Steps to reproduce the problem (also check code below)

  • Open an object in a transaction
  • Modify the object in a thread which is interrupted (which throws an exception, which is fine)
  • Commit the transaction in the original thread => everything looks good, also the value is correct
  • Modify the object again and commit it => Unexpected commit exception: "Attempt by Transaction[2:1] to modify historical revisions: (...)"

It can be reproduced with the following code:

  public void testCase() throws Exception
  {
    CDOSession session = openSession();
    CDOTransaction transaction = session.openTransaction();
    transaction.options().addConflictResolver(new CDOMergingConflictResolver());

    OrderDetail orderDetail = getModel1Factory().createOrderDetail();
    orderDetail.setPrice(1);
    CDOResource resource = transaction.createResource(getResourcePath("/test1"));
    resource.getContents().add(orderDetail);

    transaction.commit();

    Thread t = new Thread(() -> {
      Thread.currentThread().interrupt();
      orderDetail.setPrice(2);
    });
    t.start();
    t.join();

    transaction.commit();
    orderDetail.setPrice(3);
    transaction.commit(); // <<<< exception
  }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions