On 5 February 2018 at 19:57, Eliot Miranda <eliot.miranda@gmail.com> wrote:

On Mon, Feb 5, 2018 at 9:42 AM, Levente Uzonyi <leves@caesar.elte.hu> wrote:

As long as both package versions (the one that the method was removed and the one that the method was moved to) are in the same update map, it'll just work.

Is it robust in the presence of interrupts and restarts of the update process?

​It is so simple that ​it should be as robust as possible under the current state of things:

The whole update map (all versions in it) is scanned for definitions that are about to be removed from one package and added to another. That is, only the category will change, the actual method and class stays the same. These reorganizations are executed in advance. That's it. The code is in MCReorganizationPreloader.

Following this, each version in the update map is loaded, in order, without any knowledge of the reorganization step. If a definition is in fact moved from a package to another, the preloader will have moved it already and made both packages dirty. That means a full diff will be performed for these packages, and as usual, only the actual differences are performed to bring the working copy in the image up-to-date with the snapshot to be loaded.

As a last step, the working copies that have been made dirty by the preloader will be checked again and marked clean if they do match the snapshot.

This is not the issue. The issue was that a config map was changed accidentally so that the removal and addition now were in two separate config maps. That means the reorganization preloader could not see them. Boom.

​- Bert -​