Metacello and #stable

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Metacello and #stable

Andrei Chis
Hi,

If I specify a stable version for a platform (spec for: #'pharo3.x' version: '3.0.6'.), shouldn't Metacello load that version?

Concrete use-case: loading ConfigurationOfMoose in Pharo 3 
- ConfigurationOfMoose specifies version 5.0 as stable for Pharo 3
- ConfigurationOfMoose version 5.0 loads  ConfigurationOfGlamour #stable
- ConfigurationOfGlamour specifies version 3.0.6 as stable for Pharo 3 (spec for: #'pharo3.x' version: '3.0.6')

Loading ConfigurationOfMoose [1] in  Pharo 3 loads version 3.0.9 for ConfigurationOfGlamour.
Updating Monticello leads to the same result.

Did I misunderstood something about how monticello works?
Any idea how to debug this?

Cheers,
Andrei

[1] (ConfigurationOfMoose project version: #'stable') record loadDirective

Reply | Threaded
Open this post in threaded view
|

Re: Metacello and #stable

Dale Henrichs-3
Andrei,

1) The old configuration load api is non-deterministic, especially when
used with large configurations, Metacello will not downgrade a package,
so if (using the old api) Metacello decides that a newer version of a
configuration is present, then it will use the newer (and possibly
incorrect version). Keep in mind that pre-loaded packages in Pharo can
influence this non-deterministic calculation.

I don't know for certain that using the old API is the culprit. The only
way for me to understand where the issue might lie is for me to look at
the Transcript output of a load.

2) I'm not sure that Moose is loadable in Pharo3.0 ... If things are not
actively tested then they are likely to quit working over time and I'd
guess this is the case for Pharo3.0 and Moose.

3) using #stable is a very inaccurate way of specifying a symbolic
version. The Seaside folks have started using version-based symbolic
versions like: #'release3', #'release3.1', #'release3.2' a while ago and
I think this is a very good way to leverage symbolic versions ...
#stable can be changed and in the mind of the developer #stable is now
version 4.0.0, while a number of older configurations will consider
#stable to be version 3.0.0 ... it doesn't take long the #stable version
universe to be completely confused ...

While I suspect that the current #stable version of Moose does not run
on Pharo3.0, if version-based symbolic versions had been used back then
the configurations would likely still be usable ...

Again, I am just guessing ... analysis of the Transcript output would
give me better clues ...

Using the new Metacello scripting API:

     Metacello new
       configuration: 'Moose';
       version: #stable;
       repository: '???';
       load

does a load without without calculating the #currentVersion and should
be deterministic with respect to loaded versions ... this only addresses
the first point above. If points 2 or 3 are involved, then it may be
more difficult to solve the problem ...

BTW, sorry for taking so long to get back to you ... in the last month
I've taken a long overdue vacation (and did not even open my laptop:)
and have been working exclusively on GemStone 3.3 ... I'm nearly
finished with my main commitments for GemStone 3.3 and as I come up for
air, I'm working off my email backlog:)

Dale
On 5/18/15 5:56 AM, Andrei Chis wrote:

> Hi,
>
> If I specify a stable version for a platform (spec for: #'pharo3.x'
> version: '3.0.6'.), shouldn't Metacello load that version?
>
> Concrete use-case: loading ConfigurationOfMoose in Pharo 3
> - ConfigurationOfMoose specifies version 5.0 as stable for Pharo 3
> - ConfigurationOfMoose version 5.0 loads  ConfigurationOfGlamour #stable
> - ConfigurationOfGlamour specifies version 3.0.6 as stable for Pharo 3
> (spec for: #'pharo3.x' version: '3.0.6')
>
> Loading ConfigurationOfMoose [1] in  Pharo 3 loads version 3.0.9
> for ConfigurationOfGlamour.
> Updating Monticello leads to the same result.
>
> Did I misunderstood something about how monticello works?
> Any idea how to debug this?
>
> Cheers,
> Andrei
>
> [1] (ConfigurationOfMoose project version: #'stable') record loadDirective
>


Reply | Threaded
Open this post in threaded view
|

Re: Metacello and #stable

Ben Coman
On Fri, May 29, 2015 at 6:14 AM, Dale Henrichs
<[hidden email]> wrote:

> Andrei,
>
> 1) The old configuration load api is non-deterministic, especially when used
> with large configurations, Metacello will not downgrade a package, so if
> (using the old api) Metacello decides that a newer version of a
> configuration is present, then it will use the newer (and possibly incorrect
> version). Keep in mind that pre-loaded packages in Pharo can influence this
> non-deterministic calculation.
>
> I don't know for certain that using the old API is the culprit. The only way
> for me to understand where the issue might lie is for me to look at the
> Transcript output of a load.
>
> 2) I'm not sure that Moose is loadable in Pharo3.0 ... If things are not
> actively tested then they are likely to quit working over time and I'd guess
> this is the case for Pharo3.0 and Moose.
>
> 3) using #stable is a very inaccurate way of specifying a symbolic version.
> The Seaside folks have started using version-based symbolic versions like:
> #'release3', #'release3.1', #'release3.2' a while ago and I think this is a
> very good way to leverage symbolic versions ... #stable can be changed and
> in the mind of the developer #stable is now version 4.0.0, while a number of
> older configurations will consider #stable to be version 3.0.0 ... it
> doesn't take long the #stable version universe to be completely confused ...

For a Configuration newbie it may seem intuitive for a Configuration
to dependend on other Configuration's #stable without realising the
hole they are digging.  You could say its easy to shoot yourself in
the foot with #stable?  So maybe #stable only makes sense as a
*convenience* for interactive users at the "command line."  It might
be reasonable for the system to block use of #stable within a
Configuration (with a deprecation warning and bypass method like
#allowNestedStable)
cheers -ben

>
> While I suspect that the current #stable version of Moose does not run on
> Pharo3.0, if version-based symbolic versions had been used back then the
> configurations would likely still be usable ...
>
> Again, I am just guessing ... analysis of the Transcript output would give
> me better clues ...
>
> Using the new Metacello scripting API:
>
>     Metacello new
>       configuration: 'Moose';
>       version: #stable;
>       repository: '???';
>       load
>
> does a load without without calculating the #currentVersion and should be
> deterministic with respect to loaded versions ... this only addresses the
> first point above. If points 2 or 3 are involved, then it may be more
> difficult to solve the problem ...
>
> BTW, sorry for taking so long to get back to you ... in the last month I've
> taken a long overdue vacation (and did not even open my laptop:) and have
> been working exclusively on GemStone 3.3 ... I'm nearly finished with my
> main commitments for GemStone 3.3 and as I come up for air, I'm working off
> my email backlog:)
>
> Dale
>
> On 5/18/15 5:56 AM, Andrei Chis wrote:
>>
>> Hi,
>>
>> If I specify a stable version for a platform (spec for: #'pharo3.x'
>> version: '3.0.6'.), shouldn't Metacello load that version?
>>
>> Concrete use-case: loading ConfigurationOfMoose in Pharo 3
>> - ConfigurationOfMoose specifies version 5.0 as stable for Pharo 3
>> - ConfigurationOfMoose version 5.0 loads  ConfigurationOfGlamour #stable
>> - ConfigurationOfGlamour specifies version 3.0.6 as stable for Pharo 3
>> (spec for: #'pharo3.x' version: '3.0.6')
>>
>> Loading ConfigurationOfMoose [1] in  Pharo 3 loads version 3.0.9 for
>> ConfigurationOfGlamour.
>> Updating Monticello leads to the same result.
>>
>> Did I misunderstood something about how monticello works?
>> Any idea how to debug this?
>>
>> Cheers,
>> Andrei
>>
>> [1] (ConfigurationOfMoose project version: #'stable') record loadDirective
>>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Metacello and #stable

Dale Henrichs-3
Ben,

Hmmm, I could make the use of #stable a Critical Warning:
"MetacelloValidationCriticalWarning indicates that there is a logical
inconsistency that may not be intentional and that could cause incorrect
loads". I've submitted a Metacello issue #350[1] for this.

If I thought that folks regularly used configuration validation, I
wouldn't have to do much else:)

Of course there are ancient configurations where #stable still must be
used. There are validation pragmas that allow one to filter out "know
exceptions" for the validator so that only new configs would generate
the "critical warning" ...

I'm reluctant to go much further than this ... of course tools could be
more aggressive in stamping out the use of #stable...

Dale

[1] https://github.com/dalehenrich/metacello-work/issues/350
On 5/28/15 4:57 PM, Ben Coman wrote:

> On Fri, May 29, 2015 at 6:14 AM, Dale Henrichs
> <[hidden email]> wrote:
>> Andrei,
>>
>> 1) The old configuration load api is non-deterministic, especially when used
>> with large configurations, Metacello will not downgrade a package, so if
>> (using the old api) Metacello decides that a newer version of a
>> configuration is present, then it will use the newer (and possibly incorrect
>> version). Keep in mind that pre-loaded packages in Pharo can influence this
>> non-deterministic calculation.
>>
>> I don't know for certain that using the old API is the culprit. The only way
>> for me to understand where the issue might lie is for me to look at the
>> Transcript output of a load.
>>
>> 2) I'm not sure that Moose is loadable in Pharo3.0 ... If things are not
>> actively tested then they are likely to quit working over time and I'd guess
>> this is the case for Pharo3.0 and Moose.
>>
>> 3) using #stable is a very inaccurate way of specifying a symbolic version.
>> The Seaside folks have started using version-based symbolic versions like:
>> #'release3', #'release3.1', #'release3.2' a while ago and I think this is a
>> very good way to leverage symbolic versions ... #stable can be changed and
>> in the mind of the developer #stable is now version 4.0.0, while a number of
>> older configurations will consider #stable to be version 3.0.0 ... it
>> doesn't take long the #stable version universe to be completely confused ...
> For a Configuration newbie it may seem intuitive for a Configuration
> to dependend on other Configuration's #stable without realising the
> hole they are digging.  You could say its easy to shoot yourself in
> the foot with #stable?  So maybe #stable only makes sense as a
> *convenience* for interactive users at the "command line."  It might
> be reasonable for the system to block use of #stable within a
> Configuration (with a deprecation warning and bypass method like
> #allowNestedStable)
> cheers -ben
>
>> While I suspect that the current #stable version of Moose does not run on
>> Pharo3.0, if version-based symbolic versions had been used back then the
>> configurations would likely still be usable ...
>>
>> Again, I am just guessing ... analysis of the Transcript output would give
>> me better clues ...
>>
>> Using the new Metacello scripting API:
>>
>>      Metacello new
>>        configuration: 'Moose';
>>        version: #stable;
>>        repository: '???';
>>        load
>>
>> does a load without without calculating the #currentVersion and should be
>> deterministic with respect to loaded versions ... this only addresses the
>> first point above. If points 2 or 3 are involved, then it may be more
>> difficult to solve the problem ...
>>
>> BTW, sorry for taking so long to get back to you ... in the last month I've
>> taken a long overdue vacation (and did not even open my laptop:) and have
>> been working exclusively on GemStone 3.3 ... I'm nearly finished with my
>> main commitments for GemStone 3.3 and as I come up for air, I'm working off
>> my email backlog:)
>>
>> Dale
>>
>> On 5/18/15 5:56 AM, Andrei Chis wrote:
>>> Hi,
>>>
>>> If I specify a stable version for a platform (spec for: #'pharo3.x'
>>> version: '3.0.6'.), shouldn't Metacello load that version?
>>>
>>> Concrete use-case: loading ConfigurationOfMoose in Pharo 3
>>> - ConfigurationOfMoose specifies version 5.0 as stable for Pharo 3
>>> - ConfigurationOfMoose version 5.0 loads  ConfigurationOfGlamour #stable
>>> - ConfigurationOfGlamour specifies version 3.0.6 as stable for Pharo 3
>>> (spec for: #'pharo3.x' version: '3.0.6')
>>>
>>> Loading ConfigurationOfMoose [1] in  Pharo 3 loads version 3.0.9 for
>>> ConfigurationOfGlamour.
>>> Updating Monticello leads to the same result.
>>>
>>> Did I misunderstood something about how monticello works?
>>> Any idea how to debug this?
>>>
>>> Cheers,
>>> Andrei
>>>
>>> [1] (ConfigurationOfMoose project version: #'stable') record loadDirective
>>>
>>


Reply | Threaded
Open this post in threaded view
|

Re: Metacello and #stable

Andrei Chis
In reply to this post by Dale Henrichs-3
Hi Dale,

Thanks for your answer. Did not know stable is not a good choice for more complex configurations.

Moose still has a stable version that loads ok in Pharo 3. There is also a jenkins build: https://ci.inria.fr/moose/job/moose-5.0/
ConfigurationOfMoose is in the main moose repo (http://www.smalltalkhub.com/#!/~Moose/Moose)

For now I fixed the issues we had by deleting a few versions from ConfigurationOfGlamour (ConfigurationOfGlamour-AndreiChis.211)

Cheers,
Andrei



On Fri, May 29, 2015 at 12:14 AM, Dale Henrichs <[hidden email]> wrote:
Andrei,

1) The old configuration load api is non-deterministic, especially when used with large configurations, Metacello will not downgrade a package, so if (using the old api) Metacello decides that a newer version of a configuration is present, then it will use the newer (and possibly incorrect version). Keep in mind that pre-loaded packages in Pharo can influence this non-deterministic calculation.

I don't know for certain that using the old API is the culprit. The only way for me to understand where the issue might lie is for me to look at the Transcript output of a load.

2) I'm not sure that Moose is loadable in Pharo3.0 ... If things are not actively tested then they are likely to quit working over time and I'd guess this is the case for Pharo3.0 and Moose.

3) using #stable is a very inaccurate way of specifying a symbolic version. The Seaside folks have started using version-based symbolic versions like: #'release3', #'release3.1', #'release3.2' a while ago and I think this is a very good way to leverage symbolic versions ... #stable can be changed and in the mind of the developer #stable is now version 4.0.0, while a number of older configurations will consider #stable to be version 3.0.0 ... it doesn't take long the #stable version universe to be completely confused ...

While I suspect that the current #stable version of Moose does not run on Pharo3.0, if version-based symbolic versions had been used back then the configurations would likely still be usable ...

Again, I am just guessing ... analysis of the Transcript output would give me better clues ...

Using the new Metacello scripting API:

    Metacello new
      configuration: 'Moose';
      version: #stable;
      repository: '???';
      load

does a load without without calculating the #currentVersion and should be deterministic with respect to loaded versions ... this only addresses the first point above. If points 2 or 3 are involved, then it may be more difficult to solve the problem ...

BTW, sorry for taking so long to get back to you ... in the last month I've taken a long overdue vacation (and did not even open my laptop:) and have been working exclusively on GemStone 3.3 ... I'm nearly finished with my main commitments for GemStone 3.3 and as I come up for air, I'm working off my email backlog:)

Dale

On 5/18/15 5:56 AM, Andrei Chis wrote:
Hi,

If I specify a stable version for a platform (spec for: #'pharo3.x' version: '3.0.6'.), shouldn't Metacello load that version?

Concrete use-case: loading ConfigurationOfMoose in Pharo 3
- ConfigurationOfMoose specifies version 5.0 as stable for Pharo 3
- ConfigurationOfMoose version 5.0 loads  ConfigurationOfGlamour #stable
- ConfigurationOfGlamour specifies version 3.0.6 as stable for Pharo 3 (spec for: #'pharo3.x' version: '3.0.6')

Loading ConfigurationOfMoose [1] in  Pharo 3 loads version 3.0.9 for ConfigurationOfGlamour.
Updating Monticello leads to the same result.

Did I misunderstood something about how monticello works?
Any idea how to debug this?

Cheers,
Andrei

[1] (ConfigurationOfMoose project version: #'stable') record loadDirective




Reply | Threaded
Open this post in threaded view
|

Re: Metacello and #stable

Stephan Eggermont-3
On 01/06/15 10:56, Andrei Chis wrote:
> Moose still has a stable version that loads ok in Pharo 3. There is also
> a jenkins build: https://ci.inria.fr/moose/job/moose-5.0/
> ConfigurationOfMoose is in the main moose repo
> (http://www.smalltalkhub.com/#!/~Moose/Moose)

Yes, we've done some work to ensure that the stable works.
That is because none of the dependencies have already
declared a new version stable that only works in Pharo4.
At that moment, we need to introduce platform to get the
right stable version in Pharo3. As we'll have multiple
releases of Moose on Pharo 5, it makes sense to start
getting more precise there.

Stephan