Sounds good. On Fri, Apr 8, 2016 at 11:37 AM, Grant Henke <ghe...@cloudera.com> wrote:
> Guozhang, > > I agree there is a gap. Thats what I was trying to say in the last email. > But I also, don't see a great/safe way to fix it by changing what topics > are included in the metadata. > > Perhaps instead, I can add a special error code to the CreateTopic request > to tell the user the topic they are trying to create is being deleted. I do > think changes/improvements to the delete logic is needed. What I am saying > here is that I don't think this metadata change is the time or place to fix > it given the current constraints. I am flexible on that though if people > disagree. > > Thank you, > Grant > > On Fri, Apr 8, 2016 at 12:51 PM, Guozhang Wang <wangg...@gmail.com> wrote: > > > I feel that "a delete and then create action may fail with a topic exists > > exception...which the user could retry until succeeded" has some flaw, > > since we cannot distinguish the case 1) the topic not marked for deleted, > > but deletion is not complete, from 2) the topic is being created, but > > creation is not complete. Or do I miss something here? > > > > Guozhang > > > > On Thu, Apr 7, 2016 at 11:07 AM, Grant Henke <ghe...@cloudera.com> > wrote: > > > > > Thanks for the feedback Guozhang and Gwen. > > > > > > Gwen, I agree with you on this. I am not sure its something we > can/should > > > tackle here. Especially before the release. I can leave the delete flag > > off > > > of the changes. > > > > > > What that means for KIP-4, is that a client won't be able to > > differentiate > > > between a topic that is gone vs marked for deletion. This means a > delete > > > and then create action may fail with a topic exists exception...which > the > > > user could retry until succeeded. I think that is reasonable, and much > > > safer. > > > > > > After that we can work on creating more tests and improving the delete > > > behavior. > > > > > > > > > > > > On Thu, Apr 7, 2016 at 12:55 PM, Gwen Shapira <g...@confluent.io> > wrote: > > > > > > > Given that we are very close to the release, if we are changing the > > > > Metadata cache + topic deletion logic, I'd like a good number of > system > > > > tests to appear with the patch. > > > > > > > > On Thu, Apr 7, 2016 at 10:53 AM, Gwen Shapira <g...@confluent.io> > > wrote: > > > > > > > > > This will change some logic though, right? > > > > > > > > > > IIRC, right now produce/fetch requests to marked-for-deletion > topics > > > fail > > > > > because the topics are simple not around. You get a generic > "doesn't > > > > exist" > > > > > error. If we keep these topics and add a flag, we'll need to find > all > > > the > > > > > places with this implicit logic and correct for it. > > > > > > > > > > And since our tests for topic deletion are clearly inadequate... > I'm > > a > > > > bit > > > > > scared :) > > > > > > > > > > Gwen > > > > > > > > > > On Thu, Apr 7, 2016 at 10:34 AM, Guozhang Wang <wangg...@gmail.com > > > > > > wrote: > > > > > > > > > >> Hmm, I think since in the original protocol, metadata response do > > not > > > > have > > > > >> information for "marked for deleted topics" and hence we want to > > > remove > > > > >> that topic from returning in response by cleaning the metadata > cache > > > > once > > > > >> it is marked to deletion. > > > > >> > > > > >> With the new format, I think it is OK to delay the metadata > > cleaning. > > > > >> > > > > >> Guozhang > > > > >> > > > > >> On Thu, Apr 7, 2016 at 8:35 AM, Grant Henke <ghe...@cloudera.com> > > > > wrote: > > > > >> > > > > >> > I am testing the marked for deletion flag in the metadata and > ran > > > into > > > > >> some > > > > >> > challenges. > > > > >> > > > > > >> > It turns out that as soon as a topic is marked for deletion it > may > > > be > > > > >> > purged from the metadata cache. This means that Metadata > responses > > > > >> > can't/don't return the topic. Though the topic may still exist > if > > > its > > > > >> not > > > > >> > ready to be completely deleted or is in the process of being > > > deleted. > > > > >> > > > > > >> > This poses a challenge because a user would have no way to tell > > if a > > > > >> topic > > > > >> > still exists, and is marked for deletion, other than to try and > > > > >> recreate it > > > > >> > and see a failure. I could change the logic to no longer purge a > > > > message > > > > >> > from the cache until its completely deleted, but I am not sure > if > > > that > > > > >> > would impact the clients in some way negatively. Does anyone > have > > > > enough > > > > >> > background to say? > > > > >> > > > > > >> > I will dig into this a bit more today, but wanted to throw this > > out > > > > >> there > > > > >> > for some early feedback. > > > > >> > > > > > >> > Thank you, > > > > >> > Grant > > > > >> > > > > > >> > > > > > >> > On Tue, Apr 5, 2016 at 8:02 PM, Jun Rao <j...@confluent.io> > wrote: > > > > >> > > > > > >> > > 5. You will return no error and 4,5,6 as replicas. The > response > > > also > > > > >> > > includes a list of live brokers. So the client can figure out > 5 > > is > > > > not > > > > >> > live > > > > >> > > directly w/o relying on the error code. > > > > >> > > > > > > >> > > Thanks, > > > > >> > > > > > > >> > > Jun > > > > >> > > > > > > >> > > On Tue, Apr 5, 2016 at 5:05 PM, Grant Henke < > > ghe...@cloudera.com> > > > > >> wrote: > > > > >> > > > > > > >> > > > Hi Jun, > > > > >> > > > > > > > >> > > > See my responses below: > > > > >> > > > > > > > >> > > > 2. The issues that I was thinking are the following. (a) Say > > the > > > > >> > > controller > > > > >> > > > > has topic deletion disabled and a topic deletion request > is > > > > >> submitted > > > > >> > > to > > > > >> > > > > ZK. In this case, the controller will ignore this request. > > > > >> However, > > > > >> > the > > > > >> > > > > broker may pick up the topic deletion marker in a > transient > > > > >> window. > > > > >> > (b) > > > > >> > > > > Suppose that a topic is deleted and then recreated > > > immediately. > > > > >> It is > > > > >> > > > > possible for a broker to see the newly created topic and > > then > > > > the > > > > >> > > > previous > > > > >> > > > > topic deletion marker in a transient window. Thinking > about > > > > this a > > > > >> > bit > > > > >> > > > > more. Both seem to be transient. So, it may not be a big > > > > concern. > > > > >> > So, I > > > > >> > > > am > > > > >> > > > > ok with this as long as the interim solution is not too > > > > >> complicated. > > > > >> > > > > Another thing to think through. If a topic is marked for > > > > >> deletion, do > > > > >> > > we > > > > >> > > > > still return the partition level metadata? > > > > >> > > > > > > > >> > > > > > > > >> > > > I am not changing anything about the metadata content, only > > > > adding a > > > > >> > > > boolean based on the marked for deletion flag in zookeeper. > > This > > > > is > > > > >> > > > maintaining the same method that the topics script does > > today. I > > > > do > > > > >> > think > > > > >> > > > delete improvements should be considered/reviewed. The goal > > here > > > > is > > > > >> to > > > > >> > > > allow the broker to report the value that its sees, which is > > the > > > > >> value > > > > >> > in > > > > >> > > > zookeeper. > > > > >> > > > > > > > >> > > > 5. The issue is the following. If you have a partition with > 3 > > > > >> replicas > > > > >> > > > > 4,5,6, leader is on replica 4 and replica 5 is down. > > > Currently, > > > > >> the > > > > >> > > > broker > > > > >> > > > > will send a REPLICA_NOT_AVAILABLE error code and only > > replicas > > > > >> 4,6 in > > > > >> > > the > > > > >> > > > > assigned replicas. It's more intuitive to send no error > code > > > and > > > > >> > 4,5,6 > > > > >> > > in > > > > >> > > > > the assigned replicas in this case. > > > > >> > > > > > > > >> > > > > > > > >> > > > Should the list with no error code just be 4,6 since 5 is > not > > > > >> > available? > > > > >> > > > > > > > >> > > > > > > > >> > > > On Mon, Apr 4, 2016 at 1:34 PM, Jun Rao <j...@confluent.io> > > > wrote: > > > > >> > > > > > > > >> > > > > Grant, > > > > >> > > > > > > > > >> > > > > 2. The issues that I was thinking are the following. (a) > Say > > > the > > > > >> > > > controller > > > > >> > > > > has topic deletion disabled and a topic deletion request > is > > > > >> submitted > > > > >> > > to > > > > >> > > > > ZK. In this case, the controller will ignore this request. > > > > >> However, > > > > >> > the > > > > >> > > > > broker may pick up the topic deletion marker in a > transient > > > > >> window. > > > > >> > (b) > > > > >> > > > > Suppose that a topic is deleted and then recreated > > > immediately. > > > > >> It is > > > > >> > > > > possible for a broker to see the newly created topic and > > then > > > > the > > > > >> > > > previous > > > > >> > > > > topic deletion marker in a transient window. Thinking > about > > > > this a > > > > >> > bit > > > > >> > > > > more. Both seem to be transient. So, it may not be a big > > > > concern. > > > > >> > So, I > > > > >> > > > am > > > > >> > > > > ok with this as long as the interim solution is not too > > > > >> complicated. > > > > >> > > > > Another thing to think through. If a topic is marked for > > > > >> deletion, do > > > > >> > > we > > > > >> > > > > still return the partition level metadata? > > > > >> > > > > > > > > >> > > > > 3. Your explanation on controller id seems reasonable to > me. > > > > >> > > > > > > > > >> > > > > 5. The issue is the following. If you have a partition > with > > 3 > > > > >> > replicas > > > > >> > > > > 4,5,6, leader is on replica 4 and replica 5 is down. > > > Currently, > > > > >> the > > > > >> > > > broker > > > > >> > > > > will send a REPLICA_NOT_AVAILABLE error code and only > > replicas > > > > >> 4,6 in > > > > >> > > the > > > > >> > > > > assigned replicas. It's more intuitive to send no error > code > > > and > > > > >> > 4,5,6 > > > > >> > > in > > > > >> > > > > the assigned replicas in this case. > > > > >> > > > > > > > > >> > > > > Thanks, > > > > >> > > > > > > > > >> > > > > Jun > > > > >> > > > > > > > > >> > > > > On Mon, Apr 4, 2016 at 8:33 AM, Grant Henke < > > > > ghe...@cloudera.com> > > > > >> > > wrote: > > > > >> > > > > > > > > >> > > > > > Hi Jun, > > > > >> > > > > > > > > > >> > > > > > Please See my responses below: > > > > >> > > > > > > > > > >> > > > > > Hmm, I am not sure about the listener approach. It > ignores > > > > >> configs > > > > >> > > like > > > > >> > > > > > > enable.topic.deletion and also opens the door for > > > potential > > > > >> > > ordering > > > > >> > > > > > issues > > > > >> > > > > > > since now there are two separate paths for propagating > > the > > > > >> > metadata > > > > >> > > > to > > > > >> > > > > > the > > > > >> > > > > > > brokers. > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > This mechanism is very similar to how deletes are > tracked > > on > > > > the > > > > >> > > > > controller > > > > >> > > > > > itself. It is also the same way ACLs are tracked on > > brokers > > > in > > > > >> the > > > > >> > > > > default > > > > >> > > > > > implementation. I am not sure I understand what ordering > > > issue > > > > >> > there > > > > >> > > > > could > > > > >> > > > > > be. This is used to report what topics are marked for > > > > deletion, > > > > >> > which > > > > >> > > > > today > > > > >> > > > > > has no dependency on enable.topic.deletion. I agree that > > the > > > > >> delete > > > > >> > > > > > mechanism in Kafka has a lot of room for improvement, > but > > > the > > > > >> goal > > > > >> > in > > > > >> > > > > this > > > > >> > > > > > change is just to enable reporting it to the user, not > to > > > > >> > fix/improve > > > > >> > > > > > existing issues. If you have an alternate approach that > > does > > > > not > > > > >> > > > require > > > > >> > > > > > major changes to the controller code, I would be open to > > > > >> > investigate > > > > >> > > > it. > > > > >> > > > > > > > > > >> > > > > > Could we just leave out markedForDeletion for now? In > the > > > > common > > > > >> > > > > > > case, if a topic is deleted, it will only be in > > > > >> markedForDeletion > > > > >> > > > state > > > > >> > > > > > for > > > > >> > > > > > > a few milli seconds anyway. > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > I don't think we should leave it out. The point of these > > > > >> changes is > > > > >> > > to > > > > >> > > > > > prevent a user from needing to talk directly to > zookeeper. > > > We > > > > >> need > > > > >> > a > > > > >> > > > way > > > > >> > > > > > for a user to see if a topic has been marked for > deletion. > > > > Given > > > > >> > the > > > > >> > > > > issues > > > > >> > > > > > with the current delete implementation, its fairly > common > > > for > > > > a > > > > >> > topic > > > > >> > > > to > > > > >> > > > > > remain marked as deleted for quite some time. > > > > >> > > > > > > > > > >> > > > > > Yes, for those usage, it just seems it's a bit weird for > > the > > > > >> client > > > > >> > > to > > > > >> > > > > > > issue a MetadataRequest to get the controller info > since > > > it > > > > >> > doesn't > > > > >> > > > > need > > > > >> > > > > > > any topic metadata. > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > Why does this seam weird? The MetadataRequest is the > > request > > > > >> used > > > > >> > to > > > > >> > > > > > discover the cluster and metadata about that cluster > > > > regardless > > > > >> of > > > > >> > > the > > > > >> > > > > > topics you are interested in, if any. In fact, a big > > > > motivation > > > > >> for > > > > >> > > the > > > > >> > > > > > change to allow requesting "no topics" is because the > > > existing > > > > >> > > producer > > > > >> > > > > and > > > > >> > > > > > consumer often want to learn about the cluster without > > > asking > > > > >> for > > > > >> > > topic > > > > >> > > > > > metadata and today that means that they request all > > topics. > > > > >> > > > > > > > > > >> > > > > > 5. The issue is that for a client, when handling a > > metadata > > > > >> > response, > > > > >> > > > the > > > > >> > > > > > > natural logic is if there is any error in the > response, > > go > > > > to > > > > >> the > > > > >> > > > error > > > > >> > > > > > > handling path (e.g., back off and refresh metadata). > > > > >> Otherwise, > > > > >> > get > > > > >> > > > the > > > > >> > > > > > > leader info and initiate a request to the leader if > > leader > > > > is > > > > >> > > > > available. > > > > >> > > > > > If > > > > >> > > > > > > you look at the current logic in > > > > >> > > > MetadataCache.getPartitionMetadata(), > > > > >> > > > > if > > > > >> > > > > > > an assigned replica is not alive, we will send a > > > > >> > > > REPLICA_NOT_AVAILABLE > > > > >> > > > > > > error code in the response. If the client follows the > > > above > > > > >> > logic, > > > > >> > > it > > > > >> > > > > > will > > > > >> > > > > > > keep doing the error handling even though there is > > nothing > > > > >> wrong > > > > >> > > with > > > > >> > > > > the > > > > >> > > > > > > leader. A better behavior is to simply return the list > > of > > > > >> replica > > > > >> > > ids > > > > >> > > > > > with > > > > >> > > > > > > no error code in this case. > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > To be sure I understand this correctly. Instead of > > returning > > > > the > > > > >> > > > complete > > > > >> > > > > > list of replicas, including the ones that errored as > > > > >> unavailable. > > > > >> > You > > > > >> > > > are > > > > >> > > > > > suggesting to drop the unavailable ones and return just > > the > > > > >> > replicas > > > > >> > > > with > > > > >> > > > > > no-errors and return no error code on the partition. Is > > that > > > > >> > correct? > > > > >> > > > > > > > > > >> > > > > > Under what scenario does the MetadataCache have a > replica > > > that > > > > >> is > > > > >> > not > > > > >> > > > > > available? > > > > >> > > > > > > > > > >> > > > > > Thanks, > > > > >> > > > > > Grant > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > On Mon, Apr 4, 2016 at 12:25 AM, Jun Rao < > > j...@confluent.io> > > > > >> wrote: > > > > >> > > > > > > > > > >> > > > > > > Grant, > > > > >> > > > > > > > > > > >> > > > > > > 2. Hmm, I am not sure about the listener approach. It > > > > ignores > > > > >> > > configs > > > > >> > > > > > like > > > > >> > > > > > > enable.topic.deletion and also opens the door for > > > potential > > > > >> > > ordering > > > > >> > > > > > issues > > > > >> > > > > > > since now there are two separate paths for propagating > > the > > > > >> > metadata > > > > >> > > > to > > > > >> > > > > > the > > > > >> > > > > > > brokers. Could we just leave out markedForDeletion for > > > now? > > > > In > > > > >> > the > > > > >> > > > > common > > > > >> > > > > > > case, if a topic is deleted, it will only be in > > > > >> markedForDeletion > > > > >> > > > state > > > > >> > > > > > for > > > > >> > > > > > > a few milli seconds anyway. > > > > >> > > > > > > > > > > >> > > > > > > 3. Yes, for those usage, it just seems it's a bit > weird > > > for > > > > >> the > > > > >> > > > client > > > > >> > > > > to > > > > >> > > > > > > issue a MetadataRequest to get the controller info > since > > > it > > > > >> > doesn't > > > > >> > > > > need > > > > >> > > > > > > any topic metadata. > > > > >> > > > > > > > > > > >> > > > > > > 5. The issue is that for a client, when handling a > > > metadata > > > > >> > > response, > > > > >> > > > > the > > > > >> > > > > > > natural logic is if there is any error in the > response, > > go > > > > to > > > > >> the > > > > >> > > > error > > > > >> > > > > > > handling path (e.g., back off and refresh metadata). > > > > >> Otherwise, > > > > >> > get > > > > >> > > > the > > > > >> > > > > > > leader info and initiate a request to the leader if > > leader > > > > is > > > > >> > > > > available. > > > > >> > > > > > If > > > > >> > > > > > > you look at the current logic in > > > > >> > > > MetadataCache.getPartitionMetadata(), > > > > >> > > > > if > > > > >> > > > > > > an assigned replica is not alive, we will send a > > > > >> > > > REPLICA_NOT_AVAILABLE > > > > >> > > > > > > error code in the response. If the client follows the > > > above > > > > >> > logic, > > > > >> > > it > > > > >> > > > > > will > > > > >> > > > > > > keep doing the error handling even though there is > > nothing > > > > >> wrong > > > > >> > > with > > > > >> > > > > the > > > > >> > > > > > > leader. A better behavior is to simply return the list > > of > > > > >> replica > > > > >> > > ids > > > > >> > > > > > with > > > > >> > > > > > > no error code in this case. > > > > >> > > > > > > > > > > >> > > > > > > Thanks, > > > > >> > > > > > > > > > > >> > > > > > > Jun > > > > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > On Sun, Apr 3, 2016 at 6:29 PM, Grant Henke < > > > > >> ghe...@cloudera.com > > > > >> > > > > > > >> > > > > wrote: > > > > >> > > > > > > > > > > >> > > > > > > > Responding to a few of the other comments: > > > > >> > > > > > > > > > > > >> > > > > > > > it seems that you propagated > > > > >> > > > > > > > > the topic deletion marker by having the > > replicaManager > > > > >> read > > > > >> > > from > > > > >> > > > ZK > > > > >> > > > > > > > > directly. It seems that it would be > > simpler/consistent > > > > if > > > > >> the > > > > >> > > > > > > controller > > > > >> > > > > > > > > propagates that information directly through > > > > >> > UpdateMetaRequest. > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > I was told that I should not try and modify > controller > > > > logic > > > > >> > with > > > > >> > > > > KIP-4 > > > > >> > > > > > > > changes. It was indicated that a larger controller > > > rewrite > > > > >> and > > > > >> > > > > testing > > > > >> > > > > > > was > > > > >> > > > > > > > planned and those changes should be considered then. > > > Since > > > > >> > > marking > > > > >> > > > a > > > > >> > > > > > > topic > > > > >> > > > > > > > for deletion doesn't flow through the controller and > > > > >> therefore > > > > >> > > the > > > > >> > > > > > > > UpdateMetadataRequest, > > > > >> > > > > > > > it would take quite a bit of change. We would need > to > > > > >> trigger a > > > > >> > > new > > > > >> > > > > > > > UpdateMetadataRequest > > > > >> > > > > > > > every time a new topic is marked for deletion. > > > > >> > > > > > > > > > > > >> > > > > > > > Instead I added a listener to maintain a cache of > the > > > > topic > > > > >> > > > deletion > > > > >> > > > > > > znodes > > > > >> > > > > > > > in the ReplicaManager where the existing > > > > >> UpdateMetadataRequests > > > > >> > > are > > > > >> > > > > > > > handled. This would make it easy to swap out later > > once > > > > the > > > > >> > data > > > > >> > > > is a > > > > >> > > > > > > part > > > > >> > > > > > > > of that request and have minimal impact in the mean > > > time. > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > Could you add a description on how controller id > > will > > > be > > > > >> used > > > > >> > > in > > > > >> > > > > the > > > > >> > > > > > > > > client? > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > I will add it to the wiki. Today metrics are the > only > > > way > > > > to > > > > >> > > access > > > > >> > > > > > this > > > > >> > > > > > > > piece of data. It is useful information about the > > > cluster > > > > >> for > > > > >> > > many > > > > >> > > > > > > reasons. > > > > >> > > > > > > > Having programatic access to identify the controller > > is > > > > >> helpful > > > > >> > > for > > > > >> > > > > > > > automation. For example, It can be used during > rolling > > > > >> restart > > > > >> > > > logic > > > > >> > > > > to > > > > >> > > > > > > > shutdown the controller last to prevent multiple > fail > > > > overs. > > > > >> > > Beyond > > > > >> > > > > > > > automation, it can be leveraged in KIP-4 to route > > admin > > > > >> > requests > > > > >> > > to > > > > >> > > > > the > > > > >> > > > > > > > controller broker. > > > > >> > > > > > > > > > > > >> > > > > > > > We had a weird semantic in version 0 of > > MetadataRequest. > > > > If > > > > >> a > > > > >> > > > replica > > > > >> > > > > > is > > > > >> > > > > > > > > not live, but the leader is live, we return an > > > > >> > > > > > > > > error ReplicaNotAvailableException in the > partition > > > > >> metadata. > > > > >> > > > This > > > > >> > > > > > > makes > > > > >> > > > > > > > it > > > > >> > > > > > > > > a bit confusing for the client to parse since it > has > > > to > > > > >> first > > > > >> > > > check > > > > >> > > > > > > > whether > > > > >> > > > > > > > > leader is available or not before error code > > checking. > > > > We > > > > >> > were > > > > >> > > > > > thinking > > > > >> > > > > > > > of > > > > >> > > > > > > > > changing that behavior the next time we bump up > the > > > > >> version > > > > >> > of > > > > >> > > > > > > > > MetadataRequest. > > > > >> > > > > > > > > Now that time has come, could you include that in > > the > > > > >> > proposal? > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > I am not sure I completely follow the issue and > > > requested > > > > >> > change. > > > > >> > > > > Could > > > > >> > > > > > > you > > > > >> > > > > > > > point me to the discussion? > > > > >> > > > > > > > > > > > >> > > > > > > > Thank you, > > > > >> > > > > > > > Grant > > > > >> > > > > > > > > > > > >> > > > > > > > On Sun, Apr 3, 2016 at 8:09 PM, Grant Henke < > > > > >> > ghe...@cloudera.com > > > > >> > > > > > > > >> > > > > > wrote: > > > > >> > > > > > > > > > > > >> > > > > > > > > Hi Jun and Ismael, > > > > >> > > > > > > > > > > > > >> > > > > > > > > Initially I had 2 booleans used to indicate if a > > topic > > > > was > > > > >> > > > internal > > > > >> > > > > > and > > > > >> > > > > > > > if > > > > >> > > > > > > > > a topic was marked for deletion. To save space on > > > large > > > > >> > > > > deployments, > > > > >> > > > > > > > Ismael > > > > >> > > > > > > > > suggested I break out the internal topics and > > deleted > > > > >> topics > > > > >> > > into > > > > >> > > > > > their > > > > >> > > > > > > > own > > > > >> > > > > > > > > lists. The idea was that instead of 2 bytes added > > per > > > > >> topic, > > > > >> > in > > > > >> > > > the > > > > >> > > > > > > > general > > > > >> > > > > > > > > case the lists would be empty. Even in those > lists I > > > > still > > > > >> > only > > > > >> > > > > > return > > > > >> > > > > > > > > topics that were requested. In fact on the client > > side > > > > >> they > > > > >> > are > > > > >> > > > > just > > > > >> > > > > > > > > utilized to translate back to booleans. I do > prefer > > > the > > > > >> > > booleans > > > > >> > > > > from > > > > >> > > > > > > an > > > > >> > > > > > > > > expressiveness standpoint but was not strongly > > > > >> opinionated on > > > > >> > > the > > > > >> > > > > > > > > structure. > > > > >> > > > > > > > > > > > > >> > > > > > > > > Thank you, > > > > >> > > > > > > > > Grant > > > > >> > > > > > > > > > > > > >> > > > > > > > > On Sun, Apr 3, 2016 at 8:00 PM, Ismael Juma < > > > > >> > ism...@juma.me.uk > > > > >> > > > > > > > >> > > > > > wrote: > > > > >> > > > > > > > > > > > > >> > > > > > > > >> Hi Jun, > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> A couple of comments inline. > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> On Sun, Apr 3, 2016 at 5:55 PM, Jun Rao < > > > > >> j...@confluent.io> > > > > >> > > > wrote: > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > 1. It seems a bit weird to return just a list > of > > > > >> internal > > > > >> > > > topics > > > > >> > > > > > w/o > > > > >> > > > > > > > the > > > > >> > > > > > > > >> > corresponding metadata. It also seems a bit > weird > > > to > > > > >> > return > > > > >> > > > the > > > > >> > > > > > > > internal > > > > >> > > > > > > > >> > topics even if the client doesn't ask for it. > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> Good point. > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > Would it be better to just > > > > >> > > > > > > > >> > add a flag in topic_metadata to indicate > whether > > > it's > > > > >> an > > > > >> > > > > internal > > > > >> > > > > > > > topic > > > > >> > > > > > > > >> or > > > > >> > > > > > > > >> > not, and only include the internal topics when > > thy > > > > are > > > > >> > asked > > > > >> > > > (or > > > > >> > > > > > all > > > > >> > > > > > > > >> topics > > > > >> > > > > > > > >> > are requested) for? > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> The disadvantage of this is that we are adding > one > > > byte > > > > >> per > > > > >> > > > topic > > > > >> > > > > > even > > > > >> > > > > > > > >> though we have a very small number of internal > > topics > > > > >> > > > (currently a > > > > >> > > > > > > > single > > > > >> > > > > > > > >> internal topic). It seems a bit wasteful and > > > > >> particularly so > > > > >> > > > when > > > > >> > > > > > > using > > > > >> > > > > > > > >> regex subscriptions (since we have to retrieve > all > > > > >> topics in > > > > >> > > > that > > > > >> > > > > > > case). > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> 2. A similar comment on > topics_marked_for_deletion. > > > > >> Would it > > > > >> > > be > > > > >> > > > > > better > > > > >> > > > > > > > to > > > > >> > > > > > > > >> > only return them when asked for and just > return a > > > new > > > > >> > > > > TopicDeleted > > > > >> > > > > > > > error > > > > >> > > > > > > > >> > code in topic_metadata? > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> I agree that this seems better. > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> Ismael > > > > >> > > > > > > > >> > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > -- > > > > >> > > > > > > > > Grant Henke > > > > >> > > > > > > > > Software Engineer | Cloudera > > > > >> > > > > > > > > gr...@cloudera.com | twitter.com/gchenke | > > > > >> > > > > > linkedin.com/in/granthenke > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > -- > > > > >> > > > > > > > Grant Henke > > > > >> > > > > > > > Software Engineer | Cloudera > > > > >> > > > > > > > gr...@cloudera.com | twitter.com/gchenke | > > > > >> > > > > linkedin.com/in/granthenke > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > -- > > > > >> > > > > > Grant Henke > > > > >> > > > > > Software Engineer | Cloudera > > > > >> > > > > > gr...@cloudera.com | twitter.com/gchenke | > > > > >> > > linkedin.com/in/granthenke > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > -- > > > > >> > > > Grant Henke > > > > >> > > > Software Engineer | Cloudera > > > > >> > > > gr...@cloudera.com | twitter.com/gchenke | > > > > >> linkedin.com/in/granthenke > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > > >> > > > > > >> > -- > > > > >> > Grant Henke > > > > >> > Software Engineer | Cloudera > > > > >> > gr...@cloudera.com | twitter.com/gchenke | > > > linkedin.com/in/granthenke > > > > >> > > > > > >> > > > > >> > > > > >> > > > > >> -- > > > > >> -- Guozhang > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > Grant Henke > > > Software Engineer | Cloudera > > > gr...@cloudera.com | twitter.com/gchenke | linkedin.com/in/granthenke > > > > > > > > > > > -- > > -- Guozhang > > > > > > -- > Grant Henke > Software Engineer | Cloudera > gr...@cloudera.com | twitter.com/gchenke | linkedin.com/in/granthenke > -- -- Guozhang