Fix for review: === Name: STON-Core-SvenVanCaekenberghe.71 Author: SvenVanCaekenberghe Time: 6 April 2016, 2:22:24.782251 pm UUID: 64b8b741-365e-41fe-aa98-565e33ca5d24 Ancestors: STON-Core-SvenVanCaekenberghe.70
Fix a bug where STONReferences occurring as keys in Dictionaries or elements in Sets caused those to be unhealthy after materialization. Thx to Peter Uhnák for reporting this issue. Add 3 new unit tests to STONReaderTests #testDictionaryWithReferenceKeys #testSetWithReferenceElements #testDeepStructure Fix Details change the implementation of STONReader>>#processSubObjectsOf: from iterative to recursive (see version 39 of 29 November 2012, this might be a functional regression, see #testDeepStructure; cleanup of stack instance variable for later) so that #stonProcessSubObjects: can be overwritten with code being executed before or after full reference resolution imho, recursion stack depth will be equal during both writing and reading, and should be acceptable. overwrite #stonProcessSubObjects: in Dictionary and Set to #rehash at the end, but only when needed (minimal optimalization, see Dictionary>>#containsStonReferenceAsKey and Set>>#containsStonReference) === Name: STON-Tests-SvenVanCaekenberghe.63 Author: SvenVanCaekenberghe Time: 6 April 2016, 2:22:45.01986 pm UUID: 0beb2322-b81a-46ee-a0e2-6648a808774a Ancestors: STON-Tests-SvenVanCaekenberghe.62 (idem) === > On 06 Apr 2016, at 14:04, Sven Van Caekenberghe <[email protected]> wrote: > > https://pharo.fogbugz.com/f/cases/17946/STON-materializes-unhealthy-Dictionaries-and-Sets-when-references-occur-in-its-keys-or-elements > > fix coming > >> On 05 Apr 2016, at 13:11, Sven Van Caekenberghe <[email protected]> wrote: >> >>> >>> On 05 Apr 2016, at 13:02, Nicolai Hess <[email protected]> wrote: >>> >>> >>> >>> 2016-04-05 12:32 GMT+02:00 Cyril Ferlicot Delbecque >>> <[email protected]>: >>> >>> >>> On 05/04/2016 12:09, Sven Van Caekenberghe wrote: >>> >>>> Like I said, it is a hashing issue, sometimes it will be correct by >>>> accident. >>>> >>>> I hope you did not have to much trouble with this bug, I guess it must >>>> have been hard to chase. >>>> >>>> Is it urgent ? >>>> >>>> I probably can give you a quick fix, but I would like to think a bit more >>>> about this, since rehashing each materialised dictionary seems expensive. >>>> >>>> >>>> >>> >>> Hi Sven, >>> >>> I got the same kind of problem in a personal application. >>> >>> I use Sets that I serialize and I had a lot of trouble because sometimes >>> some action had strange behaviours. >>> >>> For example in a set with element `aSet remove: aSet anyOne` raised 'XXX >>> not found in aSet'. >>> >>> I am glad to hear that it is a Ston issue and not me that used sets in a >>> bad way :) >>> >>> For me too it is not urgent since I have a not of university work for >>> the moment. >>> >>> >>> >>> How are hashed collections created/filled during ston-parsing ? >>> If the position in a hashed collection is created by a ston-reference, that >>> is later replaced by the "real" object, >>> the index in the dictionary (or other hashed collections) may be wrong. >> >> Yes, that is indeed it, Nicolai. >> >> But I would like to try to minimise the rehashing as it seems expensive. But >> first I need a more reliable failure. >> >>> -- >>> Cyril Ferlicot >>> >>> http://www.synectique.eu >>> >>> 165 Avenue Bretagne >>> Lille 59000 France >
