[Glass] Migrating from 3.2.9 to 3.3.3 block compilation issue

Dale Henrichs via Glass glass at lists.gemtalksystems.com
Tue Jan 31 09:25:03 PST 2017


Mariano,

1. Find allInstances of ExecBlock

2. Select all instances that #needsRecompile.

3. Send #recompile to the selected instances and collect instances that 
signal an error during #recompile. The #recompile method attempts to 
recompile Simple blocks in-place if there is an error during compilation 
or the block is not simple, an Error is signaled.

4. For the remaining instances of ExecBlock, you will have to track down 
the reference to the block and reinstall a new, recompiled instance of 
the ExecBlock.

     1. look at the #blockSource and the #receiver for the block and you 
might recognize the method needed to recreate the block

     2. look at the #blockSource and pick out a likely chunk of source 
that you can use to search in method source (`browse source --exact 
`<source-chunk>`)

     3. Use Repository>>findReferencePathToObject: or 
Repository>>findAllReferencePathsToObject: to find which object(s) are 
holding onto the block.

Dale

On 01/30/2017 07:15 PM, Mariano Martinez Peck via Glass wrote:
> Hi guys,
>
> Ok, as Dale found out, some automatic recompilation from 
> `upgradeStone` was not being done because of a GsDevKit_issue.
> Now, problem is that even with that fixed, I am still finding here and 
> there more and more closures that need recompilation. These are NOT 
> sort blocks of sorted collections nor method. They are closures (from 
> my domain objects) stored somewhere.
>
> Now, manually fixing each, like this:
>
> anObject setter: anObject getter _sourceString evaluate.
>
> Is a pain and not accurate (the closure may be still referenced from 
> another place)...because I must know how to re-assign the new closure. 
> Is there an alternative GENERIC solution to recompile all needed ones? 
> I can think of that but using #become:
>
>
> System commit.
>   [
>   MCPlatformSupport installAlmostOutOfMemoryStaticHandler: 75.
> ExecBlock allSubInstances do: [:each |
> each become: each _sourceString evaluate.
> ].
> ]
>   ensure: [ MCPlatformSupport uninstallAlmostOutOfMemoryStaticHandler ].
> System commit.
>
> But...comment of #become: says that BlockClosure instances cannot be 
> become...BUUUUUUH.
>
> So.. any idea?
>
> Thanks in advance,
>
>
>
>
>
> On Thu, Jan 26, 2017 at 4:01 PM, Mariano Martinez Peck 
> <marianopeck at gmail.com <mailto:marianopeck at gmail.com>> wrote:
>
>     Hi guys,
>
>     I am migrating some stones (tODE and GsDevKit based) that are on
>     GemStone 3.2.9 to 3.3.3. I am doing this with the `upgradeStone`
>     gsDevKit command.
>
>     I first hit one problem when trying to execute this code via topaz:
>
>     MCRepositoryGroup default removeRepository: (MCHttpRepository
>                             location: 'xxx'
>                             user: ''
>                             password: '').
>
>
>
>     *ERROR 2142 , a ImproperOperation occurred (error 2142), Cannot
>     execute method, 'method needs recompile, MCRepositoryGroup class
>     >> default , oop 206736385' (ImproperOperation)
>     *
>
>     Then, I said...ok, let's connect with tODE and investigate some
>     more (like doing Object _objectForOop: 206736385). But when I try
>     to connect with tODE I get:
>
>
>     *Error running testLogin:*
>     *
>     *
>     *'Error: Unable to log into server:a ImproperOperation occurred
>     (error 2142), Cannot execute method, ''method needs recompile,
>     TDTopezServer class >> createFor: , oop 245949953''with:
>     ''TDTopezServer createFor: 1'''*
>     *
>     *
>     *NOTE: netldi log can be found in the file:
>     '$GS_HOME/server/stones/<stone-name>/logs/netldi.log'.*
>     *
>     *
>
>
>     So...looks like I have methods to be recompiled everywhere. I saw
>     this issue [1] but that does not seem to help as these closures
>     are not in sorted collections right ?
>
>     Now, manually fixing each, like this:
>
>      | sc sortBlock val cls str val |
>       sc := "sortedcollection instance".
>       sortBlock := sc sortBlock.
>       str := sortBlock _sourceString.
>       val := str evaluate.
>       sc _sortBlock: val
>
>     Is a pain...because I must know how to re-assign the new compiled
>     method. Is there an alternative GENERIC solution to recompile all
>     needed ones? I can think of that but using #become:
>
>
>     System commit.
>       [
>       MCPlatformSupport installAlmostOutOfMemoryStaticHandler: 75.
>     ExecBlock allSubInstances do: [:each |
>     each become: each _sourceString evaluate.
>     ].
>     ]
>       ensure: [ MCPlatformSupport
>     uninstallAlmostOutOfMemoryStaticHandler ].
>     System commit.
>
>     But...comment of #become: says that BlockClosure instances cannot
>     be become...BUUUUUUH.
>
>     So.. any idea?
>
>     Thanks in advance,
>
>     [1] https://github.com/GsDevKit/GsDevKit_home/issues/70
>     <https://github.com/GsDevKit/GsDevKit_home/issues/70>
>
>
>     -- 
>     Mariano
>     http://marianopeck.wordpress.com <http://marianopeck.wordpress.com>
>
>
>
>
> -- 
> Mariano
> http://marianopeck.wordpress.com
>
>
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> http://lists.gemtalksystems.com/mailman/listinfo/glass

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20170131/b4995e50/attachment.html>


More information about the Glass mailing list