Wow this is nice! I did not see this coming...

LZ

On Sun, May 7, 2017 at 3:58 PM, Shimon Shtein <ssht...@redhat.com> wrote:
>
> OK, it wasn't exactly my intention, but I see the discussion moves towards
> general plugin install/uninstall procedure.
>
> I have discovered a nice feature that enables us to isolate plugin
> migrations, and run them on per-plugin manner:
> Apparently we can run:
> rake db:migrate SCOPE=my_plugin
> rake db:migrate SCOPE=my_plugin VARSION=0 # to migrate down
> And it will run only migrations that are tagged for that scope. One can
> achieve that by generating proper migration names:
> <timestamp>_<migration_name>.<scope/plugin_name>.rb
> I have added a PR that generates migrations for plugins with the proper
> naming: https://github.com/theforeman/foreman/pull/4509.
>
> This should be the base for complete removal. Then, if we add a down-only
> migration that removes STI's - it should be enough to remove all DB traces
> for a plugin.
>
>
>
> On Wed, May 3, 2017 at 2:11 PM, Lukas Zapletal <l...@redhat.com> wrote:
>>
>> I agree with Tomas, it's more cleaner to remove all the data right
>> away. Therefore I suggest that we check for these kind of objects
>> during initialization and if such an class is (not) found, then we can
>> throw an error like "Run foreman-rake plugin:clean" to delete orhpaned
>> records.
>>
>> I am for (A) - remove all the data.
>>
>> LZ
>>
>> On Wed, May 3, 2017 at 11:16 AM, Tomas Strachota <tstra...@redhat.com>
>> wrote:
>> > This issue is tightly coupled with plugin uninstallation and I think
>> > we should solve the two problems together. At the moment there's no
>> > standard plugin uninstallation procedure that would take care of
>> > cleaning up the system. This is something each plugin should provide.
>> > One thing (imho the less important in this context) is where we put
>> > such code. Should it be a rake task, part of installer, part of
>> > maintanance script, somewhere else?
>> >
>> > What I see as more important is to decide what data will the
>> > uninstallation process remove (keep all vs. keep only settings vs.
>> > wipe all) and how we want the plugin to behave if it's installed
>> > again. This will affect how we approach missing STI classes.
>> >
>> > I can see 3 options:
>> >
>> > a) Remove all data
>> > Plugin would remove all tables and records it created. In such case we
>> > probably don't need to change the STI behavior. Plugin uninstallation
>> > should take care of removing the data correctly. If it fails it's fine
>> > to throw exception to indicate the system integrity is broken. This
>> > approach is imho safer for us as developers and requires less
>> > defensive coding.
>> >
>> > b) Keep all the data
>> > In this case the original data should be present when the plugin is
>> > installed again. STI records without classes should be completely
>> > hidden in the default scope. If all records are listed we should
>> > return either instances of base class or some special class for the
>> > missing types. I'm afraid this approach is quite fragile and can lead
>> > to many surprises when a plugin is uninstalled, the foreman lives
>> > without it for some time and then you install it again. I'm also not
>> > sure how common is such usecase.
>> >
>> > c) Combination of a) and b)
>> > We can keep data where it's safe (like settings) and delete the rest.
>> >
>> > I'm in favor of a) or c)
>> >
>> > T.
>> >
>> >
>> >
>> >
>> >
>> > On Sun, Apr 30, 2017 at 10:05 AM,  <ssht...@redhat.com> wrote:
>> >>
>> >> Hello,
>> >>
>> >> lately I was switching plugins on and off, and I stumbled upon an
>> >> annoying
>> >> issue: Many plugins that add some STI classes (for example Katello that
>> >> adds
>> >> settings, or Discovery that adds DiscoveredHost).
>> >> A problem starts when such a plugin is removed from the system, since
>> >> default STI implementation will throw an error if it can't load a class
>> >> that
>> >> corresponds to the :type column in the DB.
>> >>
>> >> I propose a custom handling for such cases, since they are not exactly
>> >> exceptions in our system design.
>> >> I was thinking about one of the following options to handle this case,
>> >> and
>> >> would like to see a voting which one you prefer. Of course other
>> >> options can
>> >> be proposed too.
>> >>
>> >> 1. Return a base class for such records (Maybe with an error already
>> >> set)
>> >> 2. Return nil/some kind of special AR object for such records (will
>> >> require
>> >> defensive coding while handling heterogeneous lists)
>> >> 3. Filter those records out with default scope (will require more
>> >> declaration in plugins, or more DB queries on system startup)
>> >>
>> >> Any thoughts in this area will be much appreciated,
>> >>
>> >> Shim
>> >>
>> >> --
>> >> You received this message because you are subscribed to the Google
>> >> Groups
>> >> "foreman-dev" group.
>> >> To unsubscribe from this group and stop receiving emails from it, send
>> >> an
>> >> email to foreman-dev+unsubscr...@googlegroups.com.
>> >> For more options, visit https://groups.google.com/d/optout.
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups "foreman-dev" group.
>> > To unsubscribe from this group and stop receiving emails from it, send
>> > an email to foreman-dev+unsubscr...@googlegroups.com.
>> > For more options, visit https://groups.google.com/d/optout.
>>
>>
>>
>> --
>> Later,
>>   Lukas @lzap Zapletal
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "foreman-dev" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/foreman-dev/51oBYLZpw80/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> foreman-dev+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "foreman-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to foreman-dev+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.



-- 
Later,
  Lukas @lzap Zapletal

-- 
You received this message because you are subscribed to the Google Groups 
"foreman-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to foreman-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to