Wow, great job Ramsey !

Alex

2012/6/14 Ramsey Gurley <[email protected]>

> I think I've narrowed this down a bit :-)  If I add
>
> NSNotificationCenter nc = NSNotificationCenter.defaultCenter();
> nc.removeObserver(nested, EOObjectStore.ObjectsChangedInStoreNotification,
> null);
>
> Just before the last ec.saveChanges(), the save is successful.  Looking in
> ERXEC, I see
>
> /**
>  * Overridden so add a bugfix from Lenny Marks
>  */
> @Override
> public void _objectsChangedInStore(NSNotification nsnotification) {
> ERXEnterpriseObject.FlushCachesProcessor.perform(this, (NSArray)
> nsnotification.userInfo().objectForKey("objects"));
> if (savingChanges) {
> synchronized (queuedNotifications) {
> queuedNotifications.addObject(nsnotification);
> }
> }
> else {
> super._objectsChangedInStore(nsnotification);
> }
> }
>
> For background, here's the original thread from Lenny Marks
>
> http://markmail.org/message/kqyvvptath2fp6ez
>
> So it would seem that the nested ECs are sneaking past this fix and
> causing havoc. I'm still not sure what about garbage collection triggers
> this, but I've updated ERXEC so that nested ECs check to see if any of its
> parents are saving before processing notifications.  The test passes with
> that change in place.
>
> I've got it up on the SmartHealth fork of wonder.  If you guys are
> interested, then give it a try and see if it works for you. There doesn't
> appear to be any testing of nested ECs that I can see in ERXTest, but I
> don't think this will have any negative consequences.
>
>
> https://github.com/smarthealth/wonder/commit/bed35de926d0fe53c207b2fea7f5e3d1922d0ddb
>
> I'm deploying this out to a dev server now to see if any more snapshots go
> missing. If all goes well, I'll pull this change into the main wonder fork.
>
> Ramsey
>
>
> On Jun 12, 2012, at 2:22 PM, Alexis Tual wrote:
>
> I'm also very curious about Ramsey's investigations because when this bug
> happens, you have to basically toss your EC stack...
>
> Alex
>
> 2012/6/13 Calven Eggert <[email protected]>
>
>> I'm very curious to see your findings.  One of our WO apps have had this
>> problem for years but it happens so infrequently that the users don't seem
>> to be bothered.  It bothers me though. argh.
>>
>>
>> On 2012-06-12, at 11:47 AM, <[email protected]> <
>> [email protected]> wrote:
>>
>> Ah, so it's the garbage collection that's triggering it. I should have
>> known, given the looping worked for small values.  This is good. I can
>> distill the failure down to a single pair of EOs using System.gc() now.
>>  This should make it a lot easier to investigate.
>>
>>     public void testNestedECs() {
>>      try {
>>       EOEditingContext ec = ERXEC.newEditingContext();
>>      Company c = (Company) EOUtilities.createAndInsertInstance(ec,
>> Company.ENTITY_NAME);
>>      c.setName("Name");
>>      ec.saveChanges();
>>      EOEditingContext nested = ERXEC.newEditingContext(ec);
>>      Company nestC = c.localInstanceIn(nested);
>>      Employee e = (Employee) EOUtilities.createAndInsertInstance(nested,
>> Employee.ENTITY_NAME);
>>      e.setFirstName("First");
>>      e.setLastName("Last");
>>      e.setManager(Boolean.FALSE);
>>      e.addObjectToBothSidesOfRelationshipWithKey(nestC, Employee.
>> COMPANY_KEY);
>>      nested.saveChanges();
>>      ec.saveChanges();
>>      System.gc();
>>      c.delete();
>>      ec.saveChanges();
>>      } catch (Exception e) {
>>      e.printStackTrace();
>>      Assert.fail(e.getMessage());
>>      }
>>     }
>>
>> Thanks Alexis,
>>
>> Ramsey
>>
>>
>>
>>  _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>>
>> https://lists.apple.com/mailman/options/webobjects-dev/alexis.tual%40gmail.com
>>
>> This email sent to [email protected]
>>
>>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
>
> https://lists.apple.com/mailman/options/webobjects-dev/rgurley%40smarthealth.com
>
> This email sent to [email protected]
>
>
>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to