Corrupt database?

Hernán Morales Durand hernan.morales at gmail.com
Mon May 11 20:03:18 UTC 2009


2009/5/7 Chris Muller <ma.chris.m at 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


More information about the Magma mailing list