Hi I don't know if this was reported. Apparently there is a problem when migrating a large number of instances, I have aprox. 270,000 instances from which I simply pulled up an ivar in their class to a higher superclass, and a PrimitiveFailed raised. Gofer it smalltalkhubUser: 'hernan' project: 'Territorial'; configuration; loadDevelopment. TCityOrganization addOpenGeoCode Then manually install Territorial- Is there a fix for this? --- The full stack --- Array(Object)>> Array(Object)>>primitiveFailed Array>> TerritorialCity class(ClassDescription)>> TerritorialCity class(ClassDescription)>> PharoClassInstaller>> [ 1 to: old size do: [ :index | self updateClass: (old at: index) to: (new at: index) ]. old elementsForwardIdentityTo: new. " Garbage collect away the zombie instances left behind in garbage memory in #updateInstancesFrom: " " If we don't clean up this garbage, a second update would revive them with a wrong layout! " " (newClass rather than oldClass, since they are now both newClass) " Smalltalk garbageCollect ] in PharoClassInstaller>> BlockClosure>>ensure: BlockClosure>> PharoClassInstaller>> SlotClassBuilder>> SlotClassBuilder>>apply: SlotClassBuilder>>build PharoClassInstaller class(AbstractClassInstaller class)>>make: [ PharoClassInstaller make: [ :builder | builder superclass: superClass; name: name; layoutClass: (ObjectLayout layoutForType: type); slots: self instanceVariables; sharedVariables: self classVariables; sharedPools: self sharedPoolsString; classSlots: self classInstanceVariables; traitComposition: self traitCompositionCompiled; classTraitComposition: self classTraitCompositionCompiled; comment: comment stamp: commentStamp; category: category; environment: superClass environment ] ] in MCClassDefinition>>createClass BlockClosure>>on:do: MCClassDefinition>>createClass MCClassDefinition>>load MCClassDefinition( [ :each | each addMethodAdditionTo: methodAdditions ] in MCPackageLoader>> [ :each | | newLabel | "Special handling for first and last element" (count = 0 or: [ count + 1 = size or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ]) ifTrue: [ bar current: count. oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ]) ifFalse: [ bar label: newLabel. oldLabel := newLabel ]. lastUpdate := Time millisecondClockValue ]. aBlock value: each. count := count + 1 ] in [ :bar | labelBlock := aStringOrBlock isString ifTrue: [ bar label: aStringOrBlock. [ :dummyItem | aStringOrBlock ] ] ifFalse: [ aStringOrBlock ]. self do: [ :each | | newLabel | "Special handling for first and last element" (count = 0 or: [ count + 1 = size or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ]) ifTrue: [ bar current: count. oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ]) ifFalse: [ bar label: newLabel. oldLabel := newLabel ]. lastUpdate := Time millisecondClockValue ]. aBlock value: each. count := count + 1 ] ] in OrderedCollection(Collection)> OrderedCollection>>do: [ :bar | labelBlock := aStringOrBlock isString ifTrue: [ bar label: aStringOrBlock. [ :dummyItem | aStringOrBlock ] ] ifFalse: [ aStringOrBlock ]. self do: [ :each | | newLabel | "Special handling for first and last element" (count = 0 or: [ count + 1 = size or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ]) ifTrue: [ bar current: count. oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ]) ifFalse: [ bar label: newLabel. oldLabel := newLabel ]. lastUpdate := Time millisecondClockValue ]. aBlock value: each. count := count + 1 ] ] in OrderedCollection(Collection)> BlockClosure>>cull: [ ^ block cull: self ] in [ self prepareForRunning. CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run [ p psValueAt: index put: anObject. aBlock value ] in CurrentJob(DynamicVariable)>> BlockClosure>>ensure: CurrentJob(DynamicVariable)>> CurrentJob class(DynamicVariable class)>>value:during: [ self prepareForRunning. CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run BlockClosure>>ensure: Job>>run MorphicUIManager(UIManager)>> ByteString(String)>> OrderedCollection(Collection)> OrderedCollection(Collection)> MCPackageLoader>> [ self basicLoadDefinitions ] in [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad BlockClosure>>on:do: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [ aBlock on: InMidstOfFileinNotification do: [ :notification | notification resume: true ] ] in MCPackageLoader>> BlockClosure>>on:do: MCPackageLoader>> [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad BlockClosure>>ensure: MCPackageLoader>>basicLoad [ self basicLoad ] in MCPackageLoader>> BlockClosure>>ensure: MCPackageLoader>> MCPackageLoader>> MCPackageLoader>> MCThreeWayMerger(MCMerger)>> MCVersionMerger>> MCVersionMerger class>>mergeVersion: MCVersion>>merge MCFileRepositoryInspector( MCFileRepositoryInspector>> MCFileRepositoryInspector( PluggableButtonMorph>> [ :m | (m containsPoint: evt cursorPoint) ifTrue: [ m enabled ifTrue: [ m performAction: evt ] ] ] in PluggableButtonMorph>>mouseUp: Array(SequenceableCollection)> PluggableButtonMorph>>mouseUp: PluggableButtonMorph(Morph)>> MouseButtonEvent>>sentTo: PluggableButtonMorph(Morph)>> PluggableButtonMorph(Morph)>> [ ActiveHand := self. ActiveEvent := anEvent. result := focusHolder handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to: BlockClosure>>on:do: WorldMorph(PasteUpMorph)>> HandMorph>>sendFocusEvent:to: HandMorph>>sendEvent:focus: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [ :h | ActiveHand := h. h processEvents. ActiveHand := nil ] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)> WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: WorldMorph>>doOneCycle [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] in MorphicUIManager>> [ self value. Processor terminateActive ] in BlockClosure>>newProcess ------------------------------ |
Yes, you need a new VM built from Cog sources after June, hopefully a newer can be promoted to stable soon...
https://pharo.fogbugz.com/f/cases/18711/Cannot-commit-a-special-character-into-Monticello Cheers, Henry > On 21 Sep 2016, at 7:19 , Hernán Morales Durand <[hidden email]> wrote: > > Hi > > I don't know if this was reported. Apparently there is a problem when migrating a large number of instances, I have aprox. 270,000 instances from which I simply pulled up an ivar in their class to a higher superclass, and a PrimitiveFailed raised. > > It can be reproduced by installing Territorial in Pharo 5.0 with Spur VM 5.0 from 4 May 2016 in Windows 8.1 (this is the standard image installed using wget command line in msys). > > Gofer it > smalltalkhubUser: 'hernan' project: 'Territorial'; > configuration; > loadDevelopment. > TCityOrganization addOpenGeoCode > > Then manually install Territorial-HernanMoralesDurand.163 from Monticello. Backwards (installing .163, populating, then .166) also reproduces the issue. > > Is there a fix for this? > > --- The full stack --- > Array(Object)>>primitiveFailed: > Array(Object)>>primitiveFailed > Array>>elementsForwardIdentityTo: > TerritorialCity class(ClassDescription)>>updateInstances:from:isMeta: > TerritorialCity class(ClassDescription)>>updateInstancesFrom: > PharoClassInstaller>>updateClass:to: > [ 1 to: old size do: [ :index | self updateClass: (old at: index) to: (new at: index) ]. > old elementsForwardIdentityTo: new. > " Garbage collect away the zombie instances left behind in garbage memory in #updateInstancesFrom: " > " If we don't clean up this garbage, a second update would revive them with a wrong layout! " > " (newClass rather than oldClass, since they are now both newClass) " > Smalltalk garbageCollect ] in PharoClassInstaller>>migrateClasses:to:using: > BlockClosure>>ensure: > BlockClosure>>valueUnpreemptively > PharoClassInstaller>>migrateClasses:to:using: > SlotClassBuilder>>migrateClasses: > SlotClassBuilder>>apply: > SlotClassBuilder>>build > PharoClassInstaller class(AbstractClassInstaller class)>>make: > [ PharoClassInstaller > make: [ :builder | > builder > superclass: superClass; > name: name; > layoutClass: (ObjectLayout layoutForType: type); > slots: self instanceVariables; > sharedVariables: self classVariables; > sharedPools: self sharedPoolsString; > classSlots: self classInstanceVariables; > traitComposition: self traitCompositionCompiled; > classTraitComposition: self classTraitCompositionCompiled; > comment: comment stamp: commentStamp; > category: category; > environment: superClass environment ] ] in MCClassDefinition>>createClass > BlockClosure>>on:do: > MCClassDefinition>>createClass > MCClassDefinition>>load > MCClassDefinition(MCDefinition)>>addMethodAdditionTo: > [ :each | each addMethodAdditionTo: methodAdditions ] in MCPackageLoader>>basicLoadDefinitions > [ :each | > | newLabel | > "Special handling for first and last element" > (count = 0 > or: [ count + 1 = size > or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ]) > ifTrue: [ bar current: count. > oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ]) > ifFalse: [ bar label: newLabel. > oldLabel := newLabel ]. > lastUpdate := Time millisecondClockValue ]. > aBlock value: each. > count := count + 1 ] in [ :bar | > labelBlock := aStringOrBlock isString > ifTrue: [ bar label: aStringOrBlock. > [ :dummyItem | aStringOrBlock ] ] > ifFalse: [ aStringOrBlock ]. > self > do: [ :each | > | newLabel | > "Special handling for first and last element" > (count = 0 > or: [ count + 1 = size > or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ]) > ifTrue: [ bar current: count. > oldLabel > = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ]) > ifFalse: [ bar label: newLabel. > oldLabel := newLabel ]. > lastUpdate := Time millisecondClockValue ]. > aBlock value: each. > count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every: > OrderedCollection>>do: > [ :bar | > labelBlock := aStringOrBlock isString > ifTrue: [ bar label: aStringOrBlock. > [ :dummyItem | aStringOrBlock ] ] > ifFalse: [ aStringOrBlock ]. > self > do: [ :each | > | newLabel | > "Special handling for first and last element" > (count = 0 > or: [ count + 1 = size > or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ]) > ifTrue: [ bar current: count. > oldLabel > = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ]) > ifFalse: [ bar label: newLabel. > oldLabel := newLabel ]. > lastUpdate := Time millisecondClockValue ]. > aBlock value: each. > count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every: > BlockClosure>>cull: > [ ^ block cull: self ] in [ self prepareForRunning. > CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run > [ p psValueAt: index put: anObject. > aBlock value ] in CurrentJob(DynamicVariable)>>value:during: > BlockClosure>>ensure: > CurrentJob(DynamicVariable)>>value:during: > CurrentJob class(DynamicVariable class)>>value:during: > [ self prepareForRunning. > CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run > BlockClosure>>ensure: > Job>>run > MorphicUIManager(UIManager)>>displayProgress:from:to:during: > ByteString(String)>>displayProgressFrom:to:during: > OrderedCollection(Collection)>>do:displayingProgress:every: > OrderedCollection(Collection)>>do:displayingProgress: > MCPackageLoader>>basicLoadDefinitions > [ self basicLoadDefinitions ] in [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad > BlockClosure>>on:do: > - - - - - - - - - - - - - - - > - - - - - - - - - - - - - - - - - - > [ aBlock > on: InMidstOfFileinNotification > do: [ :notification | notification resume: true ] ] in MCPackageLoader>>handleLoadErrorsDuring: > BlockClosure>>on:do: > MCPackageLoader>>handleLoadErrorsDuring: > [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad > BlockClosure>>ensure: > MCPackageLoader>>basicLoad > [ self basicLoad ] in MCPackageLoader>>loadWithNameLike: > BlockClosure>>ensure: > MCPackageLoader>>useChangeSetNamed:during: > MCPackageLoader>>useNewChangeSetNamedLike:during: > MCPackageLoader>>loadWithNameLike: > MCThreeWayMerger(MCMerger)>>loadWithNameLike: > MCVersionMerger>>mergeWithNameLike: > MCVersionMerger class>>mergeVersion: > MCVersion>>merge > MCFileRepositoryInspector(MCVersionInspector)>>merge > MCFileRepositoryInspector>>merge > MCFileRepositoryInspector(MCTool)>>performButtonAction:enabled: > PluggableButtonMorph>>performAction: > [ :m | > (m containsPoint: evt cursorPoint) > ifTrue: [ m enabled > ifTrue: [ m performAction: evt ] ] ] in PluggableButtonMorph>>mouseUp: > Array(SequenceableCollection)>>do: > PluggableButtonMorph>>mouseUp: > PluggableButtonMorph(Morph)>>handleMouseUp: > MouseButtonEvent>>sentTo: > PluggableButtonMorph(Morph)>>handleEvent: > PluggableButtonMorph(Morph)>>handleFocusEvent: > [ ActiveHand := self. > ActiveEvent := anEvent. > result := focusHolder > handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear: > BlockClosure>>on:do: > WorldMorph(PasteUpMorph)>>becomeActiveDuring: > HandMorph>>sendFocusEvent:to:clear: > HandMorph>>sendEvent:focus:clear: > HandMorph>>sendMouseEvent: > HandMorph>>handleEvent: > HandMorph>>processEvents > [ :h | > ActiveHand := h. > h processEvents. > ActiveHand := nil ] in WorldState>>doOneCycleNowFor: > Array(SequenceableCollection)>>do: > WorldState>>handsDo: > WorldState>>doOneCycleNowFor: > WorldState>>doOneCycleFor: > WorldMorph>>doOneCycle > [ [ World doOneCycle. > Processor yield. > false ] whileFalse: [ ] ] in MorphicUIManager>>spawnNewProcess > [ self value. > Processor terminateActive ] in BlockClosure>>newProcess > ------------------------------------------------------------------------------- > > > > Hernán > signature.asc (859 bytes) Download Attachment |
Thank you Henrik, I will wait to a new stable version as the problem does not affect too much my workflow.2016-09-21 6:03 GMT-03:00 Henrik Johansen <[hidden email]>:
|
Free forum by Nabble | Edit this page |