Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 98F96200BDA for ; Tue, 13 Dec 2016 17:33:34 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 9765E160B23; Tue, 13 Dec 2016 16:33:34 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 28B46160B07 for ; Tue, 13 Dec 2016 17:33:32 +0100 (CET) Received: (qmail 8264 invoked by uid 500); 13 Dec 2016 16:33:31 -0000 Mailing-List: contact dev-help@kafka.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@kafka.apache.org Delivered-To: mailing list dev@kafka.apache.org Received: (qmail 8253 invoked by uid 99); 13 Dec 2016 16:33:30 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 13 Dec 2016 16:33:30 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 2E9A61AAC0E for ; Tue, 13 Dec 2016 16:33:30 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -1.52 X-Spam-Level: X-Spam-Status: No, score=-1.52 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id 6TqYuIeBKgam for ; Tue, 13 Dec 2016 16:33:21 +0000 (UTC) Received: from mail0.iggroup.com (mail0.iggroup.com [195.234.39.199]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 002E45F19B for ; Tue, 13 Dec 2016 16:33:20 +0000 (UTC) Received: from ukvmprdvon601.igi.ig.local (HELO LMPRDEXC141.IGI.IG.LOCAL) ([172.27.11.142]) by lrprdirn001-int.igi.ig.local with ESMTP/TLS/AES256-SHA256; 13 Dec 2016 16:32:59 +0000 Received: from BMPRDEXC142.igi.ig.local (172.24.11.72) by LMPRDEXC141.igi.ig.local (172.27.11.71) with Microsoft SMTP Server (TLS) id 15.0.1156.6; Tue, 13 Dec 2016 16:32:58 +0000 Received: from BMPRDEXC142.igi.ig.local ([fe80::461:191b:6f0a:8242]) by BMPRDEXC142.IGI.IG.LOCAL ([fe80::461:191b:6f0a:8242%19]) with mapi id 15.00.1156.000; Tue, 13 Dec 2016 16:32:58 +0000 From: Michael Pearce To: "dev@kafka.apache.org" Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag Thread-Topic: [VOTE] KIP-87 - Add Compaction Tombstone Flag Thread-Index: AQHSSjJQuchflY2mKky0SoXsHsvbEqDx1hoAgAKxg4CAAHdIgIAAeGeAgAW3BcCAAAfbgIAABn6ggAALLgCAAALMJoAAGeyAgAJWCwCABCDvgIAAbOn2gAAGlACAAF6sZoAAoKqAgAAEwxWAACF3AIACX4SAgABUUNE= Date: Tue, 13 Dec 2016 16:32:57 +0000 Message-ID: <8a332f08017f4bbf8aba4bcd34fd44a8@BMPRDEXC142.IGI.IG.LOCAL> References: <7AD186ED-7982-4A5E-920B-5C8AAE5084BF@ig.com> <2ACDC47F-DB41-45A1-B62A-97B805A1D8C4@ig.com> <59bba6729002497a9dbae45d1da59241@BMPRDEXC142.IGI.IG.LOCAL> <46264a410f8c4aa48ff7caef0bb1ecd3@BMPRDEXC142.IGI.IG.LOCAL> <1481433852678.26033@ig.com> <1481455584685.73053@ig.com> <42c21cfc4cb24b7a908092b734f5ca52@BMPRDEXC142.IGI.IG.LOCAL> , In-Reply-To: Accept-Language: en-US, en-GB Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [172.25.10.21] x-ig-disclaimer: IG-Disclaimer-Set Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-CFilter-Loop: Reflected archived-at: Tue, 13 Dec 2016 16:33:34 -0000 Hi Ismael Did you see our email this morning, what's your thoughts on this approach t= o instead we simply have a brand new policy? Cheers Mike Sent using OWA for iPhone ________________________________________ From: ismaelj@gmail.com on behalf of Ismael Juma 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 =3D 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 =3D fals= e. Not sure if this would be worth it though. Ismael On Sun, Dec 11, 2016 at 11:15 PM, Ewen Cheslack-Postava 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 t= he > 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 t= he > 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 tha= t > 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 b= e > 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 > 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 > > 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 t= o > > tombstones, even for non-compacted topics that use null as an acceptabl= e > > value sent by the producer and expected by the consumer. > > > > -Jay > > > > On Sun, Dec 11, 2016 at 3:26 AM, Michael Pearce > > 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 calli= ng > > > 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 tombston= e > 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 =3D=3D null) > > > throw new IllegalArgumentException("Topic cannot be > null."); > > > if (timestamp !=3D null && timestamp < 0) > > > throw new IllegalArgumentException( > > > String.format("Invalid timestamp: %d. Timestamp > > should > > > always be non-negative or null.", timestamp)); > > > if (partition !=3D null && partition < 0) > > > throw new IllegalArgumentException( > > > String.format("Invalid partition: %d. Partition > > number > > > should always be non-negative or null.", partition)); > > > if (!tombstone && value =3D=3D null){ > > > throw new IllegalArgumentException( > > > String.format("Tombstone must be true if null > > value")); > > > } > > > this.topic =3D topic; > > > this.partition =3D partition; > > > this.tombstone =3D tombstone; > > > this.key =3D key; > > > this.value =3D value; > > > this.timestamp =3D timestamp; > > > } > > > > > > public ProducerRecord(String topic, Integer partition, Long > > timestamp, > > > K key, V value) { > > > this(topic, partition, value =3D=3D null, timestamp, key, val= ue); > > > } > > > ________________________________________ > > > From: Ewen Cheslack-Postava > > > 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 usin= g > 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 =3D 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 compatibili= ty > > for > > > the Java API. It sounds like this suggests that passing a null value = to > > the > > > existing ProducerRecord constructors would generate an exception sinc= e > > 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 withou= t > > > recompiling and get the same behavior if your app deletes keys using > the > > > current approach because your app will start throwing exceptions. May= be > > > this is a tradeoff we're ok with, but we've tried pretty hard to avoi= d > > > 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 earlie= r > > > 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 > > > > wrote: > > > > > > > Hi Jay, > > > > > > > > Good point this detail is missing in the KIP write up. Ive added th= is > > > now. > > > > > > > > Essentially simply just upgrading the clients we do not expect any > > client > > > > app code change needed. > > > > > > > > Cheers > > > > Mike > > > > ________________________________________ > > > > From: Jay Kreps > > > > 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 nul= l > 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.Pearce@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 t= he > > > exact > > > > > purpose to support non-null tombstone=92s > > > > > 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" wrote: > > > > > > > > > > Hi, Michael, > > > > > > > > > > 4. Then, I think I misunderstood this point. Could you docume= nt > > 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 th= e > > > 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 se= ts > > 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 compacte= d > on > > > > not? > > > > > > > > > > Thanks, > > > > > > > > > > Jun > > > > > > > > > > On Tue, Dec 6, 2016 at 10:35 AM, Michael Pearce < > > > > Michael.Pearce@ig.com > > > > > > > > > > > wrote: > > > > > > > > > > > Not at all. This only acts on compacted topics just as wha= t > > > occurs > > > > > today > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > ________________________________________ > > > > > > From: Jun Rao > > > > > > 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 sen= d > 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.Pearce@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'r= e > > the > > > > > only kip > > > > > > > going in, in this release. > > > > > > > > > > > > > > Cheers > > > > > > > Mike > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > > ________________________________________ > > > > > > > From: Jun Rao > > > > > > > Sent: Tuesday, December 6, 2016 5:22:13 PM > > > > > > > To: dev@kafka.apache.org > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Fla= g > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > 4. Is this updated in the wiki? The text "If the magic by= te > > 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 wil= l > be > > > > used > > > > > > rarely. > > > > > > > However, if the message format change here is combined wi= th > > > 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.Pearce@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 > > > > > > > > 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=92ve > > > > > > > flagged > > > > > > > > the same in the other KIP? > > > > > > > > > > > > > > > > I think for now let=92s 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" > 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 su= ch > > as > > > > > KIP-98 > > > > > > that > > > > > > > > also > > > > > > > > intend to change the message format. If they all ge= t > > > > > 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.Pearce@ig.com> > > > > > > > > wrote: > > > > > > > > > > > > > > > > > Hi Jao > > > > > > > > > > > > > > > > > > Thanks for the response. Sorry for slow reply, bo= th > > > with > > > > > personal > > > > > > > > sickness > > > > > > > > > and also battling some critical issues encountere= d > > > 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 messag= e > > > 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=92ve overlooked? I thought we would = down > > > > > convert and > > > > > > > > remove the > > > > > > > > > value so the old consumer had existing behavior, = or > > is > > > > > there > > > > > > > > something we > > > > > > > > > haven=92t thought about? > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > On 30/11/2016, 18:12, "Jun Rao" > > > > 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 tombston= e > > 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 th= e > > > > 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 valu= e? > > My > > > > > > > understanding > > > > > > > > is > > > > > > > > > that > > > > > > > > > null value will be treated the same as settin= g > > the > > > > > tombstone > > > > > > > bit. > > > > > > > > > > > > > > > > > > 5. For the migration path, it would be useful > to > > > > > describe the > > > > > > > > down > > > > > > > > > conversion path to consumers (i.e., brokers o= n > > > > message > > > > > format > > > > > > > > 0.10.2 > > > > > > > > > and > > > > > > > > > consumers on older version). > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Nov 29, 2016 at 3:18 AM, Michael > Pearce < > > > > > > > > Michael.Pearce@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 compactio= n > > > > > attribute > > > > > > > > =93tombstone=94 > > > > > > > > > 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.Pearce@ig.com> > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > Hi Mayuresh, > > > > > > > > > > > > > > > > > > > > LGTM. Ive just made one small adjustmen= t > > > > > updating the > > > > > > > wire > > > > > > > > > protocol to > > > > > > > > > > show the magic byte bump. > > > > > > > > > > > > > > > > > > > > Do we think we=92re good to put to a vo= te? > Is > > > > > there any > > > > > > > > other bits > > > > > > > > > > needing discussion? > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > On 21/11/2016, 18:26, "Mayuresh Gharat"= < > > > > > > > > > gharatmayuresh15@gmail.com> > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > Hi Michael, > > > > > > > > > > > > > > > > > > > > I have updated the migration sectio= n > of > > > the > > > > > KIP. > > > > > > Can > > > > > > > > you > > > > > > > > > please > > > > > > > > > > take a look? > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > Mayuresh > > > > > > > > > > > > > > > > > > > > On Fri, Nov 18, 2016 at 9:07 AM, > > Mayuresh > > > > > Gharat < > > > > > > > > > > gharatmayuresh15@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.Pearce@ig.com> > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > >> Many thanks for this Mayuresh. I > > don't > > > > > have any > > > > > > > > > objections. > > > > > > > > > > >> > > > > > > > > > > >> I assume we should state: > > > > > > > > > > >> > > > > > > > > > > >> That whilst sending tombstone an= d > > 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 < > > > > > > gharatmayuresh15@gmail.com > > > > > > > > > > > > > > > > > > >> Sent: Thursday, November 17, 201= 6 > > > > 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 al= l > > > > 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 nu= ll > > > value > > > > > > > > automatically > > > > > > > > > > internally and by > > > > > > > > > > >> the time we move to version (x+2= ), > > the > > > > > clients > > > > > > > > would have > > > > > > > > > > upgraded. > > > > > > > > > > >> Obviously if we support a reques= t > > from > > > > > > > consumer(x), > > > > > > > > we > > > > > > > > > will > > > > > > > > > > loose zero > > > > > > > > > > >> copy > > > > > > > > > > >> but that is the same case with > magic > > > > byte. > > > > > > > > > > >> > > > > > > > > > > >> But if magic byte bump makes lif= e > > > 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 > > > > > > > > > =3D 2, > > > > > > > > > > since the > > > > > > > > > > >> broker is on magic-byte =3D 1, w= e > will > > > > down > > > > > > convert > > > > > > > > it, > > > > > > > > > which > > > > > > > > > > means if the > > > > > > > > > > >> tombstone bit is set, the value > will > > > be > > > > > set to > > > > > > > > null. A > > > > > > > > > consumer > > > > > > > > > > >> understanding magic-byte =3D 1, = will > > > still > > > > > work > > > > > > with > > > > > > > > this. A > > > > > > > > > > consumer > > > > > > > > > > >> working > > > > > > > > > > >> with magic-byte =3D2 will also b= e > 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 =3D 2.* > > > > > > > (I > > > > > > > > am > > > > > > > > > not sure > > > > > > > > > > if we > > > > > > > > > > >> should support this. Ismael/Beck= et > > 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.Pearce@ig.com> > > > > > > > > > > >> wrote: > > > > > > > > > > >> > > > > > > > > > > >> > Thanks guys, for discussing th= is > > > > > 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 t= he > > 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 an= d > > also > > > > > separates > > > > > > > the > > > > > > > > > concerns. > > > > > > > > > > >> > > > > > > > > > > > >> > As discussed already though we > can > > > > > split this > > > > > > > into > > > > > > > > > KIP-87a > > > > > > > > > > and KIP-87b > > > > > > > > > > >> > > > > > > > > > > > >> > Where we look to deliver KIP-8= 7a > > on > > > a > > > > > > compacted > > > > > > > > topic > > > > > > > > > (to > > > > > > > > > > address the > > > > > > > > > > >> > immediate issues) > > > > > > > > > > >> > * tombstone + null value > > > > > > > > > > >> > * tombstone + non-null value > > > > > > > > > > >> > * non-tombstone + non-null val= ue > > > > > > > > > > >> > > > > > > > > > > > >> > Then we can discuss once KIP-8= 7a > > is > > > > > completed > > > > > > > > options > > > > > > > > > later > > > > > > > > > > and how we > > > > > > > > > > >> > support the second part KIP-87= b > to > > > > > deliver: > > > > > > > > > > >> > * non-tombstone + null value > > > > > > > > > > >> > > > > > > > > > > > >> > Cheers > > > > > > > > > > >> > Mike > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > ______________________________ > > > > > __________ > > > > > > > > > > >> > From: Becket Qin < > > > > becket.qin@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 thi= nk > > > about > > > > > is > > > > > > > whether > > > > > > > > we > > > > > > > > > want to > > > > > > > > > > support a > > > > > > > > > > >> > non-tombstone message with nul= l > > > 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 c= an > > > > > probably just > > > > > > > not > > > > > > > > > support it. > > > > > > > > > > >> > > > > > > > > > > > >> > Thanks, > > > > > > > > > > >> > > > > > > > > > > > >> > JIangjie (Becket) Qin > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > On Wed, Nov 16, 2016 at 1:28 P= M, > > > > > Mayuresh > > > > > > > Gharat < > > > > > > > > > > >> > gharatmayuresh15@gmail.com > > > > > > > > > > >> > > wrote: > > > > > > > > > > >> > > > > > > > > > > > >> > > Hi Ismael, > > > > > > > > > > >> > > > > > > > > > > > > >> > > This is something I can thin= k > of > > > for > > > > > > migration > > > > > > > > plan: > > > > > > > > > > >> > > So the migration plan can lo= ok > > > > > something > > > > > > like > > > > > > > > this, > > > > > > > > > with up > > > > > > > > > > >> conversion : > > > > > > > > > > >> > > > > > > > > > > > > >> > > 1) Currently lets say we hav= e > > > 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 i= s > > > 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 t= he > > > > 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 s= et > > 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 < > > > > > > > > > > >> > > gharatmayuresh15@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 n= ow > > 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 enti= re > > > > > 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 < > > > > > > > > > > ismael@juma.me.uk> > > > > > > > > > > >> > wrote: > > > > > > > > > > >> > > > > > > > > > > > > > >> > > >> One comment below. > > > > > > > > > > >> > > >> > > > > > > > > > > >> > > >> On Wed, Nov 16, 2016 at > 5:08 > > > PM, > > > > > Mayuresh > > > > > > > > Gharat < > > > > > > > > > > >> > > >> gharatmayuresh15@gmail.co= m > > > > > > > > > > >> > > >> > wrote: > > > > > > > > > > >> > > >> > > > > > > > > > > >> > > >> > - If we don't bump u= p > > 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 kn= ow > > 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 tradin= g > > name > > > > of > > > > > IG > > > > > > > Markets > > > > > > > > > Limited (a > > > > > > > > > > company > > > > > > > > > > >> > registered in England and Wale= s, > > > > 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 Marke= ts > > > > 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 thi= s > > > email > > > > is > > > > > > > strictly > > > > > > > > > > confidential and for > > > > > > > > > > >> the use of the addressee only, > > unless > > > > > otherwise > > > > > > > > > indicated. If > > > > > > > > > > you are not > > > > > > > > > > >> the intended recipient, please d= o > > 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 compan= y > > > 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. Plea= se > > > 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 an= d > > > Wales, > > > > > company > > > > > > > > number > > > > > > > > > > 04008957) and IG Index Limited (a company > > > > registered > > > > > in > > > > > > > > England and > > > > > > > > > Wales, > > > > > > > > > > company number 01190902). Registered addres= s > at > > > > > Cannon > > > > > > Bridge > > > > > > > > House, > > > > > > > > > 25 > > > > > > > > > > Dowgate Hill, London EC4R 2YA. Both IG > Markets > > > > > Limited > > > > > > > > (register > > > > > > > > > number > > > > > > > > > > 195355) and IG Index Limited (register numb= er > > > > > 114059) are > > > > > > > > authorised > > > > > > > > > and > > > > > > > > > > regulated by the Financial Conduct Authorit= y. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > The information contained in this email is strict= ly > > > > > 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 notif= y > > 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 Market= s > > > > Limited > > > > > (a > > > > > > > company > > > > > > > > > registered in England and Wales, company number > > > 04008957) > > > > > and IG > > > > > > > > Index > > > > > > > > > Limited (a company registered in England and Wale= s, > > > > company > > > > > > number > > > > > > > > > 01190902). Registered address at Cannon Bridge > House, > > > 25 > > > > > Dowgate > > > > > > > > Hill, > > > > > > > > > London EC4R 2YA. Both IG Markets Limited (registe= r > > > 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 o= r > > > > > 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 d= o > > not > > > > > relate to > > > > > > > the > > > > > > > > official business of this company shall be understood a= s > > > > neither > > > > > given > > > > > > > nor > > > > > > > > endorsed by it. IG is a trading name of IG Markets > Limited > > (a > > > > > company > > > > > > > > registered in England and Wales, company number 0400895= 7) > > and > > > > IG > > > > > Index > > > > > > > > Limited (a company registered in England and Wales, > company > > > > > number > > > > > > > > 01190902). Registered address at Cannon Bridge House, 2= 5 > > > > Dowgate > > > > > Hill, > > > > > > > > London EC4R 2YA. Both IG Markets Limited (register numb= er > > > > > 195355) and > > > > > > IG > > > > > > > > Index Limited (register number 114059) are authorised a= nd > > > > > 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 Limite= d > (a > > > > > company > > > > > > > registered in England and Wales, company number 04008957) > and > > > IG > > > > > Index > > > > > > > Limited (a company registered in England and Wales, compa= ny > > > > 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 send= er > > 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 no= t > > > 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) a= nd > > 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 rela= te > > 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 numbe= r > > > > > 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 regulat= ed > > by > > > > the > > > > > Financial Conduct Authority. > > > > > > > > > The information contained in this email is strictly confidential an= d > > for > > > > the use of the addressee only, unless otherwise indicated. If you a= re > > not > > > > the intended recipient, please do not read, copy, use or disclose t= o > > > 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 compa= ny > > > > 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) a= nd > > 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 t= o > > the > > > official business of this company shall be understood as neither give= n > > 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 Inde= x > > > 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 b= y > > the > > > Financial Conduct Authority. > > > > > The information contained in this email is strictly confidential and fo= r > > the use of the addressee only, unless otherwise indicated. If you are n= ot > > the intended recipient, please do not read, copy, use or disclose to > others > > this message or any attachment. Please also notify the sender by replyi= ng > > 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 I= G > > 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 th= e 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 th= is 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 an= d any copies of it. Opinions, conclusion (etc) that do not relate to the of= ficial business of this company shall be understood as neither given nor en= dorsed by it. IG is a trading name of IG Markets Limited (a company registe= red in England and Wales, company number 04008957) and IG Index Limited (a = company registered in England and Wales, company number 01190902). Register= ed address at Cannon Bridge House, 25 Dowgate Hill, London EC4R 2YA. Both I= G Markets Limited (register number 195355) and IG Index Limited (register n= umber 114059) are authorised and regulated by the Financial Conduct Authori= ty.