The current producer interceptor API is this:

ProducerRecord<K, V> onSend(ProducerRecord<K, V> record);

So adding a header means creating a new ProducerRecord with a new header
added to the current headers and returning it. Would that not work?

-Jason

On Wed, Feb 22, 2017 at 1:45 PM, Michael Pearce <michael.pea...@ig.com>
wrote:

> So how would you have this work if not mutable where interceptors would
> add headers?
>
> Sent using OWA for iPhone
> ________________________________________
> From: Jason Gustafson <ja...@confluent.io>
> Sent: Wednesday, February 22, 2017 8:42:27 PM
> To: dev@kafka.apache.org
> Subject: Re: [DISCUSS] KIP-82 - Add Record Headers
>
> I think the point on the mutability of Headers is worth discussing a little
> more. As far as I can tell, once the ProducerRecord (or ConsumerRecord) is
> constructed, there should be no need to further change the headers. Is that
> correct? If so, then why not enforce that that is the case through the API?
> One problem with mutability it that it constrains the implementation of
> Headers. For example, if we were backing with a byte slice, would we recopy
> the bytes if a header is added or would we maintain a satellite collection
> of added records. Seems not great either way. If we really think mutability
> is needed, perhaps we could add a method to headers to convert it to a
> mutable type (e.g. a Headers.toMap)?
>
> I'm also with Ismael about exposing Headers.get(). I thought it might make
> sense to have a method like this instead:
>
> Iterable<Header> findMatching(Pattern pattern);
>
> This makes the (potential) need to scan the headers clear in the API. I'd
> also be fine exposing no getter at all. In general, Ï think it's good to
> start with a minimalistic API and work from there since it's always easier
> to add methods than remove them.
>
> -Jason
>
> On Wed, Feb 22, 2017 at 9:16 AM, Michael Pearce <michael.pea...@ig.com>
> wrote:
>
> >
> > Hi Ismael
> >
> > On point 1,
> >
> > Sure makes sense will update shortly.
> >
> > On point 2,
> >
> > Setter/getter typical to properties/headers api’s traditionally are map
> > styled interfaces and what I believe is most expected styled thus the
> Key,
> > Value setter.
> > Also it would mean rather than an interface, we would be making our
> > internal header impl object we have for the array, exposed. E.g. if we
> had
> > a Map really this would be Map.Entry interface, this is the same reasons
> on
> > the map interface I cannot actually make the underlying Node object
> that’s
> > the implementation for HashMap, so that internals can be changed.
> >
> >
> > On point 3,
> >
> > I think it people do expect it to be performant, thus why originally
> > concern I raised with using an array for to me is an early memory
> > optimisation. I think the user experience of properties/headers is on a
> > get/set model. This is why its important we have encapsulated logic that
> > then allows us to change this to a map, if this becomes and issue, and
> the
> > memory overhead of hashmap is less so.
> >
> >
> >
> >
> > On 22/02/2017, 15:56, "isma...@gmail.com on behalf of Ismael Juma" <
> > isma...@gmail.com on behalf of ism...@juma.me.uk> wrote:
> >
> >     Hi all,
> >
> >     Great to see the progress that has been achieved on this one. :) A
> few
> >     comments regarding the APIs (I'm still reviewing the message format
> >     changes):
> >
> >     1. Nit: `getHeaders` in `ProducerRecord` and `ConsumerRecord` should
> be
> >     named `headers` (we avoid the `get` prefix in Kafka)
> >
> >     2. The `Headers` class is mutable (there's an `add` method). Does it
> > need
> >     to be? If so, it would be good to explain why. Related to that, we
> > should
> >     also explain the thinking around thread-safety. If we keep the `add`
> >     method, it may make sense for it to take a `Header` (that way we can
> > add
> >     things to `Header` without changing the interface).
> >
> >     3. Do we need the `Headers.get()` method? People usually assume that
> > `get`
> >     would be efficient, but depending on the implementation (the current
> >     proposal states that an array would be used), it may not be. If we
> > expect
> >     the number of headers to be small, it doesn't matter though.
> >
> >     Ismael
> >
> >     On Tue, Feb 21, 2017 at 6:38 PM, Michael Pearce <
> michael.pea...@ig.com
> > >
> >     wrote:
> >
> >     > Hi Jason,
> >     >
> >     > Have converted the interface/api bullets into interface code
> > snippets.
> >     >
> >     > Agreed implementation won’t take too long. We have early versions
> > already.
> >     > Maybe a week before you think about merging I would assume it would
> > be more
> >     > stabilised? I was thinking then we could fork from your confluent
> > branch,
> >     > making and then holding KIP-82 changes in a patch file, that we can
> > then
> >     > re-fork from apache once KIP98 final is merged, and apply patch
> with
> > last
> >     > minute changes.
> >     >
> >     > Cheers
> >     > Mike
> >     >
> >     >
> >     > On 22/02/2017, 00:56, "Jason Gustafson" <ja...@confluent.io>
> wrote:
> >     >
> >     >     Hey Michael,
> >     >
> >     >     Awesome. I have a minor request. The APIs are currently
> > documented as a
> >     >     wiki list. Would you mind adding a code snippet instead? It's a
> > bit
> >     > easier
> >     >     to process.
> >     >
> >     >     How will be best to manage this, as we will obviously build off
> > your
> >     > KIP’s
> >     >     > protocol changes, to avoid a merge hell, should we branch
> from
> > your
> >     > branch
> >     >     > in the confluent repo or is it worth having a KIP-98 special
> > branch
> >     > in the
> >     >     > apache git, that we can branch/fork from?
> >     >
> >     >
> >     >     I was thinking about this also. Ideally we'd like to get the
> > changes
> >     > in as
> >     >     close together as possible since we only want one magic bump
> and
> > some
> >     > users
> >     >     deploy trunk. The level of effort to change the format for
> > headers
> >     > seems
> >     >     not too high. Do you agree? My guess is that the KIP-98 message
> > format
> >     >     patch will take 2-3 weeks to review before we merge to trunk,
> so
> > you
> >     > could
> >     >     hold off implementing until that patch has somewhat stabilized.
> > That
> >     > would
> >     >     save some potential rebase pain.
> >     >
> >     >     -Jason
> >     >
> >     >
> >     > The information contained in this email is strictly confidential
> and
> > for
> >     > the use of the addressee only, unless otherwise indicated. If you
> > are not
> >     > the intended recipient, please do not read, copy, use or disclose
> to
> > others
> >     > this message or any attachment. Please also notify the sender by
> > replying
> >     > to this email or by telephone (+44(020 7896 0011) and then delete
> the
> >     > email and any copies of it. Opinions, conclusion (etc) that do not
> > relate
> >     > to the official business of this company shall be understood as
> > neither
> >     > given nor endorsed by it. IG is a trading name of IG Markets
> Limited
> > (a
> >     > company registered in England and Wales, company number 04008957)
> > and IG
> >     > Index Limited (a company registered in England and Wales, company
> > number
> >     > 01190902). Registered address at Cannon Bridge House, 25 Dowgate
> > Hill,
> >     > London EC4R 2YA. Both IG Markets Limited (register number 195355)
> > and IG
> >     > Index Limited (register number 114059) are authorised and regulated
> > by the
> >     > Financial Conduct Authority.
> >     >
> >
> >
> > The information contained in this email is strictly confidential and for
> > the use of the addressee only, unless otherwise indicated. If you are not
> > the intended recipient, please do not read, copy, use or disclose to
> others
> > this message or any attachment. Please also notify the sender by replying
> > to this email or by telephone (+44(020 7896 0011) and then delete the
> email
> > and any copies of it. Opinions, conclusion (etc) that do not relate to
> the
> > official business of this company shall be understood as neither given
> nor
> > endorsed by it. IG is a trading name of IG Markets Limited (a company
> > registered in England and Wales, company number 04008957) and IG Index
> > Limited (a company registered in England and Wales, company number
> > 01190902). Registered address at Cannon Bridge House, 25 Dowgate Hill,
> > London EC4R 2YA. Both IG Markets Limited (register number 195355) and IG
> > Index Limited (register number 114059) are authorised and regulated by
> the
> > Financial Conduct Authority.
> >
> The information contained in this email is strictly confidential and for
> the use of the addressee only, unless otherwise indicated. If you are not
> the intended recipient, please do not read, copy, use or disclose to others
> this message or any attachment. Please also notify the sender by replying
> to this email or by telephone (+44(020 7896 0011) and then delete the email
> and any copies of it. Opinions, conclusion (etc) that do not relate to the
> official business of this company shall be understood as neither given nor
> endorsed by it. IG is a trading name of IG Markets Limited (a company
> registered in England and Wales, company number 04008957) and IG Index
> Limited (a company registered in England and Wales, company number
> 01190902). Registered address at Cannon Bridge House, 25 Dowgate Hill,
> London EC4R 2YA. Both IG Markets Limited (register number 195355) and IG
> Index Limited (register number 114059) are authorised and regulated by the
> Financial Conduct Authority.
>

Reply via email to