2009/5/12 Chris Muller ma.chris.m@gmail.com:
Hi Hernán, this could mean two clients had different notions of what class 378 is. I would use the FileTraverser to take a count of your 378's; see first if you have consistency.
Hi Chris, I forgot to mention, 378 is DateQualifier. Should I search for more DateQualifier class definitions in the aMagmaClassIdManager ?
Do you have any suspicions about the cause of the problem?
some questions:
- What version of Magma?
release 42 gamma 1 (Magma client-cmm.398)
- Is DateQualifier a kind-of Set?
No, is a subclass of AbstractTitleQualifier which is a subclass of Object.
- Did you extend (subclass) any class included in the MagmaSession protocol?
No
Hernán
- Chris
On Mon, May 11, 2009 at 3:03 PM, Hernán Morales Durand hernan.morales@gmail.com wrote:
2009/5/7 Chris Muller ma.chris.m@gmail.com:
Option 2: What matters is that STBUser buffers in the repository all point consistently to the correct class version. Write a script using MagmaFileTraverser to interrogate all of the Fixed buffers ("type = 3") where classId=126, check that their versions all are correct and consistent with their number of instVars of the Buffer (#objectInstSize).
I have a similar problem ( 'DateQualifier cannot have variable sized instances' ) but in my case there's only one version of DateQualifier, ( i.e. aMagmaClassIdManager definitionForClassId: 378 version: 2 fails because non-existent index). Here objectInstSize = 2 and sourceDefinition namedInstSize = 3, resulting in indexedSize = -1 and performing the #basicNew:
#namedInstSize is correct, the DateQualifier's superclass has 3 instance variables, the output of Jerry's first script would be:
Index: 1 Version: 1 ivar count: 3
So I wrote the script you suggested:
( MagmaFileTraverser for: 'Magma' ) open anchorGraphDo: [ : buffer | ( buffer classId = 378 and: [ buffer class = MaFixedObjectBuffer ] ) ifTrue: [ buffer objectInstSize inspect ] ].
but still fails with the same error. My problem is that I cannot open the repository to commit any corrections because of this error.
11 May 2009 4:47:59 pm VM: Win32 - a SmalltalkImage Image: Squeak3.10.2 [latest update: #7179]
SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir C:\Squeak 3.9 Trusted Dir C:\Squeak 3.9\hmorales Untrusted Dir C:\My Squeak\hmorales
DateQualifier class(Object)>>error: Receiver: DateQualifier Arguments and temporary variables: aString: 'DateQualifier cannot have variable sized instances' Receiver's instance variables: superclass: AbstractTitleQualifier methodDict: a MethodDictionary(#distantGetter->a CompiledMethod (720) #initiali...etc... format: 136 instanceVariables: nil organization: ('printing' printOn: printQualifierOn:) ('initialization' distant...etc... subclasses: nil name: #DateQualifier classPool: nil sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'DocModel-Titles'
DateQualifier class(Behavior)>>basicNew: Receiver: DateQualifier Arguments and temporary variables: sizeRequested: -1 Receiver's instance variables: superclass: AbstractTitleQualifier methodDict: a MethodDictionary(#distantGetter->a CompiledMethod (720) #initiali...etc... format: 136 instanceVariables: nil organization: ('printing' printOn: printQualifierOn:) ('initialization' distant...etc... subclasses: nil name: #DateQualifier classPool: nil sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'DocModel-Titles'
MaFixedObjectBuffer>>createObjectUsing: Receiver: a MaFixedObjectBuffer oid : 16861039 classId : 378 objectInstSize : 2 commitNumber : ...etc... Arguments and temporary variables: aMaObjectSerializer: a MaObjectSerializer class: DateQualifier skeleton: nil indexedSize: -1 sourceDefinition: a MaClassDefinition DateQualifier version = 1 inImageDefinition: a MaClassDefinition DateQualifier version = 1 eachOid: nil sourceIndex: nil targetIndex: nil Receiver's instance variables: byteArray: a ByteArray(242 159 4 0 176 14 62 0 0 0 62 0 0 19 115 0 99 81 1 0 0 ...etc... startPos: 299
MaObjectSerializer>>newSkeletonFor:fromProxy: Receiver: a MaObjectSerializer Arguments and temporary variables: aMaObjectBuffer: a MaFixedObjectBuffer oid : 16861039 classId : 378 objectI...etc... aMaMutatingProxy: nil skel: nil Receiver's instance variables: oidManager: a MagmaOidManager classIdManager: a MagmaClassIdManager preMadeObjectBuffers: an Array(a MaByteObjectBuffer oid : 16149077336050 cla...etc... graphBuffer: a MaSerializedGraphBuffer (6168 objects in 303090 bytes) createProxyBlock: [] in MagmaSession>>initializeSerializer {[:oid | MagmaMutati...etc... traversalStrategy: a MaObjectGraphTraversalStrategy amBusy: true truncatedObjects: a WeakIdentityKeyDictionary() preferences: a MaObjectSerializerPreferences bpMapIndex: 1
--- The full stack --- DateQualifier class(Object)>>error: DateQualifier class(Behavior)>>basicNew: MaFixedObjectBuffer>>createObjectUsing: MaObjectSerializer>>newSkeletonFor:fromProxy: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [] in MaObjectSerializer>>materializeGraphDo: {[skeletons add: (Association key: (newObject := self newSkeletonFor: each ...]} [] in MaWeakValueDictionary(MaDictionary)>>maAt:ifPresent:ifAbsent: {[^ zeroArgBlock value]} MaWeakValueDictionary(MaDictionary)>>at:ifAbsent: MaWeakValueDictionary(MaDictionary)>>maAt:ifPresent:ifAbsent: [] in MagmaOidManager>>objectWithOid:ifFound:ifAbsent: {[(MaOidCalculator isOidForNewObject: anInteger) ifTrue: [newObjects ma...]} MaOidCalculator class>>objectWithOid:ifNone: MagmaOidManager>>objectWithOid:ifFound:ifAbsent: MaObjectSerializer>>objectWithOid:ifFound:ifAbsent: [] in MaObjectSerializer>>materializeGraphDo: {[:each | object := self objectWithOid: each oid ifFound: [:foundObj...]} [] in MaSerializedGraphBuffer>>buffersDo: {[:eachPosition | buffer := preMadeBuffers at: (self bufferTypeAt: eachP...]} MaSerializedGraphBuffer>>bufferPositionsDo: MaSerializedGraphBuffer>>buffersDo: MaObjectSerializer>>materializeGraphDo: MaObjectSerializer>>materializeGraph:do: [] in MagmaSession>>materializeObject: {[serializer materializeGraph: aByteArray do: [:eachObject :eachBuffer | ...]} ...etc...
Any other suggestion?
Hernán