Yeah I meant this purely as an approach for the connectors themselves to
implement not that we would automatically suppress configs in the
framework.

-Jay

On Fri, Aug 14, 2015 at 7:48 PM, Gwen Shapira <g...@confluent.io> wrote:

> The "ignore new configs" plan is good, IMO. I just don't know if its
> feasible in current Copycat:
> I'm not sure CC can ignore configuration on the connector behalf. Also,
> this is something we will want to log very clearly and I'm not sure this is
> doable outside the connector.
>
> Regarding complex implementation for connector developers. All version1.0
> connectors will have the following:
>
> int getVersion() {
>     return 1;
> }
>
> Configuration upgradeConfig(Configuration config) {
>     return config;
> }
>
> Not that bad :) We can even have a base class to avoid boilerplate.
>
> The complexity shows up when upgradeConfig has to actually upgrade configs,
> but thats our whole point, IMO.
>
> Gwen
>
> On Fri, Aug 14, 2015 at 10:48 AM, Jay Kreps <j...@confluent.io> wrote:
>
> > I think this is a great area to think about.
> >
> > What about the simpler informal scheme of just having cc ignore config it
> > doesn't know about and instructing connector developers to maintain
> > compatibility when renaming params (i.e. support both old and new) as we
> do
> > for Kafka config.
> >
> > The steps would then be:
> > 1. CC connector developer adds new config support, possibly deprecating
> > older configs but not removing them.
> > 2. CC user then upgrades their config, then the connector implementation
> > 3. CC user can always roll back if this doesn't work in which case the
> new
> > configs added are ignored
> >
> > If you want to totally refactor your configs in a way where compatibility
> > is just not doable then you should rename the connector.
> >
> > This is one where a system test that tests last release versus this
> release
> > would probably do a lot to help ensure this stuff actually worked as
> > expected.
> >
> > Not sure if this is better or worse than the hard versioning scheme.
> >
> > -Jay
> >
> > On Fri, Aug 14, 2015 at 12:52 AM, Ewen Cheslack-Postava <
> e...@confluent.io
> > >
> > wrote:
> >
> > > Yes, I think that makes sense. As I see it, the tradeoffs are:
> > >
> > > 1. Complexity - adding these APIs increases the number of things
> > connector
> > > developers need to implement just to get started. In a lot of cases,
> the
> > > first version of a connector might literally only have some connection
> > > string as a setting and that setting will never be removed/changed. So
> it
> > > would be, in some sense, unnecessary added complexity.
> > > 2. Relies on correct modification of version number by connector
> > developer
> > > - of course any compatibility relies on the connector developer noting
> > > incompatibilities and handling them properly, but baking versioning
> into
> > > the APIs suggests we're guaranteeing compatibility. However, we know
> from
> > > experience that this is a lot harder than just adding version numbers.
> > > Seemingly small changes may change the semantics but not the format of
> > the
> > > config such that there is an unexpected incompatibility.
> > > 3. Force developers to think about compatibility up front - I think
> this
> > is
> > > the main argument for this approach. By including those APIs, it's a
> big
> > > red flag to connector developers that they need to think about
> different
> > > versions of their config and how they will handle any changes.
> > >
> > > I'm ok with including the versioning or not. I don't feel too strongly
> > > because I think including the versions is really a band-aid, not a real
> > > solution, to the compatibility problem. (I don't think there is a
> > solution
> > > for it; it's just a really hard problem...). I am wary of adding more
> > > methods to the APIs because keeping the connector APIs as simple as
> > > possible is really important for getting non-Kafka devs to develop
> > > connectors.
> > >
> > > By the way, this probably extends to the Tasks as well -- they have the
> > > same basic configuration compatibility problems as Connectors do. So I
> > > think adopting this approach implies that we'd do the same to the Task
> > > interfaces.
> > >
> > >
> > > On Thu, Aug 13, 2015 at 10:16 PM, Gwen Shapira <g...@confluent.io>
> > wrote:
> > >
> > > > Hi Team Kafka,
> > > >
> > > > This may be a slightly premature discussion, but forgetting about
> > > upgrades
> > > > is a newbie mistake I'd like us to avoid :)
> > > >
> > > > So, we have connector-plugins, and users use them to create
> > > > connector-instances. This requires some configuration - database
> > > connection
> > > > string, HDFS namenode, etc.
> > > >
> > > > Now suppose we have a SystemX connector-plugin, and it takes just
> > > > "connection string" as argument. And people happily use it. Now
> imagine
> > > > that the guy who wrong the plugin wants to release
> SystemX-plugin-2.0.
> > > >
> > > > Ideally, we'd want users to be able to drop 2.0 jar instead of 2.0
> and
> > > > restart their connector-instances and keep on running with the
> existing
> > > > configuration.
> > > >
> > > > But what if SystemX-plugin-2.0 made changes to the configuration?
> What
> > if
> > > > it now has a new mandatory parameter? Or if the connection string
> > format
> > > > changed?
> > > >
> > > > I'd like to give connector developers a way to upgrade existing
> > > > configuration when they release a new version.
> > > >
> > > > My proposal:
> > > > 1. Connector API now includes 2 new methods - int getVersion() and
> > > > configuration upgrade(configuration)
> > > > 2. When the framework persists configuration for the connector (I'm
> > > talking
> > > > mostly about cluster mode where we want to keep the configuration in
> > > > Kafka), it also persists the version #.
> > > > 3. When starting a connector-instance, if the version from
> getVersion()
> > > > doesn't match the version in the persisted configs, the framework
> will
> > > call
> > > > upgrade() with existing configs so the connector can upgrade them and
> > > > return the new configs which will then be persisted with the new
> > version.
> > > > 4. If the upgrade fails, the connector-instance will not run.
> > > >
> > > > Does that make sense?
> > > >
> > > > Gwen
> > > >
> > >
> > >
> > >
> > > --
> > > Thanks,
> > > Ewen
> > >
> >
>

Reply via email to