this kip fixes a "bug" (quirk?) that arises when people implement headers "in V" (in the payload part of a message). if you have proper headers you obviously dont need to to stick them in V and so wont run into this, but its still a valid issue.
On Mon, Dec 19, 2016 at 3:06 PM, Jay Kreps <j...@confluent.io> wrote: > Makes sense! > > -Jay > > On Mon, Dec 19, 2016 at 2:40 PM, Michael Pearce <michael.pea...@ig.com> > wrote: > > > Wow just read that def over tired. Hopefully it makes sense. Or you get > > the gist at least. > > > > ________________________________________ > > From: Michael Pearce <michael.pea...@ig.com> > > Sent: Monday, December 19, 2016 9:19:02 PM > > To: dev@kafka.apache.org > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > Hi Jay, > > > > Agreed this stemmed as offshoot from KIP-82. > > > > Which our main driver for was to be able to have some headers for a null > > value as such for our routing, audit, tracing and a few other bits which > > currently we are forced to do with a message wrapper, if we all agreed on > > KIP-82 that we need native headers and look to implement that the push > for > > this would dissipate. > > > > This KIP would allow for though one use case that comes to mind we could > > see which is to have business data with a delete. Though as said this > isn't > > something we are pushing for think really we would have. > > > > As such in summary yes, if you want to fully support KIP-82 and we can > get > > that agreed in principle and a target release version, I think quite a > few > > guys at LinkedIn are quite pro it too ;) I'm happy to drop this one. > > > > Cheers > > Mike > > > > Sent using OWA for iPhone > > ________________________________________ > > From: Jay Kreps <j...@confluent.io> > > Sent: Monday, December 19, 2016 8:51:23 PM > > To: dev@kafka.apache.org > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > Hey Michael, > > > > Here is the compatibility concern I have: > > > > 1. You have a consumer app that relies on value == null to indicate a > > delete (current semantics). > > 2. You upgrade Kafka and your clients. > > 3. Some producer starts using the tombstone field in combination with > > non-null. > > > > I share Ismael's dislike of setting tombstones on records with null > values. > > This makes sense as a transitional state, but as an end state its a bit > > weird. You'd expect to be able to mix null values and tombstones, and > have > > the null values remain and the tombstones get compacted. However what > will > > happen is both will be compacted and upon debugging this you'll learn > that > > we sometimes use null in the value to indicate tombstone. Ismael's > solution > > is a bigger compatibility break, though, so not sure if that is better. > > > > My other question is the relationship to KIP-82. My read is that this KIP > > solves some but not all of the problems KIP-82 is intended for. KIP-82, > on > > the other hand, seems to address most of the motivating uses for this > KIP. > > The exception is maybe item (5) on the list where you want to > simultaneous > > delete and convey some information to subscribers, but I couldn't > construct > > a concrete examples for that one. Do we need to rationalize these two > KIPs? > > That is, do you still advocate this proposal if we do KIP-82 and vice > > versa? As you may have noticed I'm somewhat emotionally invested in the > > simplicity of the core data model, so my default position is let's try to > > avoid stuffing more stuff in, but if we have to add stuff I like each of > > these individually more than doing both. :-) > > > > -Jay > > > > > > > > > > On Fri, Dec 16, 2016 at 12:16 PM, Michael Pearce <michael.pea...@ig.com> > > wrote: > > > > > Hi Jay > > > > > > I disagree here that we are breaking any compatibility, we went through > > > this on the discussion thread in fact with the help of that thread is > how > > > the kip came to the solution. > > > > > > Also on the supported combinations front you mention, we are not taking > > > anything away afaik. > > > > > > Currently supported are only are: > > > Null value = delete > > > Non-null value = non delete > > > > > > With this kip we would support > > > Null value + tombstone = delete > > > Non null value + tombstone = delete > > > Non null value + no tombstone = non delete > > > > > > As for the alternative idea, this is simply a new policy, how can there > > be > > > confusion here? For this policy it would be explicit that tombstone > > marker > > > would need to be set for a delete. > > > > > > I'm going to vent a little now as starting to get quite frustrated. > > > > > > We are going round in circles on kip-82 as per use cases there is now > > many > > > use cases, how many more are needed? just because confluent don't see > > these > > > doesn't mean they aren't real use cases other have, this is the point > of > > > the Apache foundation, it shouldn't be the view of just one > organisation. > > > It really is getting a feeling of the NIH syndrome. Rather than it > being > > > constructive on discussion of the implementation detail. > > > > > > kip-87 spawned from as on the kip call we all agreed this was needed. > And > > > would at least allow a custom wrapper be supported in a compacted > topic, > > > allowing meta data. Which again now I feel we are spinning wheels, and > > > simply finding reasons not support it. > > > > > > Cheers > > > Mike > > > > > > > > > > > > Sent using OWA for iPad > > > ________________________________________ > > > From: Jay Kreps <j...@confluent.io> > > > Sent: Friday, December 16, 2016 7:09:23 PM > > > To: dev@kafka.apache.org > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > > > Hey Michael, > > > > > > I do think it might have been better had we started with a separate > > concept > > > of null vs delete. Given that we are where we are, I'm not sure that > the > > > possible cures we explored so far are better than the disease. > > > > > > I apologize for coming to this late, but I didn't really understand the > > > implications of the KIP and that we'd be breaking compatibility with > > > existing apps until the vote had begun, and in my defense I'm not sure > > the > > > other folks voting did either. > > > > > > I think we all agree there are many existing apps that are built with > the > > > assumption of "null value non-tombstone" and it isn't possible to > > > disambiguate these from tombstones on the producer. It isn't that > anyone > > is > > > saying we have to support all four possibilities at once, it's that we > > > simply can't orphan one of the existing combinations or our users will > > eat > > > us! > > > > > > If I've understood your alternate solution of adding another setting > for > > > compaction, I think this does fix the compatibility problem, but it > adds > > an > > > odd mode the user has to add on all their topics. While the current > state > > > is easily explainable, the resulting state where the meaning of > tombstone > > > and null are overlapping and ambiguous and dependent on a compaction > > > setting that could change out of band or not be in sync with your code > in > > > some environment seems worse to me then where we currently are. I think > > the > > > question is how would this combination be explained to users and does > it > > > make sense? > > > > > > -Jay > > > > > > > > > > > > On Fri, Dec 16, 2016 at 9:25 AM, Michael Pearce <michael.pea...@ig.com > > > > > wrote: > > > > > > > Hi Chaps, > > > > > > > > Can we either get one more +1 binding (we have 2 already) on the > > > existing? > > > > > > > > Or have some response on the below possible alternative. We are keen > to > > > > get working on this, so we make next feature release. > > > > > > > > Cheers > > > > Mike > > > > > > > > > > > > On 13/12/2016, 16:32, "Michael Pearce" <michael.pea...@ig.com> > wrote: > > > > > > > > Hi Ismael > > > > > > > > Did you see our email this morning, what's your thoughts on this > > > > approach to instead we simply have a brand new policy? > > > > > > > > Cheers > > > > Mike > > > > > > > > > > > > Sent using OWA for iPhone > > > > ________________________________________ > > > > From: isma...@gmail.com <isma...@gmail.com> on behalf of Ismael > > > Juma < > > > > ism...@juma.me.uk> > > > > Sent: Tuesday, December 13, 2016 11:30:05 AM > > > > To: dev@kafka.apache.org > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > > > > > Yes, this is actually tricky to do in a way where we both have > the > > > > desired > > > > semantics and maintain compatibility. When someone creates a > > > > `ProducerRecord` with a `null` value today, the producer doesn't > > know > > > > if > > > > it's meant to be a tombstone or not. For V3 messages, it's easy > > when > > > > the > > > > constructor that takes a tombstone is used. However, if any other > > > > constructor is used, it's not clear. A couple of options I can > > think > > > > of, > > > > none of them particularly nice: > > > > > > > > 1. Have a third state where tombstone = unknown and the broker > > would > > > > set > > > > the tombstone bit if the value was null and the topic was > > compacted. > > > > People > > > > that wanted to pass a non-null value for the tombstone would have > > to > > > > use > > > > the constructor that takes a tombstone. The drawbacks: third > state > > > for > > > > tombstone in message format, message conversion at the broker > for a > > > > common > > > > case. > > > > > > > > 2. Extend MetadataResponse to optionally include topic configs, > > which > > > > would > > > > make it possible for the producer to be smarter about setting the > > > > tombstone. It would only do it if a tombstone was not passed > > > > explicitly, > > > > the value was null and the topic was compacted. The main drawback > > is > > > > that > > > > the producer would be getting a bit more data for each topic even > > > > though it > > > > probably won't use it most of the time. Extending > MetadataResponse > > to > > > > return topic configs would be useful for other reasons as well, > so > > > that > > > > part seems OK. > > > > > > > > In addition, for both proposals, we could consider adding > warnings > > to > > > > the > > > > documentation that the behaviour of the constructors that don't > > take > > > a > > > > tombstone would change in the next major release so that > tombstone > > = > > > > false. > > > > Not sure if this would be worth it though. > > > > > > > > Ismael > > > > > > > > On Sun, Dec 11, 2016 at 11:15 PM, Ewen Cheslack-Postava < > > > > e...@confluent.io> > > > > wrote: > > > > > > > > > Michael, > > > > > > > > > > It kind of depends on how you want to interpret the tombstone > > flag. > > > > If it's > > > > > purely a producer-facing Kafka-level thing that we treat as > > > internal > > > > to the > > > > > broker and log cleaner once the record is sent, then your > > approach > > > > makes > > > > > sense. You're just moving copying the null-indicates-delete > > > behavior > > > > of the > > > > > old constructor into the tombstone flag. > > > > > > > > > > However, if you want this change to more generally decouple the > > > idea > > > > of > > > > > deletion and null values, then you are sometimes converting > what > > > > might be a > > > > > completely valid null value that doesn't indicate deletion > into a > > > > > tombstone. Downstream applications could potentially handle > these > > > > cases > > > > > differently given the separation of deletion from value. > > > > > > > > > > I guess the question is if we want to try to support the latter > > > even > > > > for > > > > > topics where we have older produce requests. An example where > > this > > > > could > > > > > come up is in something like a CDC Connector. If we try to > > support > > > > the > > > > > semantic difference, a connector might write changes to Kafka > > using > > > > the > > > > > tombstone flag to indicate when a row was truly deleted (vs an > > > > update that > > > > > sets it to null but still present; this probably makes more > sense > > > > for CDC > > > > > from document stores or extracting single columns). There are > > > various > > > > > reasons we might want to maintain the full log and not turn > > > > compaction on > > > > > (or just use a time-based retention policy), but downstream > > > > applications > > > > > might care to know the difference between a delete and a null > > > value. > > > > In > > > > > fact both versions of the same log (compacted and > time-retention) > > > > could be > > > > > useful and I don't think it'll be uncommon to maintain both or > > use > > > > KIP-71 > > > > > to maintain a hybrid compacted/retention topic. > > > > > > > > > > -Ewen > > > > > > > > > > On Sun, Dec 11, 2016 at 1:18 PM, Michael Pearce < > > > > michael.pea...@ig.com> > > > > > wrote: > > > > > > > > > > > Hi Jay, > > > > > > > > > > > > Why wouldn't that work, the tombstone value is only looked at > > by > > > > the > > > > > > broker, on a topic configured for compaction as such is > benign > > on > > > > non > > > > > > compacted topics. This is as much as sending a null value > > > currently > > > > > > > > > > > > > > > > > > Regards > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > ________________________________________ > > > > > > From: Jay Kreps <j...@confluent.io> > > > > > > Sent: Sunday, December 11, 2016 8:58:53 PM > > > > > > To: dev@kafka.apache.org > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > > > > > > > > > Hey Michael, > > > > > > > > > > > > I'm not quite sure that works as that would translate ALL > null > > > > values to > > > > > > tombstones, even for non-compacted topics that use null as an > > > > acceptable > > > > > > value sent by the producer and expected by the consumer. > > > > > > > > > > > > -Jay > > > > > > > > > > > > On Sun, Dec 11, 2016 at 3:26 AM, Michael Pearce < > > > > michael.pea...@ig.com> > > > > > > wrote: > > > > > > > > > > > > > Hi Ewen, > > > > > > > > > > > > > > I think the easiest way to show this is with code. > > > > > > > > > > > > > > As you can see we keep the existing behaviour for > > code/binaries > > > > calling > > > > > > > the pre-existing constructors, whereby if the value is null > > the > > > > > tombstone > > > > > > > is set to true. > > > > > > > > > > > > > > Regards > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > > > > > /** > > > > > > > * Creates a record with a specified timestamp to be > sent > > > to > > > > a > > > > > > > specified topic and partition > > > > > > > * > > > > > > > * @param topic The topic the record will be appended > to > > > > > > > * @param partition The partition to which the record > > > should > > > > be > > > > > sent > > > > > > > * @param timestamp The timestamp of the record > > > > > > > * @param tombstone if the record should be treated as > a > > > > tombstone > > > > > if > > > > > > > the topic is compacted > > > > > > > * @param key The key that will be included in the > record > > > > > > > * @param value The record contents > > > > > > > */ > > > > > > > public ProducerRecord(String topic, Integer partition, > > > > Boolean > > > > > > > tombstone, Long timestamp, K key, V value) { > > > > > > > if (topic == null) > > > > > > > throw new IllegalArgumentException("Topic > cannot > > > be > > > > > null."); > > > > > > > if (timestamp != null && timestamp < 0) > > > > > > > throw new IllegalArgumentException( > > > > > > > String.format("Invalid timestamp: %d. > > > > Timestamp > > > > > > should > > > > > > > always be non-negative or null.", timestamp)); > > > > > > > if (partition != null && partition < 0) > > > > > > > throw new IllegalArgumentException( > > > > > > > String.format("Invalid partition: %d. > > > > Partition > > > > > > number > > > > > > > should always be non-negative or null.", partition)); > > > > > > > if (!tombstone && value == null){ > > > > > > > throw new IllegalArgumentException( > > > > > > > String.format("Tombstone must be true > if > > > null > > > > > > value")); > > > > > > > } > > > > > > > this.topic = topic; > > > > > > > this.partition = partition; > > > > > > > this.tombstone = tombstone; > > > > > > > this.key = key; > > > > > > > this.value = value; > > > > > > > this.timestamp = timestamp; > > > > > > > } > > > > > > > > > > > > > > public ProducerRecord(String topic, Integer partition, > > Long > > > > > > timestamp, > > > > > > > K key, V value) { > > > > > > > this(topic, partition, value == null, timestamp, > key, > > > > value); > > > > > > > } > > > > > > > ________________________________________ > > > > > > > From: Ewen Cheslack-Postava <e...@confluent.io> > > > > > > > Sent: Sunday, December 11, 2016 5:45 AM > > > > > > > To: dev@kafka.apache.org > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > > > > > > > > > > > It seemed like this was addressed in the migration section, > > > > wasn't it? > > > > > > The > > > > > > > V2 vs V3 requests and the fact that the broker will > downgrade > > > the > > > > > message > > > > > > > format (losing zero copy) if you issues a V2 request to a > > > broker > > > > using > > > > > V3 > > > > > > > format handles compatibility, does it not? The existing > > > > consumers won't > > > > > > see > > > > > > > the extra metadata in the value, but they will get a null > > > > instead and > > > > > > treat > > > > > > > it as a tombstone. Certainly there is a performance impact, > > but > > > > it > > > > > seemed > > > > > > > compatible. > > > > > > > > > > > > > > I'm worried about this though: > > > > > > > > > > > > > > > > > > > > > - *NOTE *: With the new version of producer client using > > > > > > ProduceRequest > > > > > > > V3 (magic byte = 2), a non tombstone (tombstone bit not > > set) > > > > and > > > > > null > > > > > > > value > > > > > > > should not be allowed as the older version of consumer > > using > > > > > > > FetchRequest > > > > > > > V2 will think of this as a tombstone when its actually > > not. > > > > > > > > > > > > > > > > > > > > > Unless I'm misunderstanding, this ends up breaking binary > > > > compatibility > > > > > > for > > > > > > > the Java API. It sounds like this suggests that passing a > > null > > > > value to > > > > > > the > > > > > > > existing ProducerRecord constructors would generate an > > > exception > > > > since > > > > > > you > > > > > > > didn't explicitly enable the tombstone (via whatever new > > > > constructor is > > > > > > > provided). But that means you can't swap in a newer client > > jar > > > > without > > > > > > > recompiling and get the same behavior if your app deletes > > keys > > > > using > > > > > the > > > > > > > current approach because your app will start throwing > > > > exceptions. Maybe > > > > > > > this is a tradeoff we're ok with, but we've tried pretty > hard > > > to > > > > avoid > > > > > > > breaking compatibility like this so far -- it makes picking > > up > > > > bug > > > > > fixes > > > > > > in > > > > > > > the clients harder for users of frameworks that have to pin > > to > > > > earlier > > > > > > > default versions for compatibility. > > > > > > > > > > > > > > But then later the KIP says: > > > > > > > > > > > > > > > > > > > > > - The old constructors for ProducerRecord without this > > > > parameter > > > > > will > > > > > > be > > > > > > > kept but updated so that their default behaviour if > > setting > > > > null > > > > > value > > > > > > > will > > > > > > > be the tombstone will be set to true to keep existing > > > > behaviour. > > > > > > > > > > > > > > > > > > > > > So maybe I am misinterpreting something. > > > > > > > > > > > > > > And just a nit re: motivation section, item 6 would be > > clearer > > > > for a > > > > > > union > > > > > > > schema with null (or optional schemas in other formats), > e.g. > > > > [null, > > > > > > > string], in which case losing the schema truly is losing > > > > information > > > > > > > (whereas null is already the only valid value for a pure > null > > > > schema). > > > > > > > > > > > > > > -Ewen > > > > > > > > > > > > > > > > > > > > > On Sat, Dec 10, 2016 at 9:24 PM, Michael Pearce < > > > > michael.pea...@ig.com > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > Hi Jay, > > > > > > > > > > > > > > > > Good point this detail is missing in the KIP write up. > Ive > > > > added this > > > > > > > now. > > > > > > > > > > > > > > > > Essentially simply just upgrading the clients we do not > > > expect > > > > any > > > > > > client > > > > > > > > app code change needed. > > > > > > > > > > > > > > > > Cheers > > > > > > > > Mike > > > > > > > > ________________________________________ > > > > > > > > From: Jay Kreps <j...@confluent.io> > > > > > > > > Sent: Saturday, December 10, 2016 10:51 PM > > > > > > > > To: dev@kafka.apache.org > > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone > Flag > > > > > > > > > > > > > > > > Michael, > > > > > > > > > > > > > > > > The compatibility section goes through the migration > path, > > > but > > > > isn't > > > > > > the > > > > > > > > bigger compatibility issue with existing apps? There are > > many > > > > > (probably > > > > > > > > thousands) of apps in production that use this feature > and > > > > send null > > > > > to > > > > > > > > mean delete. It seems like this would break compatibility > > > with > > > > them, > > > > > > and > > > > > > > > they would have to be rewritten to right? > > > > > > > > > > > > > > > > -Jay > > > > > > > > > > > > > > > > On Thu, Dec 8, 2016 at 12:12 AM, Michael Pearce < > > > > > michael.pea...@ig.com > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > Hi Jun, > > > > > > > > > > > > > > > > > > 4) On v3 we honour the tombstone. As such we expect it > to > > > be > > > > set > > > > > > > > correctly > > > > > > > > > as per the KIP. > > > > > > > > > > > > > > > > > > 4.1) why would we want to produce an error when its v3? > > > This > > > > is the > > > > > > > exact > > > > > > > > > purpose to support non-null tombstone's > > > > > > > > > 4.2) again here im unclear on the question on the v3, > > > produce > > > > > request > > > > > > > we > > > > > > > > > expect the tombstone flag to be set correctly. > > > > > > > > > > > > > > > > > > 4.4) compaction only occurs on compacted topics, the > bit > > > > makes no > > > > > > > > > difference and not looked at on un-compacted (time/size > > > based > > > > > > > eviction). > > > > > > > > > > > > > > > > > > > > > > > > > > > On 06/12/2016, 20:08, "Jun Rao" <j...@confluent.io> > > wrote: > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > 4. Then, I think I misunderstood this point. Could > > you > > > > document > > > > > > the > > > > > > > > > following points in the wiki? > > > > > > > > > 4.1 If producer V3 sets tombstone, but provides a > > > > non-null > > > > > value, > > > > > > > > does > > > > > > > > > the > > > > > > > > > send() get an error or does the producer > > automatically > > > > set the > > > > > > > value > > > > > > > > to > > > > > > > > > null? > > > > > > > > > 4.2 If producer V3 doesn't set tombstone, but > > provides > > > a > > > > null > > > > > > > value, > > > > > > > > > does > > > > > > > > > the send() get an error or does the producer > > > > automatically sets > > > > > > the > > > > > > > > > tombstone? > > > > > > > > > 4.3 Does the broker only expect messages that (a) > > have > > > no > > > > > > tombstone > > > > > > > > and > > > > > > > > > non-null value; (b) have tombstone and null value > and > > > > reject > > > > > the > > > > > > > > > messages > > > > > > > > > with an error code otherwise? > > > > > > > > > 4.4 Do 4.1, 4.2, 4.3 depend on whether the topic > is > > > > compacted > > > > > on > > > > > > > > not? > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > On Tue, Dec 6, 2016 at 10:35 AM, Michael Pearce < > > > > > > > > michael.pea...@ig.com > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > Not at all. This only acts on compacted topics > > just > > > > as what > > > > > > > occurs > > > > > > > > > today > > > > > > > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > > > > > ________________________________________ > > > > > > > > > > From: Jun Rao <j...@confluent.io> > > > > > > > > > > Sent: Tuesday, December 6, 2016 6:25:28 PM > > > > > > > > > > To: dev@kafka.apache.org > > > > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction > > Tombstone > > > > Flag > > > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > > > 4. Hmm, does that mean the new client library can > > > > never send > > > > > a > > > > > > > null > > > > > > > > > message > > > > > > > > > > even to a regular topic? This seems like a change > > of > > > > the > > > > > > existing > > > > > > > > > behavior. > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > > > On Tue, Dec 6, 2016 at 9:51 AM, Michael Pearce < > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > Hi Jun, > > > > > > > > > > > > > > > > > > > > > > Re 4) That's because we expect the tombstone > > value > > > > to be > > > > > set > > > > > > > > > correctly if > > > > > > > > > > > message bit is 2, as such if an older client > > sends > > > > in on > > > > > old > > > > > > > > > message the > > > > > > > > > > > message is upcast and the bit is set correctly. > > And > > > > such no > > > > > > > > longer > > > > > > > > > need > > > > > > > > > > to > > > > > > > > > > > check the value. Mayuresh can you confirm my > > > > thinking and > > > > > > > > > understanding > > > > > > > > > > of > > > > > > > > > > > what we've discussed? > > > > > > > > > > > > > > > > > > > > > > The second point I understand what you're > getting > > > at > > > > now my > > > > > > > > > apologies. > > > > > > > > > > Yes > > > > > > > > > > > this makes sense to save on touching the > message, > > > if > > > > we're > > > > > > the > > > > > > > > > only kip > > > > > > > > > > > going in, in this release. > > > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > > > > > > ________________________________________ > > > > > > > > > > > From: Jun Rao <j...@confluent.io> > > > > > > > > > > > Sent: Tuesday, December 6, 2016 5:22:13 PM > > > > > > > > > > > To: dev@kafka.apache.org > > > > > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction > > > > Tombstone Flag > > > > > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > > > > > 4. Is this updated in the wiki? The text "If > the > > > > magic byte > > > > > > on > > > > > > > > > message is > > > > > > > > > > > 2, the broker should use the tombstone bit for > > log > > > > > > compaction." > > > > > > > > > doesn't > > > > > > > > > > > seem to have changed. > > > > > > > > > > > > > > > > > > > > > > 2. My point is that if we change the message > > format > > > > just > > > > > for > > > > > > > this > > > > > > > > > KIP, we > > > > > > > > > > > should consider whether it's worth optimizing > the > > > > down > > > > > > > conversion > > > > > > > > > path > > > > > > > > > > > (i.e., decide whether a conversion is needed by > > > just > > > > > looking > > > > > > at > > > > > > > > the > > > > > > > > > > > tombstone bit in the wrapper message) since > > > > tombstone will > > > > > be > > > > > > > > used > > > > > > > > > > rarely. > > > > > > > > > > > However, if the message format change here is > > > > combined with > > > > > > > other > > > > > > > > > KIPs, > > > > > > > > > > > then this optimization likely won't be needed. > > The > > > > latter > > > > > > > > probably > > > > > > > > > makes > > > > > > > > > > > the code simpler. Jiangjie, Mayuresh, what do > you > > > > think? > > > > > > > > > > > > > > > > > > > > > > Other than those, +1 from me, > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > > > > > On Tue, Dec 6, 2016 at 8:54 AM, Michael Pearce > < > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > Hi Jun > > > > > > > > > > > > > > > > > > > > > > > > do we have your vote on this now? > > > > > > > > > > > > > > > > > > > > > > > > Any other concerns? > > > > > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > > > > > > > ________________________________________ > > > > > > > > > > > > From: Michael Pearce <michael.pea...@ig.com> > > > > > > > > > > > > Sent: Saturday, December 3, 2016 1:37:45 AM > > > > > > > > > > > > To: dev@kafka.apache.org > > > > > > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction > > > > Tombstone > > > > > Flag > > > > > > > > > > > > > > > > > > > > > > > > Hi Jun, > > > > > > > > > > > > > > > > > > > > > > > > Have updated. Thanks again for the feedback. > > > > > > > > > > > > > > > > > > > > > > > > Agree yes we should align up when it gets to > > > that, > > > > I > > > > > assume > > > > > > > > > you've > > > > > > > > > > > flagged > > > > > > > > > > > > the same in the other KIP? > > > > > > > > > > > > > > > > > > > > > > > > I think for now let's get this KIP approved, > > then > > > > we can > > > > > > > start > > > > > > > > > the work > > > > > > > > > > > to > > > > > > > > > > > > get an initial PR, then we can discuss how to > > > > align the > > > > > two > > > > > > > if > > > > > > > > > needed. > > > > > > > > > > > > > > > > > > > > > > > > Cheers, > > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > On 02/12/2016, 18:26, "Jun Rao" < > > > j...@confluent.io> > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > > > > > > > For 2), this is fine. Could you update > the > > > KIP > > > > wiki > > > > > to > > > > > > > make > > > > > > > > > this > > > > > > > > > > and > > > > > > > > > > > > other > > > > > > > > > > > > points clearer? Other than that, the KIP > > > looks > > > > good > > > > > to > > > > > > > me. > > > > > > > > > > > > > > > > > > > > > > > > An orthogonal thing is that there are > other > > > > KIPs such > > > > > > as > > > > > > > > > KIP-98 > > > > > > > > > > that > > > > > > > > > > > > also > > > > > > > > > > > > intend to change the message format. If > > they > > > > all get > > > > > > > > > approved, we > > > > > > > > > > > > should > > > > > > > > > > > > think about whether it's better to just > > bump > > > > up the > > > > > > magic > > > > > > > > > byte once > > > > > > > > > > > to > > > > > > > > > > > > incorporate multiple format changes like > we > > > > did in > > > > > > > > > KIP-31/KIP-32. > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Dec 2, 2016 at 3:19 AM, Michael > > > Pearce > > > > < > > > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > Hi Jao > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks for the response. Sorry for slow > > > > reply, both > > > > > > > with > > > > > > > > > personal > > > > > > > > > > > > sickness > > > > > > > > > > > > > and also battling some critical issues > > > > encountered > > > > > > > since > > > > > > > > > > upgrading > > > > > > > > > > > to > > > > > > > > > > > > > 0.10.1.0 > > > > > > > > > > > > > > > > > > > > > > > > > > 1) Thans for spotting, Document error > > where > > > > we > > > > > > branched > > > > > > > > > this KIP > > > > > > > > > > > from > > > > > > > > > > > > > KIP-82, will get that removed. > > > > > > > > > > > > > 2) Intent is to do this just at the > > record > > > > message > > > > > > > level. > > > > > > > > > > > > > 3) Thanks for spotting, Will ensure > this > > is > > > > > > corrected. > > > > > > > > > > > > > 4) As per discussion thread we will > > support > > > > > > tombstone + > > > > > > > > > null > > > > > > > > > > value, > > > > > > > > > > > > > tombstone + non null value, no > tombstone > > + > > > > null > > > > > > value. > > > > > > > > > > > > > 5) I believe this was in the discussion > > > > thread, > > > > > > > @Mayuresh > > > > > > > > > is this > > > > > > > > > > > > > something we've overlooked? I thought > we > > > > would down > > > > > > > > > convert and > > > > > > > > > > > > remove the > > > > > > > > > > > > > value so the old consumer had existing > > > > behavior, or > > > > > > is > > > > > > > > > there > > > > > > > > > > > > something we > > > > > > > > > > > > > haven't thought about? > > > > > > > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > > > On 30/11/2016, 18:12, "Jun Rao" < > > > > j...@confluent.io> > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks for the KIP. A few comments > > > below. > > > > > > > > > > > > > > > > > > > > > > > > > > 1. The message format change > contains > > > > > > > "HeadersLength > > > > > > > > > > Headers". > > > > > > > > > > > > Is that > > > > > > > > > > > > > intended? > > > > > > > > > > > > > > > > > > > > > > > > > > 2. For compressed messageset, is > the > > > > tombstone > > > > > > bit > > > > > > > > > only set > > > > > > > > > > at > > > > > > > > > > > > the > > > > > > > > > > > > > shallow > > > > > > > > > > > > > level? Do we always leave that bit > in > > > the > > > > > wrapper > > > > > > > > > message > > > > > > > > > > > unset? > > > > > > > > > > > > An > > > > > > > > > > > > > alternative is to set the tombstone > > bit > > > > in the > > > > > > > > wrapper > > > > > > > > > if at > > > > > > > > > > > > least one > > > > > > > > > > > > > inner message has the tombstone bit > > > set. > > > > This > > > > > > makes > > > > > > > > > things a > > > > > > > > > > > bit > > > > > > > > > > > > more > > > > > > > > > > > > > complicated, but we could > potentially > > > > exploit > > > > > > that > > > > > > > > for > > > > > > > > > > > > optimizing down > > > > > > > > > > > > > conversion. For example, we only > need > > > to > > > > > convert > > > > > > > > > messages > > > > > > > > > > with > > > > > > > > > > > > magic 2 > > > > > > > > > > > > > to > > > > > > > > > > > > > magic 1 if the wrapper's tombstone > > bit > > > > is set > > > > > > > > > (conversion is > > > > > > > > > > > > always > > > > > > > > > > > > > needed > > > > > > > > > > > > > from magic 2 to magic 0). Not sure > if > > > the > > > > > > > > optimization > > > > > > > > > is > > > > > > > > > > worth > > > > > > > > > > > > the > > > > > > > > > > > > > complexity though. > > > > > > > > > > > > > > > > > > > > > > > > > > 3. The referencing of the new > version > > > of > > > > > > > > > > > > ProducerRequest/FetchRequest > > > > > > > > > > > > > is > > > > > > > > > > > > > inconsistent (v4 vs v3). Since our > > > > convention > > > > > > > starts > > > > > > > > at > > > > > > > > > > version > > > > > > > > > > > > at 0, I > > > > > > > > > > > > > think the new version would be 3. > > > > > > > > > > > > > > > > > > > > > > > > > > 4. "If the magic byte on message is > > 2, > > > > the > > > > > broker > > > > > > > > > should use > > > > > > > > > > > the > > > > > > > > > > > > > tombstone > > > > > > > > > > > > > bit for log compaction." What about > > > null > > > > value? > > > > > > My > > > > > > > > > > > understanding > > > > > > > > > > > > is > > > > > > > > > > > > > that > > > > > > > > > > > > > null value will be treated the same > > as > > > > setting > > > > > > the > > > > > > > > > tombstone > > > > > > > > > > > bit. > > > > > > > > > > > > > > > > > > > > > > > > > > 5. For the migration path, it would > > be > > > > useful > > > > > to > > > > > > > > > describe the > > > > > > > > > > > > down > > > > > > > > > > > > > conversion path to consumers (i.e., > > > > brokers on > > > > > > > > message > > > > > > > > > format > > > > > > > > > > > > 0.10.2 > > > > > > > > > > > > > and > > > > > > > > > > > > > consumers on older version). > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Nov 29, 2016 at 3:18 AM, > > > Michael > > > > > Pearce < > > > > > > > > > > > > michael.pea...@ig.com > > > > > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi All, > > > > > > > > > > > > > > > > > > > > > > > > > > > > We have been discussing in the > > below > > > > thread > > > > > and > > > > > > > > final > > > > > > > > > > changes > > > > > > > > > > > > have > > > > > > > > > > > > > been > > > > > > > > > > > > > > made to the KIP wiki based on > these > > > > > > discussions. > > > > > > > > > > > > > > > > > > > > > > > > > > > > We would now like to put to the > > vote > > > > the > > > > > > > following > > > > > > > > > KIP: > > > > > > > > > > > > > > https://cwiki.apache.org/ > > > > > > > > > confluence/display/KAFKA/KIP- > > > > > > > > > > 87+-+ > > > > > > > > > > > > > > Add+Compaction+Tombstone+Flag > > > > > > > > > > > > > > > > > > > > > > > > > > > > This kip is for having a distinct > > > > compaction > > > > > > > > > attribute > > > > > > > > > > > > "tombstone" > > > > > > > > > > > > > flag > > > > > > > > > > > > > > instead of relying on null value, > > > > allowing > > > > > > > non-null > > > > > > > > > value > > > > > > > > > > > > delete > > > > > > > > > > > > > messages. > > > > > > > > > > > > > > > > > > > > > > > > > > > > Many thanks, > > > > > > > > > > > > > > Michael > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 22/11/2016, 15:52, "Michael > > > Pearce" > > > > < > > > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Mayuresh, > > > > > > > > > > > > > > > > > > > > > > > > > > > > LGTM. Ive just made one small > > > > adjustment > > > > > > > > > updating the > > > > > > > > > > > wire > > > > > > > > > > > > > protocol to > > > > > > > > > > > > > > show the magic byte bump. > > > > > > > > > > > > > > > > > > > > > > > > > > > > Do we think we're good to put > > to > > > a > > > > vote? > > > > > Is > > > > > > > > > there any > > > > > > > > > > > > other bits > > > > > > > > > > > > > > needing discussion? > > > > > > > > > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 21/11/2016, 18:26, > "Mayuresh > > > > Gharat" < > > > > > > > > > > > > > gharatmayures...@gmail.com> > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Michael, > > > > > > > > > > > > > > > > > > > > > > > > > > > > I have updated the > > migration > > > > section > > > > > of > > > > > > > the > > > > > > > > > KIP. > > > > > > > > > > Can > > > > > > > > > > > > you > > > > > > > > > > > > > please > > > > > > > > > > > > > > take a look? > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > > > > > > > Mayuresh > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Nov 18, 2016 at > > 9:07 > > > > AM, > > > > > > Mayuresh > > > > > > > > > Gharat < > > > > > > > > > > > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Michael, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > That whilst sending > > > > tombstone and > > > > > non > > > > > > > > null > > > > > > > > > value, > > > > > > > > > > > the > > > > > > > > > > > > > consumer > > > > > > > > > > > > > > can expect > > > > > > > > > > > > > > > only to receive the > > > non-null > > > > > message > > > > > > > only > > > > > > > > > in step > > > > > > > > > > > > (3) is > > > > > > > > > > > > > this > > > > > > > > > > > > > > correct? > > > > > > > > > > > > > > > ---> I do agree with > you > > > > here. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Becket, Ismael : can > you > > > guys > > > > > review > > > > > > > the > > > > > > > > > > migration > > > > > > > > > > > > plan > > > > > > > > > > > > > listed > > > > > > > > > > > > > > above using > > > > > > > > > > > > > > > magic byte? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Mayuresh > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Nov 18, 2016 at > > > 8:58 > > > > AM, > > > > > > > Michael > > > > > > > > > Pearce < > > > > > > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> Many thanks for this > > > > Mayuresh. I > > > > > > don't > > > > > > > > > have any > > > > > > > > > > > > > objections. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> I assume we should > > state: > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> That whilst sending > > > > tombstone and > > > > > > non > > > > > > > > null > > > > > > > > > > value, > > > > > > > > > > > > the > > > > > > > > > > > > > consumer > > > > > > > > > > > > > > can expect > > > > > > > > > > > > > > >> only to receive the > > > non-null > > > > > message > > > > > > > > only > > > > > > > > > in > > > > > > > > > > step > > > > > > > > > > > > (3) is > > > > > > > > > > > > > this > > > > > > > > > > > > > > correct? > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Cheers > > > > > > > > > > > > > > >> Mike > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Sent using OWA for > > iPhone > > > > > > > > > > > > > > >> > > > > ______________________________ > > > > > > > > __________ > > > > > > > > > > > > > > >> From: Mayuresh Gharat > < > > > > > > > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > > > > > > > > > > > > > > >> Sent: Thursday, > November > > > > 17, 2016 > > > > > > > > 5:18:41 > > > > > > > > > PM > > > > > > > > > > > > > > >> To: > > dev@kafka.apache.org > > > > > > > > > > > > > > >> Subject: Re: [DISCUSS] > > > > KIP-87 - > > > > > Add > > > > > > > > > Compaction > > > > > > > > > > > > Tombstone > > > > > > > > > > > > > Flag > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Hi Ismael, > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Thanks for the > > > explanation. > > > > > > > > > > > > > > >> Specially I like this > > part > > > > where > > > > > in > > > > > > > you > > > > > > > > > > mentioned > > > > > > > > > > > > we can > > > > > > > > > > > > > get > > > > > > > > > > > > > > rid of the > > > > > > > > > > > > > > >> older null value > support > > > > for log > > > > > > > > > compaction > > > > > > > > > > later > > > > > > > > > > > > on, > > > > > > > > > > > > > here : > > > > > > > > > > > > > > >> We can't change > > semantics > > > > of the > > > > > > > message > > > > > > > > > format > > > > > > > > > > > > without > > > > > > > > > > > > > having > > > > > > > > > > > > > > a long > > > > > > > > > > > > > > >> transition period. And > > we > > > > can't > > > > > rely > > > > > > > > > > > > > > >> on people reading > > > > documentation or > > > > > > > > acting > > > > > > > > > on a > > > > > > > > > > > > warning for > > > > > > > > > > > > > > something so > > > > > > > > > > > > > > >> fundamental. As such, > my > > > > take is > > > > > > that > > > > > > > we > > > > > > > > > need to > > > > > > > > > > > > bump the > > > > > > > > > > > > > magic > > > > > > > > > > > > > > byte. The > > > > > > > > > > > > > > >> good news is > > > > > > > > > > > > > > >> that we don't have to > > > > support all > > > > > > > > versions > > > > > > > > > > > forever. > > > > > > > > > > > > We > > > > > > > > > > > > > have > > > > > > > > > > > > > > said that we > > > > > > > > > > > > > > >> will support direct > > > > upgrades for 2 > > > > > > > > years. > > > > > > > > > That > > > > > > > > > > > > means that > > > > > > > > > > > > > > message format > > > > > > > > > > > > > > >> version n could, in > > > theory, > > > > be > > > > > > > removed 2 > > > > > > > > > years > > > > > > > > > > > > after the > > > > > > > > > > > > > it's > > > > > > > > > > > > > > introduced. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Just a heads up, I > would > > > > like to > > > > > > > mention > > > > > > > > > that > > > > > > > > > > even > > > > > > > > > > > > without > > > > > > > > > > > > > > bumping magic > > > > > > > > > > > > > > >> byte, we will *NOT* > > loose > > > > zero > > > > > copy > > > > > > as > > > > > > > > in > > > > > > > > > the > > > > > > > > > > > > client(x+1) > > > > > > > > > > > > > in my > > > > > > > > > > > > > > >> explanation > > > > > > > > > > > > > > >> above will convert > > > > internally a > > > > > null > > > > > > > > > value to > > > > > > > > > > > have a > > > > > > > > > > > > > tombstone > > > > > > > > > > > > > > bit set and > > > > > > > > > > > > > > >> a tombstone bit set to > > > have > > > > a null > > > > > > > value > > > > > > > > > > > > automatically > > > > > > > > > > > > > > internally and by > > > > > > > > > > > > > > >> the time we move to > > > version > > > > (x+2), > > > > > > the > > > > > > > > > clients > > > > > > > > > > > > would have > > > > > > > > > > > > > > upgraded. > > > > > > > > > > > > > > >> Obviously if we > support > > a > > > > request > > > > > > from > > > > > > > > > > > consumer(x), > > > > > > > > > > > > we > > > > > > > > > > > > > will > > > > > > > > > > > > > > loose zero > > > > > > > > > > > > > > >> copy > > > > > > > > > > > > > > >> but that is the same > > case > > > > with > > > > > magic > > > > > > > > byte. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> But if magic byte bump > > > > makes life > > > > > > > easier > > > > > > > > > for > > > > > > > > > > > > transition > > > > > > > > > > > > > for the > > > > > > > > > > > > > > above > > > > > > > > > > > > > > >> reasons that you > > > explained, > > > > I am > > > > > OK > > > > > > > with > > > > > > > > > it > > > > > > > > > > since > > > > > > > > > > > > we are > > > > > > > > > > > > > going > > > > > > > > > > > > > > to meet the > > > > > > > > > > > > > > >> end goal down the road > > :) > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> On a side note can we > > > > update the > > > > > doc > > > > > > > > here > > > > > > > > > on > > > > > > > > > > magic > > > > > > > > > > > > byte > > > > > > > > > > > > > to say > > > > > > > > > > > > > > that "*it > > > > > > > > > > > > > > >> should be bumped > > whenever > > > > the > > > > > > message > > > > > > > > > format is > > > > > > > > > > > > changed > > > > > > > > > > > > > or the > > > > > > > > > > > > > > >> interpretation of > > message > > > > format > > > > > > > (usage > > > > > > > > > of the > > > > > > > > > > > > reserved > > > > > > > > > > > > > bits as > > > > > > > > > > > > > > well) is > > > > > > > > > > > > > > >> changed*". > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Hi Michael, > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Here is the update > plan > > > > that we > > > > > > > > discussed > > > > > > > > > > offline > > > > > > > > > > > > > yesterday : > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Currently the > magic-byte > > > > which > > > > > > > > > corresponds to > > > > > > > > > > the > > > > > > > > > > > > > > "message.format.version" > > > > > > > > > > > > > > >> is set to 1. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> 1) On broker it will > be > > > set > > > > to 1 > > > > > > > > > initially. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> 2) When a producer > > client > > > > sends a > > > > > > > > message > > > > > > > > > with > > > > > > > > > > > > magic-byte > > > > > > > > > > > > > = 2, > > > > > > > > > > > > > > since the > > > > > > > > > > > > > > >> broker is on > magic-byte > > = > > > > 1, we > > > > > will > > > > > > > > down > > > > > > > > > > convert > > > > > > > > > > > > it, > > > > > > > > > > > > > which > > > > > > > > > > > > > > means if the > > > > > > > > > > > > > > >> tombstone bit is set, > > the > > > > value > > > > > will > > > > > > > be > > > > > > > > > set to > > > > > > > > > > > > null. A > > > > > > > > > > > > > consumer > > > > > > > > > > > > > > >> understanding > > magic-byte = > > > > 1, will > > > > > > > still > > > > > > > > > work > > > > > > > > > > with > > > > > > > > > > > > this. A > > > > > > > > > > > > > > consumer > > > > > > > > > > > > > > >> working > > > > > > > > > > > > > > >> with magic-byte =2 > will > > > > also be > > > > > able > > > > > > > to > > > > > > > > > > understand > > > > > > > > > > > > this, > > > > > > > > > > > > > since > > > > > > > > > > > > > > it > > > > > > > > > > > > > > >> understands the > > tombstone. > > > > > > > > > > > > > > >> Now there is still the > > > > question of > > > > > > > > > supporting a > > > > > > > > > > > > > non-tombstone > > > > > > > > > > > > > > and null > > > > > > > > > > > > > > >> value from producer > > client > > > > with > > > > > > > > > magic-byte = 2.* > > > > > > > > > > > (I > > > > > > > > > > > > am > > > > > > > > > > > > > not sure > > > > > > > > > > > > > > if we > > > > > > > > > > > > > > >> should support this. > > > > Ismael/Becket > > > > > > can > > > > > > > > > comment > > > > > > > > > > > > here)* > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> 3) When almost all the > > > > clients > > > > > have > > > > > > > > > upgraded, > > > > > > > > > > the > > > > > > > > > > > > > > message.format.version > > > > > > > > > > > > > > >> on > > > > > > > > > > > > > > >> the broker can be > > changed > > > > to 2, > > > > > > where > > > > > > > in > > > > > > > > > the > > > > > > > > > > down > > > > > > > > > > > > > conversion in > > > > > > > > > > > > > > the above > > > > > > > > > > > > > > >> step will not happen. > If > > > at > > > > this > > > > > > point > > > > > > > > we > > > > > > > > > get a > > > > > > > > > > > > consumer > > > > > > > > > > > > > > request from a > > > > > > > > > > > > > > >> older consumer, we > might > > > > have to > > > > > > down > > > > > > > > > convert > > > > > > > > > > > where > > > > > > > > > > > > in we > > > > > > > > > > > > > loose > > > > > > > > > > > > > > zero copy, > > > > > > > > > > > > > > >> but these cases should > > be > > > > rare. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Becket can you review > > this > > > > plan > > > > > and > > > > > > > add > > > > > > > > > more > > > > > > > > > > > > details if I > > > > > > > > > > > > > have > > > > > > > > > > > > > > >> missed/wronged > > something, > > > > before > > > > > we > > > > > > > put > > > > > > > > > it on > > > > > > > > > > KIP. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Thanks, > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> Mayuresh > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> On Wed, Nov 16, 2016 > at > > > > 11:07 PM, > > > > > > > > Michael > > > > > > > > > > Pearce < > > > > > > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > > > > >> wrote: > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > Thanks guys, for > > > > discussing this > > > > > > > > > offline and > > > > > > > > > > > > getting > > > > > > > > > > > > > some > > > > > > > > > > > > > > consensus. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > So its clear for > > myself > > > > and > > > > > others > > > > > > > > what > > > > > > > > > is > > > > > > > > > > > > proposed now > > > > > > > > > > > > > (i > > > > > > > > > > > > > > think i > > > > > > > > > > > > > > >> > understand, but want > > to > > > > make > > > > > sure) > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > Could i ask either > > > > directly > > > > > update > > > > > > > the > > > > > > > > > kip to > > > > > > > > > > > > detail the > > > > > > > > > > > > > > migration > > > > > > > > > > > > > > >> > strategy, or > > (re-)state > > > > your > > > > > > offline > > > > > > > > > discussed > > > > > > > > > > > and > > > > > > > > > > > > > agreed > > > > > > > > > > > > > > migration > > > > > > > > > > > > > > >> > strategy based on a > > > magic > > > > byte > > > > > is > > > > > > in > > > > > > > > > this > > > > > > > > > > > thread. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > The main original > > driver > > > > for the > > > > > > KIP > > > > > > > > > was to > > > > > > > > > > > > support > > > > > > > > > > > > > > compaction where > > > > > > > > > > > > > > >> value > > > > > > > > > > > > > > >> > isn't null, based > off > > > the > > > > > > > discussions > > > > > > > > on > > > > > > > > > > KIP-82 > > > > > > > > > > > > thread. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > We should be able to > > > > support > > > > > > > > > non-tombstone + > > > > > > > > > > > null > > > > > > > > > > > > value > > > > > > > > > > > > > by the > > > > > > > > > > > > > > >> completion > > > > > > > > > > > > > > >> > of the KIP, as we > > noted > > > > when > > > > > > > > discussing > > > > > > > > > this > > > > > > > > > > > kip, > > > > > > > > > > > > having > > > > > > > > > > > > > > logic based on > > > > > > > > > > > > > > >> a > > > > > > > > > > > > > > >> > null value isn't > very > > > > clean and > > > > > > also > > > > > > > > > separates > > > > > > > > > > > the > > > > > > > > > > > > > concerns. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > As discussed already > > > > though we > > > > > can > > > > > > > > > split this > > > > > > > > > > > into > > > > > > > > > > > > > KIP-87a > > > > > > > > > > > > > > and KIP-87b > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > Where we look to > > deliver > > > > KIP-87a > > > > > > on > > > > > > > a > > > > > > > > > > compacted > > > > > > > > > > > > topic > > > > > > > > > > > > > (to > > > > > > > > > > > > > > address the > > > > > > > > > > > > > > >> > immediate issues) > > > > > > > > > > > > > > >> > * tombstone + null > > value > > > > > > > > > > > > > > >> > * tombstone + > non-null > > > > value > > > > > > > > > > > > > > >> > * non-tombstone + > > > > non-null value > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > Then we can discuss > > once > > > > KIP-87a > > > > > > is > > > > > > > > > completed > > > > > > > > > > > > options > > > > > > > > > > > > > later > > > > > > > > > > > > > > and how we > > > > > > > > > > > > > > >> > support the second > > part > > > > KIP-87b > > > > > to > > > > > > > > > deliver: > > > > > > > > > > > > > > >> > * non-tombstone + > null > > > > value > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > Cheers > > > > > > > > > > > > > > >> > Mike > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > ______________________________ > > > > > > > > > __________ > > > > > > > > > > > > > > >> > From: Becket Qin < > > > > > > > > becket....@gmail.com> > > > > > > > > > > > > > > >> > Sent: Thursday, > > November > > > > 17, > > > > > 2016 > > > > > > > 1:43 > > > > > > > > > AM > > > > > > > > > > > > > > >> > To: > > > dev@kafka.apache.org > > > > > > > > > > > > > > >> > Subject: Re: > [DISCUSS] > > > > KIP-87 - > > > > > > Add > > > > > > > > > Compaction > > > > > > > > > > > > > Tombstone Flag > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > Renu, Mayuresh and I > > had > > > > an > > > > > > offline > > > > > > > > > > discussion, > > > > > > > > > > > > and > > > > > > > > > > > > > following > > > > > > > > > > > > > > is a brief > > > > > > > > > > > > > > >> > summary. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > 1. We agreed that > not > > > > bumping up > > > > > > > magic > > > > > > > > > value > > > > > > > > > > may > > > > > > > > > > > > result > > > > > > > > > > > > > in > > > > > > > > > > > > > > losing zero > > > > > > > > > > > > > > >> copy > > > > > > > > > > > > > > >> > during migration. > > > > > > > > > > > > > > >> > 2. Given that > bumping > > up > > > > magic > > > > > > value > > > > > > > > is > > > > > > > > > almost > > > > > > > > > > > > free and > > > > > > > > > > > > > has > > > > > > > > > > > > > > benefit of > > > > > > > > > > > > > > >> > avoiding potential > > > > performance > > > > > > > issue. > > > > > > > > > It is > > > > > > > > > > > > probably > > > > > > > > > > > > > worth > > > > > > > > > > > > > > doing. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > One issue we still > > need > > > > to think > > > > > > > about > > > > > > > > > is > > > > > > > > > > > whether > > > > > > > > > > > > we > > > > > > > > > > > > > want to > > > > > > > > > > > > > > support a > > > > > > > > > > > > > > >> > non-tombstone > message > > > > with null > > > > > > > value. > > > > > > > > > > > > > > >> > Currently it is not > > > > supported by > > > > > > > > Kafka. > > > > > > > > > If we > > > > > > > > > > > > allow a > > > > > > > > > > > > > > non-tombstone null > > > > > > > > > > > > > > >> > value message to > exist > > > > after > > > > > > KIP-87. > > > > > > > > The > > > > > > > > > > problem > > > > > > > > > > > > is > > > > > > > > > > > > > that such > > > > > > > > > > > > > > message > > > > > > > > > > > > > > >> will > > > > > > > > > > > > > > >> > not be supported by > > the > > > > > consumers > > > > > > > > prior > > > > > > > > > to > > > > > > > > > > > KIP-87. > > > > > > > > > > > > > Because a > > > > > > > > > > > > > > null value > > > > > > > > > > > > > > >> > will always be > > > > interpreted to a > > > > > > > > > tombstone. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > One option is that > we > > > > keep the > > > > > > > current > > > > > > > > > way, > > > > > > > > > > i.e. > > > > > > > > > > > > do not > > > > > > > > > > > > > > support such > > > > > > > > > > > > > > >> > message. It would be > > > good > > > > to > > > > > know > > > > > > if > > > > > > > > > there is > > > > > > > > > > a > > > > > > > > > > > > > concrete use > > > > > > > > > > > > > > case for > > > > > > > > > > > > > > >> such > > > > > > > > > > > > > > >> > message. If there is > > > not, > > > > we can > > > > > > > > > probably just > > > > > > > > > > > not > > > > > > > > > > > > > support it. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > Thanks, > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > JIangjie (Becket) > Qin > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > On Wed, Nov 16, 2016 > > at > > > > 1:28 PM, > > > > > > > > > Mayuresh > > > > > > > > > > > Gharat < > > > > > > > > > > > > > > >> > > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > > >> > > wrote: > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > Hi Ismael, > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > This is something > I > > > can > > > > think > > > > > of > > > > > > > for > > > > > > > > > > migration > > > > > > > > > > > > plan: > > > > > > > > > > > > > > >> > > So the migration > > plan > > > > can look > > > > > > > > > something > > > > > > > > > > like > > > > > > > > > > > > this, > > > > > > > > > > > > > with up > > > > > > > > > > > > > > >> conversion : > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > 1) Currently lets > > say > > > > we have > > > > > > > Broker > > > > > > > > > at > > > > > > > > > > > version > > > > > > > > > > > > x. > > > > > > > > > > > > > > >> > > 2) Currently we > have > > > > clients > > > > > at > > > > > > > > > version x. > > > > > > > > > > > > > > >> > > 3) a) We move the > > > > version to > > > > > > > > > Broker(x+1) : > > > > > > > > > > > > supports > > > > > > > > > > > > > both > > > > > > > > > > > > > > tombstone and > > > > > > > > > > > > > > >> > null > > > > > > > > > > > > > > >> > > for log > compaction. > > > > > > > > > > > > > > >> > > b) We upgrade > > the > > > > client > > > > > to > > > > > > > > > version > > > > > > > > > > > > client(x+1) : > > > > > > > > > > > > > if in > > > > > > > > > > > > > > the > > > > > > > > > > > > > > >> producer > > > > > > > > > > > > > > >> > > client(x+1) the > > value > > > > is set > > > > > to > > > > > > > > null, > > > > > > > > > we > > > > > > > > > > will > > > > > > > > > > > > > automatically > > > > > > > > > > > > > > set the > > > > > > > > > > > > > > >> > > Tombstone bit > > > > internally. If > > > > > the > > > > > > > > > producer > > > > > > > > > > > > client(x+1) > > > > > > > > > > > > > sets > > > > > > > > > > > > > > the > > > > > > > > > > > > > > >> tombstone > > > > > > > > > > > > > > >> > > itself, well and > > good. > > > > For > > > > > > > producer > > > > > > > > > > client(x), > > > > > > > > > > > > the > > > > > > > > > > > > > broker > > > > > > > > > > > > > > will up > > > > > > > > > > > > > > >> convert > > > > > > > > > > > > > > >> > > to have the > > tombstone > > > > bit. > > > > > > > > > Broker(x+1) is > > > > > > > > > > > > supporting > > > > > > > > > > > > > both. > > > > > > > > > > > > > > Consumer > > > > > > > > > > > > > > >> > > client(x+1) will > be > > > > aware of > > > > > > this > > > > > > > > and > > > > > > > > > should > > > > > > > > > > > be > > > > > > > > > > > > able > > > > > > > > > > > > > to > > > > > > > > > > > > > > handle this. > > > > > > > > > > > > > > >> For > > > > > > > > > > > > > > >> > > consumer client(x) > > we > > > > will > > > > > down > > > > > > > > > convert the > > > > > > > > > > > > message > > > > > > > > > > > > > on the > > > > > > > > > > > > > > broker > > > > > > > > > > > > > > >> side. > > > > > > > > > > > > > > >> > > c) At this > point > > > we > > > > will > > > > > > have > > > > > > > to > > > > > > > > > > specify a > > > > > > > > > > > > > warning or > > > > > > > > > > > > > > clearly > > > > > > > > > > > > > > >> specify > > > > > > > > > > > > > > >> > > in docs that this > > > > behavior is > > > > > > > about > > > > > > > > > to be > > > > > > > > > > > > changed for > > > > > > > > > > > > > log > > > > > > > > > > > > > > compaction. > > > > > > > > > > > > > > >> > > 4) a) In next > > release > > > > of the > > > > > > > > > Broker(x+2), we > > > > > > > > > > > > say that > > > > > > > > > > > > > only > > > > > > > > > > > > > > Tombstone > > > > > > > > > > > > > > >> is > > > > > > > > > > > > > > >> > > used for log > > > compaction > > > > on the > > > > > > > > Broker > > > > > > > > > side. > > > > > > > > > > > > > Clients(x+1) > > > > > > > > > > > > > > still is > > > > > > > > > > > > > > >> > > supported. > > > > > > > > > > > > > > >> > > b) We upgrade > > the > > > > client > > > > > to > > > > > > > > > version > > > > > > > > > > > > client(x+2) : > > > > > > > > > > > > > if > > > > > > > > > > > > > > value is set > > > > > > > > > > > > > > >> to > > > > > > > > > > > > > > >> > > null, tombstone > will > > > > not be > > > > > set > > > > > > > > > > automatically. > > > > > > > > > > > > The > > > > > > > > > > > > > client > > > > > > > > > > > > > > will have to > > > > > > > > > > > > > > >> > call > > > > > > > > > > > > > > >> > > setTombstone() to > > > > actually set > > > > > > the > > > > > > > > > > tombstone. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > We should compare > > this > > > > > migration > > > > > > > > plan > > > > > > > > > with > > > > > > > > > > the > > > > > > > > > > > > > migration > > > > > > > > > > > > > > plan for > > > > > > > > > > > > > > >> magic > > > > > > > > > > > > > > >> > > byte bump and do > > > > whatever > > > > > looks > > > > > > > > good. > > > > > > > > > > > > > > >> > > I am just worried > > that > > > > if we > > > > > go > > > > > > > down > > > > > > > > > magic > > > > > > > > > > > byte > > > > > > > > > > > > route, > > > > > > > > > > > > > > unless I am > > > > > > > > > > > > > > >> > missing > > > > > > > > > > > > > > >> > > something, it > sounds > > > > like > > > > > kafka > > > > > > > will > > > > > > > > > be > > > > > > > > > > stuck > > > > > > > > > > > > with > > > > > > > > > > > > > > supporting both > > > > > > > > > > > > > > >> null > > > > > > > > > > > > > > >> > > value and > tombstone > > > bit > > > > for > > > > > log > > > > > > > > > compaction > > > > > > > > > > for > > > > > > > > > > > > life > > > > > > > > > > > > > long, > > > > > > > > > > > > > > which does > > > > > > > > > > > > > > >> not > > > > > > > > > > > > > > >> > > look like a good > end > > > > state. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > Thanks, > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > Mayuresh > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > On Wed, Nov 16, > 2016 > > > at > > > > 9:32 > > > > > AM, > > > > > > > > > Mayuresh > > > > > > > > > > > > Gharat < > > > > > > > > > > > > > > >> > > > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > > >> > > > wrote: > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > Hi Ismael, > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > That's a very > good > > > > point > > > > > > which I > > > > > > > > > might > > > > > > > > > > have > > > > > > > > > > > > not > > > > > > > > > > > > > > considered earlier. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > Here is a plan > > that > > > I > > > > can > > > > > > think > > > > > > > > of: > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > Stage 1) The > > broker > > > > from now > > > > > > on, > > > > > > > > up > > > > > > > > > > converts > > > > > > > > > > > > the > > > > > > > > > > > > > message > > > > > > > > > > > > > > to have the > > > > > > > > > > > > > > >> > > > tombstone > marker. > > > The > > > > log > > > > > > > > compaction > > > > > > > > > > thread > > > > > > > > > > > > does log > > > > > > > > > > > > > > compaction > > > > > > > > > > > > > > >> based > > > > > > > > > > > > > > >> > on > > > > > > > > > > > > > > >> > > > both null and > > > > tombstone > > > > > > marker. > > > > > > > > > This is > > > > > > > > > > our > > > > > > > > > > > > > transition > > > > > > > > > > > > > > period. > > > > > > > > > > > > > > >> > > > Stage 2) The > next > > > > release we > > > > > > > only > > > > > > > > > say that > > > > > > > > > > > log > > > > > > > > > > > > > compaction > > > > > > > > > > > > > > is based > > > > > > > > > > > > > > >> on > > > > > > > > > > > > > > >> > > > tombstone > marker. > > > > (Open > > > > > source > > > > > > > > > kafka makes > > > > > > > > > > > > this as a > > > > > > > > > > > > > > policy). By > > > > > > > > > > > > > > >> this > > > > > > > > > > > > > > >> > > time, > > > > > > > > > > > > > > >> > > > the organization > > > > which is > > > > > > moving > > > > > > > > to > > > > > > > > > this > > > > > > > > > > > > release > > > > > > > > > > > > > will be > > > > > > > > > > > > > > sure that > > > > > > > > > > > > > > >> they > > > > > > > > > > > > > > >> > > > have gone > through > > > the > > > > entire > > > > > > > > > transition > > > > > > > > > > > > period. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > My only goal of > > > doing > > > > this > > > > > is > > > > > > > that > > > > > > > > > Kafka > > > > > > > > > > > > clearly > > > > > > > > > > > > > > specifies the end > > > > > > > > > > > > > > >> > state > > > > > > > > > > > > > > >> > > > about what log > > > > compaction > > > > > > means > > > > > > > > (is > > > > > > > > > it > > > > > > > > > > null > > > > > > > > > > > > value > > > > > > > > > > > > > or a > > > > > > > > > > > > > > tombstone > > > > > > > > > > > > > > >> > marker, > > > > > > > > > > > > > > >> > > > but not both). > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > What do you > think? > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > Thanks, > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > Mayuresh > > > > > > > > > > > > > > >> > > > . > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > On Wed, Nov 16, > > 2016 > > > > at 9:17 > > > > > > AM, > > > > > > > > > Ismael > > > > > > > > > > > Juma < > > > > > > > > > > > > > > ism...@juma.me.uk> > > > > > > > > > > > > > > >> > wrote: > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > >> One comment > > below. > > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > > >> > > >> On Wed, Nov 16, > > > 2016 > > > > at > > > > > 5:08 > > > > > > > PM, > > > > > > > > > Mayuresh > > > > > > > > > > > > Gharat < > > > > > > > > > > > > > > >> > > >> > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > > >> > > >> > wrote: > > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > > >> > > >> > - If we > > don't > > > > bump up > > > > > > the > > > > > > > > > magic > > > > > > > > > > byte, > > > > > > > > > > > > on the > > > > > > > > > > > > > broker > > > > > > > > > > > > > > side, the > > > > > > > > > > > > > > >> > > broker > > > > > > > > > > > > > > >> > > >> > will > always > > > > have to > > > > > look > > > > > > > at > > > > > > > > > both > > > > > > > > > > > > tombstone > > > > > > > > > > > > > bit and > > > > > > > > > > > > > > the value > > > > > > > > > > > > > > >> when > > > > > > > > > > > > > > >> > > do > > > > > > > > > > > > > > >> > > >> the > > > > > > > > > > > > > > >> > > >> > > compaction. > > > > Assuming > > > > > we > > > > > > do > > > > > > > > > not bump > > > > > > > > > > up > > > > > > > > > > > > the > > > > > > > > > > > > > magic > > > > > > > > > > > > > > byte, > > > > > > > > > > > > > > >> > > >> > imagine > the > > > > broker > > > > > sees > > > > > > a > > > > > > > > > message > > > > > > > > > > > which > > > > > > > > > > > > does > > > > > > > > > > > > > not > > > > > > > > > > > > > > have a > > > > > > > > > > > > > > >> tombstone > > > > > > > > > > > > > > >> > > bit > > > > > > > > > > > > > > >> > > >> > set. The > > > broker > > > > does > > > > > not > > > > > > > > know > > > > > > > > > when > > > > > > > > > > the > > > > > > > > > > > > > message was > > > > > > > > > > > > > > produced > > > > > > > > > > > > > > >> (i.e. > > > > > > > > > > > > > > >> > > >> > whether > > > > > > > > > > > > > > >> > > >> > the > message > > > has > > > > been > > > > > up > > > > > > > > > converted or > > > > > > > > > > > > not), it > > > > > > > > > > > > > has > > > > > > > > > > > > > > to take a > > > > > > > > > > > > > > >> > further > > > > > > > > > > > > > > >> > > >> > look at > > > > > > > > > > > > > > >> > > >> > the value > to > > > > see if it > > > > > > is > > > > > > > > > null or > > > > > > > > > > not > > > > > > > > > > > in > > > > > > > > > > > > > order to > > > > > > > > > > > > > > determine > > > > > > > > > > > > > > >> if it > > > > > > > > > > > > > > >> > > is > > > > > > > > > > > > > > >> > > >> a > > > > > > > > > > > > > > >> > > >> > tombstone. > > The > > > > same > > > > > > logic > > > > > > > > has > > > > > > > > > to be > > > > > > > > > > > put > > > > > > > > > > > > on the > > > > > > > > > > > > > > consumer as > > > > > > > > > > > > > > >> well > > > > > > > > > > > > > > >> > > >> because > > > > > > > > > > > > > > >> > > >> > the > > > > > > > > > > > > > > >> > > >> > consumer > > does > > > > not know > > > > > > if > > > > > > > > the > > > > > > > > > > message > > > > > > > > > > > > has > > > > > > > > > > > > > been up > > > > > > > > > > > > > > converted or > > > > > > > > > > > > > > >> > not. > > > > > > > > > > > > > > >> > > >> > - If we > > > > upconvert > > > > > > while > > > > > > > > > > appending, > > > > > > > > > > > > this is > > > > > > > > > > > > > not > > > > > > > > > > > > > > the case, > > > > > > > > > > > > > > >> > right? > > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > > >> > > >> If I understand > > you > > > > > > correctly, > > > > > > > > > this is > > > > > > > > > > not > > > > > > > > > > > > > sufficient > > > > > > > > > > > > > > because the > > > > > > > > > > > > > > >> log > > > > > > > > > > > > > > >> > > may > > > > > > > > > > > > > > >> > > >> have messages > > > > appended > > > > > before > > > > > > > it > > > > > > > > > was > > > > > > > > > > > > upgraded to > > > > > > > > > > > > > include > > > > > > > > > > > > > > KIP-87. > > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > > >> > > >> Ismael > > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > -- > > > > > > > > > > > > > > >> > > > -Regards, > > > > > > > > > > > > > > >> > > > Mayuresh R. > Gharat > > > > > > > > > > > > > > >> > > > (862) 250-7125 > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > -- > > > > > > > > > > > > > > >> > > -Regards, > > > > > > > > > > > > > > >> > > Mayuresh R. Gharat > > > > > > > > > > > > > > >> > > (862) 250-7125 > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > 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. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> -- > > > > > > > > > > > > > > >> -Regards, > > > > > > > > > > > > > > >> Mayuresh R. Gharat > > > > > > > > > > > > > > >> (862) 250-7125 > > > > > > > > > > > > > > >> 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. > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > > -Regards, > > > > > > > > > > > > > > > Mayuresh R. Gharat > > > > > > > > > > > > > > > (862) 250-7125 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > -Regards, > > > > > > > > > > > > > > Mayuresh R. Gharat > > > > > > > > > > > > > > (862) 250-7125 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 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 > > > > > <020%207896%200011>) 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 > > > > > <020%207896%200011>) 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 > > > > > <020%207896%200011>) 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 > > > > > <020%207896%200011>) 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 > > > > > <020%207896%200011>) 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 > > > > <020%207896%200011>) > > > > > 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 > > > > <020%207896%200011>) > > > > > 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 > > > > <020%207896%200011>) > > > > > 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. > > > > > 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. > > >