[Glass] Migrating from 3.2.9 to 3.3.3 block compilation issue

Mariano Martinez Peck via Glass glass at lists.gemtalksystems.com
Mon Jan 30 19:15:38 PST 2017


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> 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
>
>
> --
> Mariano
> http://marianopeck.wordpress.com
>



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


More information about the Glass mailing list