On Mon, Sep 22, 2014 at 2:36 PM, Benjamin Hindman <b...@eecs.berkeley.edu>
wrote:

> Jumping on a tcon/hangout sounds healthy, but given I'm traveling right now
> in Europe and timing is difficult I'm going to comment inline here.
>
>
> - callsites need to be modules aware to use the right factory method to
> > instantiate the modular object
> >
>
> I don't know how else you'd accomplish making certain components of the
> system *modular* unless we changed the way we instantiated the components.
> This one seems fairly self-evident to me, but perhaps there's a trick we
> could play instead? Are you thinking something LD_PRELOAD-esque here? But
> works well with C++?
>

​I'm thinking that you'd instantiate a module using the same class name but
the link step would take care of making sure the modular implementation is
available.​



>
>
> > - mesos-core owners need to be aware of modules and versioning when they
> > change the abstract API
> >
>
> Yes, definitely, anyone hacking in Mesos should be aware that changing the
> API of something like the Allocator might break all Allocator
> implementations that exist out there. This is pretty fundamental to module
> systems and one of the reasons why the design has a flexible, albeit more
> complicated, verification/versioning component.
>
>
> > - module owners need to be aware of the modules API and versioning
> >
>
> As they should as well, since it would be nice to give us some flexibility
> in the future to deal with the mistakes we're bound to make.
>
>
> > - customers (end-users) have to be modules aware and set their runtime
> > configuration correctly
> >
>
> Mesos will always function without the need for any external modules, as it
> does today. But yes, if an operator wants to use a module than they will
> definitely need to update the configuration to do so. The example I'm
> thinking about here is LoadModule from Apache HTTPD.
>
>
> > - errors in versioning or modules will only be caught at runtime
> >
>
> This is an artifact of the design constraints. In fact, perhaps it wasn't
> highlighted explicitly in the design document, but we'd definitely like to
> support modules in binary format, like an RPM (as you can do with Apache
> HTTPD modules as well). That implies that a module developer might be
> building their module independently of an operator building Mesos.
> Moreover, it implies that if there is anything we definitely want to make
> rock solid in our design it's what happens when such a module is launched
> with a running Mesos cluster, hence the design's focus on verification and
> versioning. Perhaps the design is too complicated and we should settle on
> something simpler, like forcing every build of a module to be associated
> with a single Mesos version, but regardless, an operator might still make a
> mistake when configuring Mesos and we must do the verification at runtime.
>


​Unless you take the configuration of modules out of runtime and into
compile or link time.​



>
>
> > My alternative proposal requires the following:
> >
>
> Sorry if I'm just out of the loop here, but did you share a proposal with
> the mailing list or on JIRA that I missed? I'm having a hard time following
> your statements about your proposal without that context. That would
> definitely help facilitate a discussion via tcon/hangout as well.
>


​I've made this proposal on JIRA and on this mailing list, but for
simplicity here it is again:

- create abstract classes to define interfaces to objects that should be
modular
- build modules as static libraries that can be assembled at link time to
create custom Mesos builds

That's it. :)​




-- 
Dominic Hamon | @mrdo | Twitter
*There are no bad ideas; only good ideas that go horribly wrong.*

Reply via email to