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@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@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
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@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@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@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/magma
magma@lists.squeakfoundation.org