[ANN] Magma 1.0r40

Florian Minjat florian.minjat at gmail.com
Mon Sep 24 15:38:18 UTC 2007


As this bug looks like the one I got previously with the special 
collections of Igor, I asked him on irc if they weren't enabled by 
default. But after some search it seems not.
I did four updates with magma1.4 + magma-seaside out-of-the box and 
all of four returned the same exception, but not at the same time 
during the update.
Igor mentionned that the bug we manage to evade was probably due to 
race conditions in the dictionary cleaning and finalization. So with 
his advice I tried my update process with the first line of 
MaOidManager>>oidOf:is: commented (check and clean of oids). And 
during theses two updates (much slower), I got no exception. So it 
seems the problems comes from 
MaOidManager>>removeGarbageCollectedObjectEntries.

Florian

Florian Minjat wrote:
> I installed the whole new thing and tested it right away with my 'big 
> update' and got an error each time (I tested three times to be sure) :
> I didn't do anything to use a special collection or anything.
> 
> 
> EXCEPTION : MagmaInvalidOid: 3298536245786 is not a valid oid. (13:49:09)
>   MagmaSession>>signalExceptionLike:
>      self     <-     a MagmaSession
>     temps
>      anException     <-     MagmaInvalidOid: 3298536245786 is not a 
> valid oid.
>      signalableError     <-     MagmaInvalidOid: 3298536245786 is not a 
> valid oid.
>     inst vars
>      id     <-     2
>      user     <-     a MagmaUser
>     id = update
>      serializer     <-     a MaObjectSerializer
>      transaction     <-     a MaTransaction
>      readStrategy     <-     a WAMagmaReadStrategyDefault
>      definition     <-     a MagmaRepositoryDefinition
>      preferences     <-     a MagmaPreferences
>      anchor     <-     a MaRootAnchor
>      transactionLevel     <-     1
>      link     <-     a MaLocalServerLink
>      strongReferences     <-     an OrderedCollection()
> 
>   MagmaSession>>submit:
>      self     <-     a MagmaSession
>     temps
>      aMagmaRepositoryRequest     <-     a MaRefreshSegmentRequest
>      result     <-     MagmaInvalidOid: 3298536245786 is not a valid oid.
>     inst vars
>      id     <-     2
>      user     <-     a MagmaUser
>     id = update
>      serializer     <-     a MaObjectSerializer
>      transaction     <-     a MaTransaction
>      readStrategy     <-     a WAMagmaReadStrategyDefault
>      definition     <-     a MagmaRepositoryDefinition
>      preferences     <-     a MagmaPreferences
>      anchor     <-     a MaRootAnchor
>      transactionLevel     <-     1
>      link     <-     a MaLocalServerLink
>      strongReferences     <-     an OrderedCollection()
> 
>   MagmaSession>>refreshSegment:of:where:pageSize:using:loadObjects:
>      self     <-     a MagmaSession
>     temps
>      aMagmaCollectionReaderSegment     <-     a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0
>      aMagmaCollection     <-     a MagmaCollection
>      aMaTerm     <-     a MaClause (login 
> 55581004787803423704017422417120985088..55581004787803423704017422417120985088) 
> 
>      anInteger     <-     125
>      aMaReadStrategy     <-     nil
>      aBoolean     <-     true
>      segment     <-     nil
>     inst vars
>      id     <-     2
>      user     <-     a MagmaUser
>     id = update
>      serializer     <-     a MaObjectSerializer
>      transaction     <-     a MaTransaction
>      readStrategy     <-     a WAMagmaReadStrategyDefault
>      definition     <-     a MagmaRepositoryDefinition
>      preferences     <-     a MagmaPreferences
>      anchor     <-     a MaRootAnchor
>      transactionLevel     <-     1
>      link     <-     a MaLocalServerLink
>      strongReferences     <-     an OrderedCollection()
> 
>   MagmaCollection>>refreshSegment:where:pageSize:using:loadObjects:
>      self     <-     a MagmaCollection
>     temps
>      aMagmaCollectionReaderSegment     <-     a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0
>      aMaTerm     <-     a MaClause (login 
> 55581004787803423704017422417120985088..55581004787803423704017422417120985088) 
> 
>      anInteger     <-     125
>      aMaReadStrategy     <-     nil
>      aBoolean     <-     true
>     inst vars
>      session     <-     a MagmaSession
>      changes     <-     a MagmaCollectionChanges
>      indexes     <-     an OrderedCollection(a MaSearchStringIndex login 
> a MaIntegerIndex rank a MaIntegerIndex worldId)
>      descriptions     <-     an OrderedCollection(a 
> MagmaIndexDescription  a MagmaIndexDescription  a MagmaIndexDescription )
> 
>   MagmaCollectionReader>>refreshSegment:loadObjects:
>      self     <-     a MagmaCollectionReader
>     temps
>      aMagmaCollectionReaderSegment     <-     a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0
>      aBoolean     <-     true
>      sortIndex     <-     nil
>     inst vars
>      collection     <-     a MagmaCollection
>      expression     <-     a MaClause (login 
> 55581004787803423704017422417120985088..55581004787803423704017422417120985088) 
> 
>      readStrategy     <-     nil
>      trunk     <-     a MaQueryTrunk
>      segment     <-     nil
>      segments     <-     an OrderedCollection(a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0)
>      pageSize     <-     125
>      reversed     <-     false
>      localAdditionsSegment     <-     nil
> 
>   [] in MagmaCollectionReader>>segmentContaining: {[:foundSegment | self 
> refreshSegment: foundSegment loadObjects: true.  foun...]}
>      self     <-     a MagmaCollectionReader
>     temps
>      anInteger     <-     1
>      desiredSegment     <-     nil
>      each     <-     a MagmaCollectionReaderSegment  1..1 of 1 | 0
>      foundSegment     <-     a MagmaCollectionReaderSegment  1..1 of 1 | 0
>     inst vars
>      collection     <-     a MagmaCollection
>      expression     <-     a MaClause (login 
> 55581004787803423704017422417120985088..55581004787803423704017422417120985088) 
> 
>      readStrategy     <-     nil
>      trunk     <-     a MaQueryTrunk
>      segment     <-     nil
>      segments     <-     an OrderedCollection(a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0)
>      pageSize     <-     125
>      reversed     <-     false
>      localAdditionsSegment     <-     nil
> 
>   [] in OrderedCollection(Collection)>>maDetect:ifFound:ifNone: 
> {[:element |  (aBlock value: element)   ifTrue: [^ foundBlock value: 
> element]...]}
>      self     <-     an OrderedCollection(a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0)
>     temps
>      aBlock     <-     [] in MagmaCollectionReader>>segmentContaining: 
> {[:each | each includesIndex: anInteger]}
>      foundBlock     <-     [] in 
> MagmaCollectionReader>>segmentContaining: {[:foundSegment |  self 
> refreshSegment: foundSegment...etc...
>      exceptionBlock     <-     [] in 
> MagmaCollectionReader>>segmentContaining: {[[desiredSegment := self 
> getNextSegmentAndLoad: tru...etc...
>      element     <-     a MagmaCollectionReaderSegment  1..1 of 1 | 0
>     inst vars
>      array     <-     an Array(nil nil a MagmaCollectionReaderSegment 
>  1..1 of 1 | 0 nil nil nil nil nil nil nil)
>      firstIndex     <-     3
>      lastIndex     <-     3
> 
>   OrderedCollection>>do:
>      self     <-     an OrderedCollection(a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0)
>     temps
>      aBlock     <-     [] in 
> OrderedCollection(Collection)>>maDetect:ifFound:ifNone: {[:element | 
> (aBlock value: element) ...etc...
>      index     <-     3
>     inst vars
>      array     <-     an Array(nil nil a MagmaCollectionReaderSegment 
>  1..1 of 1 | 0 nil nil nil nil nil nil nil)
>      firstIndex     <-     3
>      lastIndex     <-     3
> 
>   OrderedCollection(Collection)>>maDetect:ifFound:ifNone:
>      self     <-     an OrderedCollection(a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0)
>     temps
>      aBlock     <-     [] in MagmaCollectionReader>>segmentContaining: 
> {[:each | each includesIndex: anInteger]}
>      foundBlock     <-     [] in 
> MagmaCollectionReader>>segmentContaining: {[:foundSegment |  self 
> refreshSegment: foundSegment...etc...
>      exceptionBlock     <-     [] in 
> MagmaCollectionReader>>segmentContaining: {[[desiredSegment := self 
> getNextSegmentAndLoad: tru...etc...
>      element     <-     a MagmaCollectionReaderSegment  1..1 of 1 | 0
>     inst vars
>      array     <-     an Array(nil nil a MagmaCollectionReaderSegment 
>  1..1 of 1 | 0 nil nil nil nil nil nil nil)
>      firstIndex     <-     3
>      lastIndex     <-     3
> 
>   MagmaCollectionReader>>segmentContaining:
>      self     <-     a MagmaCollectionReader
>     temps
>      anInteger     <-     1
>      desiredSegment     <-     nil
>      each     <-     a MagmaCollectionReaderSegment  1..1 of 1 | 0
>      foundSegment     <-     a MagmaCollectionReaderSegment  1..1 of 1 | 0
>     inst vars
>      collection     <-     a MagmaCollection
>      expression     <-     a MaClause (login 
> 55581004787803423704017422417120985088..55581004787803423704017422417120985088) 
> 
>      readStrategy     <-     nil
>      trunk     <-     a MaQueryTrunk
>      segment     <-     nil
>      segments     <-     an OrderedCollection(a 
> MagmaCollectionReaderSegment  1..1 of 1 | 0)
>      pageSize     <-     125
>      reversed     <-     false
>      localAdditionsSegment     <-     nil
> 
> 
> Igor Stasenko wrote:
>> On 23/09/2007, Chris Muller <asqueaker at gmail.com> wrote:
>>> Sig contributed a simple change that lets you plug whatever dictionary
>>> you want.  This is included in this release, so you can set it up as
>>> part of your application-initialization.
>>>
>>> But sig's new Dictionary's themselves arrived too late to incorporate
>>> as the default into this release.  There is much testing and measuring
>>> and comparing with other Dictionary solutions (such as those from
>>> Martin Loewis) needed before making a switch to a new default Weak
>>> Dictionary.
>>
>> I don't know, maybe better was to keep my dictionaries as separate
>> package. Previously, i had a package with 'B' single prefix in class
>> names. But then, since i implemented them mainly for use with magma i
>> decided to rename them with Ma prefix and replace existing ones
>> directly in magma.
>>
>> And please, let me remind you, that magma uses two kinds of weak 
>> dictionaries:
>> WeakIdentityKeyDictionary
>> and
>> WeakValueDictionary
>> Previously i added a way to choose only one of them in
>> MagmaPreferences class (for WeakIdentityKeyDictionary).
>>
>> Now, i added snapshot, which fills the gap, and also makes use of it in
>> MaOidManager and MagmaOidManager code.
>>
>> Now, there's no direct references to any weak dictionary classes
>> within magma client code, they are rely on those, which set in
>> MagmaPreferences.
>>
>> see Magma client-sig.258 in magma-tester repo. It based on Magma
>> client-cmmr50.256.
>>
>>>   - Chris
>>>
>>> On 9/23/07, Florian Minjat <florian.minjat at emn.fr> wrote:
>>>> Great I'll test it with my app right away !
>>>> Does it include collection optimisation from sig or others ?
>>>>
>>>> Florian
>>>>
>>>> Chris Muller wrote:
>>>>> I am pleased to announce release 40 of the Magma object database for
>>>>> Squeak, offering a significant boost in robustness from the previous
>>>>> version:
>>>>>
>>>>>       - No longer constrained by Squeaks 2GB file-addressability, 
>>>>> Magma can
>>>>> now support unlimited file sizes (configured out of the box for up to
>>>>> 281 Terabyte sized files).
>>>>>       - Full backups are now truly "live", with no pause in service.
>>>>>       - There is now support for a "warm backup," for rapid 
>>>>> failover capability..
>>>>>       - ..and server load distribution for clients that can tolerate a
>>>>> slightly-behind, read-only repository (i.e., for reporting, archive
>>>>> retrieval, etc.).
>>>>>       - The MagmaCollectionIndex hierarchy is no longer required on 
>>>>> the server.
>>>>>       - The server correctly ignores garbage bytes sent by hackers 
>>>>> to its
>>>>> listening port.
>>>>>       - Other enhancements and some important bug fixes.
>>>>>
>>>>> Nearly every feature and fix has originated at the request of members
>>>>> of the Squeak community.  This is your database.  I plan to continue
>>>>> supporting, improving, and ensuring you have a good experience using
>>>>> Magma.  Please tell me what you need on the Magma mailing list.
>>>>>
>>>>> This one single code-base has been installed and tested successfully
>>>>> in the 3.7, 3.8, 3.9, Tweak, Croquet 1.0SDK and sq3.9-7067dev07.07.1
>>>>> images.  Other images may work, I just haven't tested them, you can
>>>>> use the "Magma tester" to find out.  In images without
>>>>> MethodProperties (3.7 and 3.8), Monticello will provide a friendly
>>>>> pink warning that a few extension methods will not load.  This is ok,
>>>>> just press Proceed.  It's better than maintaining different code bases
>>>>> for each version of Squeak.
>>>>>
>>>>> Since its earliest days, Magma has been a "one-click" install and this
>>>>> version is no different.  There are three configurations available on
>>>>> SqueakMap and SqueakSource; "client", "server" and "tester".  The
>>>>> former simply exclude certain packages that are not needed for that
>>>>> function.
>>>>>
>>>>>  - Chris
>>>>>
>>>>>
>>>>
>>>
>>
>>
> _______________________________________________
> Magma mailing list
> Magma at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/magma
> 


More information about the Magma mailing list