Login  Register

Re: Moving data into new package/image version

Posted by Mariano Martinez Peck on May 12, 2012; 1:13pm
URL: https://forum.world.st/Moving-data-into-new-package-image-version-tp4628820p4628830.html



On Sat, May 12, 2012 at 3:03 PM, Sean P. DeNigris <[hidden email]> wrote:
I'm porting some apps that were using simple image-based persistence
(ReferenceStream) from 1.3 to 1.4.

The first thing that I ran into was FS class name changes (e.g. FSReference
-> FileReference). Since the class wasn't present, I got an errorKeyNotFound
[1]. Naively tried:

   Smalltalk globals
       at: #FSReference put: FileReference;
       at: #FSFilesystem put: FileSystem;
       at: #FSAbsolutePath put: AbsolutePath;
       at: #FSUnixStore put: UnixStore.

But got "primitive #primGetPosition: in MultiByteFileStream failed" from
ReferenceStream>>next

I have a few ideas, but has anyone gone successfully through this type of
process before? What's my best bet? I've been following Fuel and STON (which
is quite nice for parsing json from REST APIs b.t.w.), but I'm not clear if
either would be helpful here.


Sorry, I don't have ideas of how to solve that. However, I can only say that Fuel *does* suppor that type of problem (if I understood the problem correctly).
The following test demonstrates an example:

FLMigrationTest >> testClassRename
   
    | pointClass aPoint resultPoint pointClassName |
    pointClass := self newClassWithInstanceVariableNames: 'x y'.
    pointClassName := pointClass name.
    aPoint := pointClass new.
    aPoint instVarNamed: 'x' put: 7.   
    aPoint instVarNamed: 'y' put: 11.
   
    self serialize: aPoint.
    pointClass renameSilently: (pointClassName, 'Renamed') asSymbol.

    self materializer
        migrateClassNamed: pointClassName
        toClass: pointClass.
       
    resultPoint := self materialized.

    self assert: (resultPoint instVarNamed: 'x') = 7.
    self assert: (resultPoint instVarNamed: 'y') = 11.




 
What do you suggest?

Thanks,
Sean

[1] Stack trace (heavily snipped)
SystemDictionary(Dictionary)>>errorKeyNotFound:
       Receiver: a SystemDictionary(lots of globals)
       Arguments and temporary variables:
               aKey:   #FSReference
       Receiver's instance variables:
               tally:  2920
               array:  an Array(#MemoryHandle->MemoryHandle nil nil
#BlockClosuresTestCase->Blo...etc...
               cachedClassNames:       nil
               cachedNonClassNames:    nil

...

ReferenceStream(DataStream)>>readInstance
       Receiver: a ReferenceStream
       Arguments and temporary variables:
               instSize:       2
               aSymbol:        #FSReference
               refPosn:        50
               anObject:       nil
               newClass:       nil
       Receiver's instance variables:
               byteStream:     MultiByteFileStream: '/Volumes/Sean''s
Universe/sean/.jenkins/jobs/...etc...
               topCall:        nil
               basePos:        0
               references:     an IdentityDictionary()
               objects:        an IdentityDictionary(0->#(nil) 5->a Resources 10->#Resources
21->an O...etc...
               currentReference:       55
               fwdRefEnds:     an IdentityDictionary()
               blockers:       an IdentityDictionary()
               skipping:       an IdentitySet()

--
View this message in context: http://forum.world.st/Moving-data-into-new-package-image-version-tp4628820.html
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.




--
Mariano
http://marianopeck.wordpress.com