Hi Nikita,

Thank you for the feedback!
I have good news, I could not reproduce the fault after cherry picking that 
commit on top of 4.2RC2! All my objects were saved on every attempt.

Just for completeness, `mvn package` in that configuration fails with:

[ERROR] Failures:
[ERROR]   OpIdFactoryTest.testEqualsAndHashCode:57 
expected:<<ObjectId:test,TEMP:-1393483588>> but 
was:<<ObjectId:test,TEMP:-1364854437>>

But that seems to have been fixed in 
https://github.com/apache/cayenne/commit/78868d820fd30cf088846e6f89619e91a4206fad


I’ve also tested STABLE-4.2 (current at 
e6f2f59f369a9fdf5575d35b47f2ac30ee050da3) and all looks good there too.

IMO, if RC2 has this unexpected behaviour (!) maybe we should discourage its 
usage? I know, it’s only a RC, but Cayenne has always been so stable for me, 
never thought twice of using RCs.

For now, I’ll stay with RC1. It’s quite cumbersome for me to use anything other 
than official releases on production, too much work to setup the CI to build my 
own version of a library. Hoping the next version will be out soon.

Thank you again for your help!

Kind regards,

Henrique Gomes


> On 9 Mar 2023, at 09:37, Nikita Timofeev <ntimof...@objectstyle.com> wrote:
> 
> Also I've described exact cause of the problem in this issue
> https://issues.apache.org/jira/browse/CAY-2801
> 
> On Thu, Mar 9, 2023 at 11:25 AM Nikita Timofeev
> <ntimof...@objectstyle.com> wrote:
>> 
>> Hi!
>> 
>> Thanks for the information and even more for the debugging you already did.
>> There was a commit a bit after 4.2.RC2 was released that could be
>> related to your problem.
>> Would be great if you could try it and see if it helps.
>> 
>> https://github.com/apache/cayenne/commit/53c9408e026d926601baf6e68b9761489c273397
>> 
>> On Wed, Mar 8, 2023 at 6:26 PM Henrique Gomes <h...@farol.pt> wrote:
>>> 
>>> 
>>> Hello,
>>> 
>>> I want to ask for help debugging an issue:
>>> 
>>> On January I updated Cayenne from 4.2.RC1 to 4.2.RC2.
>>> Immediately after that, we had an issue of objects not being persisted to 
>>> the db; an http endpoint on our service accepts a batch of records and 
>>> creates objects to save:
>>> 
>>> ObjectContext ctx = server.newContext();
>>> 
>>> for (Aggregation post : request.getEntries()) {
>>> 
>>>        MyDataObject dbo = ctx.newObject(MyDataObject.class);
>>> 
>>>        dbo.setValueDate(post.getValueDate());
>>> 
>>>        dbo.setVersion(post.getVersion());
>>> 
>>>        dbo.setUuid(post.getUuidBytes());
>>> 
>>>                        ... etc ...
>>>        }
>>> 
>>> try {
>>> 
>>>        ctx.commitChanges();
>>> 
>>> 
>>> The endpoint is called with up to 250 items at a time, and we store ~4000 
>>> on each daily run of that job.
>>> We found that after the update, a small number, like 2 sometime more, 
>>> records would be missing from the db, but not always.
>>> 
>>> 
>>> Rolling back seemed to solve the issue. Puzzled, I tried git bisecting 
>>> Cayenne from RC1 to RC2.
>>> This is was the result:
>>> 
>>> 
>>> 7bc235f92e2e61d3f4f04d3bebb65a1756d2e092 is the first bad commit
>>> commit 7bc235f92e2e61d3f4f04d3bebb65a1756d2e092
>>> Author: Nikita Timofeev <stari...@gmail.com>
>>> Date:   Mon Nov 21 12:59:45 2022 +0300
>>> 
>>>    CAY-2777 Reverse relationship is not set with single table inheritance
>>> 
>>> .../access/flush/DefaultDataDomainFlushAction.java |   3 +-
>>> .../apache/cayenne/access/flush/EffectiveOpId.java |   2 +-
>>> .../access/flush/operation/OpIdFactory.java        | 113 ++++++++++++++++++
>>> .../org/apache/cayenne/map/ObjRelationship.java    |  13 +-
>>> .../java/org/apache/cayenne/ManyToManyJoinIT.java  |  27 +++++
>>> .../SelfRelationship.java                          |  28 +++++
>>> .../SelfRelationshipSub.java                       |  28 +++++
>>> .../auto/_Author.java                              |   7 +-
>>> .../auto/_SelfRelationship.java                    | 132 
>>> +++++++++++++++++++++
>>> .../auto/_SelfRelationshipSub.java                 |  91 ++++++++++++++
>>> .../auto/_Song.java                                |  10 +-
>>> .../relationships-many-to-many-join.map.xml        |  37 +++++-
>>> 12 files changed, 472 insertions(+), 19 deletions(-)
>>> create mode 100644 
>>> cayenne-server/src/main/java/org/apache/cayenne/access/flush/operation/OpIdFactory.java
>>> create mode 100644 
>>> cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/SelfRelationship.java
>>> create mode 100644 
>>> cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/SelfRelationshipSub.java
>>> create mode 100644 
>>> cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_SelfRelationship.java
>>> create mode 100644 
>>> cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_SelfRelationshipSub.java
>>> 
>>> I also tried reverting this commit on top of RC2 and that also seems to 
>>> have solved it.
>>> 
>>> The entity is quite simple, no relationships at all.
>>> The database is MySQL 8.
>>> The PK is regular mysql generated ID:
>>> 
>>>                <db-attribute name="id" type="BIGINT" isPrimaryKey="true" 
>>> isGenerated="true" isMandatory="true" length="20"/>
>>> 
>>> I can share more info, code etc, with someone who wants help debugging it, 
>>> but can not expose too much company info here, sorry.
>>> It is of course possible that the bug is outside Cayenne, on our code, db, 
>>> etc, and somehow only triggered if that commit is present.
>>> I can not say with 100% certainty that it is an issue with Cayenne.
>>> 
>>> The issue is sporadic, but quite frequent. If there are any ideas on how I 
>>> can further debug this, do let me know.
>>> 
>>> Thanks for the attention given, I really would like to get the bottom of 
>>> this.
>>> 
>>> Kind regards,
>>> 
>>> Henrique Gomes
>>> 
>>> 
>>> 
>> 
>> 
>> --
>> Best regards,
>> Nikita Timofeev
> 
> 
> 
> -- 
> Best regards,
> Nikita Timofeev

Reply via email to