{"action":"created","comment":{"url":"https://api.github.com/repos/apache/kafka/pulls/comments/38303535","id":38303535,"diff_hunk":"@@ -0,0 +1,250 @@\n+/**\n+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE\n+ * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file\n+ * to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the\n+ * License. You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on\n+ * an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the\n+ * specific language governing permissions and limitations under the License.\n+ */\n+\n+package org.apache.kafka.common.requests;\n+\n+import org.apache.kafka.common.TopicPartition;\n+import org.apache.kafka.common.protocol.ApiKeys;\n+import org.apache.kafka.common.protocol.Errors;\n+import org.apache.kafka.common.protocol.ProtoUtils;\n+import org.apache.kafka.common.protocol.SecurityProtocol;\n+import org.apache.kafka.common.protocol.types.Schema;\n+import org.apache.kafka.common.protocol.types.Struct;\n+\n+import java.nio.ByteBuffer;\n+import java.util.*;\n+\n+public class UpdateMetadataRequest extends AbstractRequest {\n+\n+    public static final class PartitionState {\n+        public final int controllerEpoch;\n+        public final int leader;\n+        public final int leaderEpoch;\n+        public final List<Integer> isr;\n+        public final int zkVersion;\n+        public final Set<Integer> replicas;\n+\n+        public PartitionState(int controllerEpoch, int leader, int leaderEpoch, List<Integer> isr, int zkVersion, Set<Integer> replicas) {\n+            this.controllerEpoch = controllerEpoch;\n+            this.leader = leader;\n+            this.leaderEpoch = leaderEpoch;\n+            this.isr = isr;\n+            this.zkVersion = zkVersion;\n+            this.replicas = replicas;\n+        }\n+\n+    }\n+\n+    public static final class Broker {\n+        public final int id;\n+        public final Map<SecurityProtocol, EndPoint> endPoints;\n+\n+        public Broker(int id, Map<SecurityProtocol, EndPoint> endPoints) {\n+            this.id = id;\n+            this.endPoints = endPoints;\n+        }\n+    }\n+\n+    public static final class EndPoint {\n+        public final String host;\n+        public final int port;\n+\n+        public EndPoint(String host, int port) {\n+            this.host = host;\n+            this.port = port;\n+        }\n+    }\n+\n+    private static final Schema CURRENT_SCHEMA = ProtoUtils.currentRequestSchema(ApiKeys.UPDATE_METADATA_KEY.id);\n+\n+    private static final String CONTROLLER_ID_KEY_NAME = \"controller_id\";\n+    private static final String CONTROLLER_EPOCH_KEY_NAME = \"controller_epoch\";\n+    private static final String PARTITION_STATES_KEY_NAME = \"partition_states\";\n+    private static final String ALIVE_BROKERS_KEY_NAME = \"alive_brokers\";\n+\n+    // PartitionState key names\n+    private static final String TOPIC_KEY_NAME = \"topic\";\n+    private static final String PARTITION_KEY_NAME = \"partition\";\n+    private static final String LEADER_KEY_NAME = \"leader\";\n+    private static final String LEADER_EPOCH_KEY_NAME = \"leader_epoch\";\n+    private static final String ISR_KEY_NAME = \"isr\";\n+    private static final String ZK_VERSION_KEY_NAME = \"zk_version\";\n+    private static final String REPLICAS_KEY_NAME = \"replicas\";\n+\n+    // Broker key names\n+    private static final String BROKER_ID_KEY_NAME = \"id\";\n+    private static final String ENDPOINTS_KEY_NAME = \"end_points\";\n+\n+    // EndPoint key names\n+    private static final String HOST_KEY_NAME = \"host\";\n+    private static final String PORT_KEY_NAME = \"port\";\n+    private static final String SECURITY_PROTOCOL_TYPE_KEY_NAME = \"security_protocol_type\";\n+\n+    private final int controllerId;\n+    private final int controllerEpoch;\n+    private final Map<TopicPartition, PartitionState> partitionStates;\n+    private final Set<Broker> aliveBrokers;\n+\n+\n+    public UpdateMetadataRequest(int version, int controllerId, int controllerEpoch, Map<TopicPartition,\n+            PartitionState> partitionStates, Set<Broker> aliveBrokers) {\n+        super(new Struct(ProtoUtils.requestSchema(ApiKeys.UPDATE_METADATA_KEY.id, version)));\n+        struct.set(CONTROLLER_ID_KEY_NAME, controllerId);\n+        struct.set(CONTROLLER_EPOCH_KEY_NAME, controllerEpoch);\n+\n+        List<Struct> partitionStatesData = new ArrayList<>(partitionStates.size());\n+        for (Map.Entry<TopicPartition, PartitionState> entry : partitionStates.entrySet()) {\n+            Struct partitionStateData = struct.instance(PARTITION_STATES_KEY_NAME);\n+            TopicPartition topicPartition = entry.getKey();\n+            partitionStateData.set(TOPIC_KEY_NAME, topicPartition.topic());\n+            partitionStateData.set(PARTITION_KEY_NAME, topicPartition.partition());\n+            PartitionState partitionState = entry.getValue();\n+            partitionStateData.set(CONTROLLER_EPOCH_KEY_NAME, partitionState.controllerEpoch);\n+            partitionStateData.set(LEADER_KEY_NAME, partitionState.leader);\n+            partitionStateData.set(LEADER_EPOCH_KEY_NAME, partitionState.leaderEpoch);\n+            partitionStateData.set(ISR_KEY_NAME, partitionState.isr.toArray());\n+            partitionStateData.set(ZK_VERSION_KEY_NAME, partitionState.zkVersion);\n+            partitionStateData.set(REPLICAS_KEY_NAME, partitionState.replicas.toArray());\n+            partitionStatesData.add(partitionStateData);\n+        }\n+        struct.set(PARTITION_STATES_KEY_NAME, partitionStatesData.toArray());\n+\n+        List<Struct> brokersData = new ArrayList<>(aliveBrokers.size());\n+        for (Broker broker : aliveBrokers) {\n+            Struct brokerData = struct.instance(ALIVE_BROKERS_KEY_NAME);\n+            brokerData.set(BROKER_ID_KEY_NAME, broker.id);\n+\n+            if (version == 0) {\n+                EndPoint endPoint = broker.endPoints.get(SecurityProtocol.PLAINTEXT);\n+                brokerData.set(HOST_KEY_NAME, endPoint.host);\n+                brokerData.set(PORT_KEY_NAME, endPoint.port);\n+            } else {\n+                List<Struct> endPointsData = new ArrayList<>(broker.endPoints.size());\n+                for (Map.Entry<SecurityProtocol, EndPoint> entry : broker.endPoints.entrySet()) {\n+                    Struct endPointData = brokerData.instance(ENDPOINTS_KEY_NAME);\n+                    endPointData.set(PORT_KEY_NAME, entry.getValue().port);\n+                    endPointData.set(HOST_KEY_NAME, entry.getValue().host);\n+                    endPointData.set(SECURITY_PROTOCOL_TYPE_KEY_NAME, entry.getKey().id);\n+                    endPointsData.add(endPointData);\n+\n+                }\n+                brokerData.set(ENDPOINTS_KEY_NAME, endPointsData.toArray());\n+            }\n+\n+            brokersData.add(brokerData);\n+        }\n+        struct.set(ALIVE_BROKERS_KEY_NAME, brokersData.toArray());\n+\n+        this.controllerId = controllerId;\n+        this.controllerEpoch = controllerEpoch;\n+        this.partitionStates = partitionStates;\n+        this.aliveBrokers = aliveBrokers;\n+    }\n+\n+    public UpdateMetadataRequest(Struct struct) {\n+        super(struct);\n+\n+        Map<TopicPartition, PartitionState> partitionStates = new HashMap<>();\n+        for (Object partitionStateDataObj : struct.getArray(PARTITION_STATES_KEY_NAME)) {\n+            Struct partitionStateData = (Struct) partitionStateDataObj;\n+            String topic = partitionStateData.getString(TOPIC_KEY_NAME);\n+            int partition = partitionStateData.getInt(PARTITION_KEY_NAME);\n+            int controllerEpoch = partitionStateData.getInt(CONTROLLER_EPOCH_KEY_NAME);\n+            int leader = partitionStateData.getInt(LEADER_KEY_NAME);\n+            int leaderEpoch = partitionStateData.getInt(LEADER_EPOCH_KEY_NAME);\n+\n+            Object[] isrArray = partitionStateData.getArray(ISR_KEY_NAME);\n+            List<Integer> isr = new ArrayList<>(isrArray.length);\n+            for (Object r : isrArray)\n+                isr.add((Integer) r);\n+\n+            int zkVersion = partitionStateData.getInt(ZK_VERSION_KEY_NAME);\n+\n+            Object[] replicasArray = partitionStateData.getArray(REPLICAS_KEY_NAME);\n+            Set<Integer> replicas = new HashSet<>(replicasArray.length);\n+            for (Object r : replicasArray)\n+                replicas.add((Integer) r);\n+\n+            PartitionState partitionState = new PartitionState(controllerEpoch, leader, leaderEpoch, isr, zkVersion, replicas);\n+            partitionStates.put(new TopicPartition(topic, partition), partitionState);\n+\n+        }\n+\n+        Set<Broker> aliveBrokers = new HashSet<>();\n+\n+        for (Object brokerDataObj : struct.getArray(ALIVE_BROKERS_KEY_NAME)) {\n+            Struct brokerData = (Struct) brokerDataObj;\n+            int brokerId = brokerData.getInt(BROKER_ID_KEY_NAME);\n+\n+            // V0\n+            if (brokerData.hasField(HOST_KEY_NAME)) {","path":"clients/src/main/java/org/apache/kafka/common/requests/UpdateMetadataRequest.java","position":190,"original_position":190,"commit_id":"3eb6a3f1889acaadd0e6ea728e179e1659c05225","original_commit_id":"3eb6a3f1889acaadd0e6ea728e179e1659c05225","user":{"login":"ijuma","id":24747,"avatar_url":"https://avatars.githubusercontent.com/u/24747?v=3","gravatar_id":"","url":"https://api.github.com/users/ijuma","html_url":"https://github.com/ijuma","followers_url":"https://api.github.com/users/ijuma/followers","following_url":"https://api.github.com/users/ijuma/following{/other_user}","gists_url":"https://api.github.com/users/ijuma/gists{/gist_id}","starred_url":"https://api.github.com/users/ijuma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ijuma/subscriptions","organizations_url":"https://api.github.com/users/ijuma/orgs","repos_url":"https://api.github.com/users/ijuma/repos","events_url":"https://api.github.com/users/ijuma/events{/privacy}","received_events_url":"https://api.github.com/users/ijuma/received_events","type":"User","site_admin":false},"body":"Actually I can't make this change because `SECURITY_PROTOCOL_TYPE_KEY_NAME` will never exist at this level. I could check for `ENDPOINTS_KEY_NAME`, but I think the current way is less error-prone (as endpoints could be empty due to a bug perhaps). So I'll leave it as is unless you disagree.","created_at":"2015-08-31T11:31:47Z","updated_at":"2015-08-31T11:31:47Z","html_url":"https://github.com/apache/kafka/pull/151#discussion_r38303535","pull_request_url":"https://api.github.com/repos/apache/kafka/pulls/151","_links":{"self":{"href":"https://api.github.com/repos/apache/kafka/pulls/comments/38303535"},"html":{"href":"https://github.com/apache/kafka/pull/151#discussion_r38303535"},"pull_request":{"href":"https://api.github.com/repos/apache/kafka/pulls/151"}}},"pull_request":{"url":"https://api.github.com/repos/apache/kafka/pulls/151","id":42826765,"html_url":"https://github.com/apache/kafka/pull/151","diff_url":"https://github.com/apache/kafka/pull/151.diff","patch_url":"https://github.com/apache/kafka/pull/151.patch","issue_url":"https://api.github.com/repos/apache/kafka/issues/151","number":151,"state":"open","locked":false,"title":"KAFKA-2411; remove usage of blocking channel","user":{"login":"ijuma","id":24747,"avatar_url":"https://avatars.githubusercontent.com/u/24747?v=3","gravatar_id":"","url":"https://api.github.com/users/ijuma","html_url":"https://github.com/ijuma","followers_url":"https://api.github.com/users/ijuma/followers","following_url":"https://api.github.com/users/ijuma/following{/other_user}","gists_url":"https://api.github.com/users/ijuma/gists{/gist_id}","starred_url":"https://api.github.com/users/ijuma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ijuma/subscriptions","organizations_url":"https://api.github.com/users/ijuma/orgs","repos_url":"https://api.github.com/users/ijuma/repos","events_url":"https://api.github.com/users/ijuma/events{/privacy}","received_events_url":"https://api.github.com/users/ijuma/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-08-19T15:16:12Z","updated_at":"2015-08-31T11:31:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c9f9b4bd148e04879e621ec2d00f4bce590c1bb4","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/apache/kafka/pulls/151/commits","review_comments_url":"https://api.github.com/repos/apache/kafka/pulls/151/comments","review_comment_url":"https://api.github.com/repos/apache/kafka/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/kafka/issues/151/comments","statuses_url":"https://api.github.com/repos/apache/kafka/statuses/3eb6a3f1889acaadd0e6ea728e179e1659c05225","head":{"label":"ijuma:kafka-2411-remove-usage-of-blocking-channel","ref":"kafka-2411-remove-usage-of-blocking-channel","sha":"3eb6a3f1889acaadd0e6ea728e179e1659c05225","user":{"login":"ijuma","id":24747,"avatar_url":"https://avatars.githubusercontent.com/u/24747?v=3","gravatar_id":"","url":"https://api.github.com/users/ijuma","html_url":"https://github.com/ijuma","followers_url":"https://api.github.com/users/ijuma/followers","following_url":"https://api.github.com/users/ijuma/following{/other_user}","gists_url":"https://api.github.com/users/ijuma/gists{/gist_id}","starred_url":"https://api.github.com/users/ijuma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ijuma/subscriptions","organizations_url":"https://api.github.com/users/ijuma/orgs","repos_url":"https://api.github.com/users/ijuma/repos","events_url":"https://api.github.com/users/ijuma/events{/privacy}","received_events_url":"https://api.github.com/users/ijuma/received_events","type":"User","site_admin":false},"repo":{"id":32646946,"name":"kafka","full_name":"ijuma/kafka","owner":{"login":"ijuma","id":24747,"avatar_url":"https://avatars.githubusercontent.com/u/24747?v=3","gravatar_id":"","url":"https://api.github.com/users/ijuma","html_url":"https://github.com/ijuma","followers_url":"https://api.github.com/users/ijuma/followers","following_url":"https://api.github.com/users/ijuma/following{/other_user}","gists_url":"https://api.github.com/users/ijuma/gists{/gist_id}","starred_url":"https://api.github.com/users/ijuma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ijuma/subscriptions","organizations_url":"https://api.github.com/users/ijuma/orgs","repos_url":"https://api.github.com/users/ijuma/repos","events_url":"https://api.github.com/users/ijuma/events{/privacy}","received_events_url":"https://api.github.com/users/ijuma/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ijuma/kafka","description":"Mirror of Apache Kafka","fork":true,"url":"https://api.github.com/repos/ijuma/kafka","forks_url":"https://api.github.com/repos/ijuma/kafka/forks","keys_url":"https://api.github.com/repos/ijuma/kafka/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ijuma/kafka/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ijuma/kafka/teams","hooks_url":"https://api.github.com/repos/ijuma/kafka/hooks","issue_events_url":"https://api.github.com/repos/ijuma/kafka/issues/events{/number}","events_url":"https://api.github.com/repos/ijuma/kafka/events","assignees_url":"https://api.github.com/repos/ijuma/kafka/assignees{/user}","branches_url":"https://api.github.com/repos/ijuma/kafka/branches{/branch}","tags_url":"https://api.github.com/repos/ijuma/kafka/tags","blobs_url":"https://api.github.com/repos/ijuma/kafka/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ijuma/kafka/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ijuma/kafka/git/refs{/sha}","trees_url":"https://api.github.com/repos/ijuma/kafka/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ijuma/kafka/statuses/{sha}","languages_url":"https://api.github.com/repos/ijuma/kafka/languages","stargazers_url":"https://api.github.com/repos/ijuma/kafka/stargazers","contributors_url":"https://api.github.com/repos/ijuma/kafka/contributors","subscribers_url":"https://api.github.com/repos/ijuma/kafka/subscribers","subscription_url":"https://api.github.com/repos/ijuma/kafka/subscription","commits_url":"https://api.github.com/repos/ijuma/kafka/commits{/sha}","git_commits_url":"https://api.github.com/repos/ijuma/kafka/git/commits{/sha}","comments_url":"https://api.github.com/repos/ijuma/kafka/comments{/number}","issue_comment_url":"https://api.github.com/repos/ijuma/kafka/issues/comments{/number}","contents_url":"https://api.github.com/repos/ijuma/kafka/contents/{+path}","compare_url":"https://api.github.com/repos/ijuma/kafka/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ijuma/kafka/merges","archive_url":"https://api.github.com/repos/ijuma/kafka/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ijuma/kafka/downloads","issues_url":"https://api.github.com/repos/ijuma/kafka/issues{/number}","pulls_url":"https://api.github.com/repos/ijuma/kafka/pulls{/number}","milestones_url":"https://api.github.com/repos/ijuma/kafka/milestones{/number}","notifications_url":"https://api.github.com/repos/ijuma/kafka/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ijuma/kafka/labels{/name}","releases_url":"https://api.github.com/repos/ijuma/kafka/releases{/id}","created_at":"2015-03-21T19:33:59Z","updated_at":"2015-03-21T19:34:01Z","pushed_at":"2015-08-29T08:06:34Z","git_url":"git://github.com/ijuma/kafka.git","ssh_url":"git@github.com:ijuma/kafka.git","clone_url":"https://github.com/ijuma/kafka.git","svn_url":"https://github.com/ijuma/kafka","homepage":null,"size":22216,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"trunk"}},"base":{"label":"apache:trunk","ref":"trunk","sha":"8c88d198a0bcd0292a6b7ec3b08ae138e41fcc6e","user":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":2211243,"name":"kafka","full_name":"apache/kafka","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apache/kafka","description":"Mirror of Apache Kafka","fork":false,"url":"https://api.github.com/repos/apache/kafka","forks_url":"https://api.github.com/repos/apache/kafka/forks","keys_url":"https://api.github.com/repos/apache/kafka/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/kafka/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/kafka/teams","hooks_url":"https://api.github.com/repos/apache/kafka/hooks","issue_events_url":"https://api.github.com/repos/apache/kafka/issues/events{/number}","events_url":"https://api.github.com/repos/apache/kafka/events","assignees_url":"https://api.github.com/repos/apache/kafka/assignees{/user}","branches_url":"https://api.github.com/repos/apache/kafka/branches{/branch}","tags_url":"https://api.github.com/repos/apache/kafka/tags","blobs_url":"https://api.github.com/repos/apache/kafka/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/kafka/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/kafka/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/kafka/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/kafka/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/kafka/languages","stargazers_url":"https://api.github.com/repos/apache/kafka/stargazers","contributors_url":"https://api.github.com/repos/apache/kafka/contributors","subscribers_url":"https://api.github.com/repos/apache/kafka/subscribers","subscription_url":"https://api.github.com/repos/apache/kafka/subscription","commits_url":"https://api.github.com/repos/apache/kafka/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/kafka/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/kafka/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/kafka/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/kafka/contents/{+path}","compare_url":"https://api.github.com/repos/apache/kafka/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/kafka/merges","archive_url":"https://api.github.com/repos/apache/kafka/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/kafka/downloads","issues_url":"https://api.github.com/repos/apache/kafka/issues{/number}","pulls_url":"https://api.github.com/repos/apache/kafka/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/kafka/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/kafka/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/kafka/labels{/name}","releases_url":"https://api.github.com/repos/apache/kafka/releases{/id}","created_at":"2011-08-15T18:06:16Z","updated_at":"2015-08-31T08:07:06Z","pushed_at":"2015-08-29T16:50:01Z","git_url":"git://github.com/apache/kafka.git","ssh_url":"git@github.com:apache/kafka.git","clone_url":"https://github.com/apache/kafka.git","svn_url":"https://github.com/apache/kafka","homepage":null,"size":30709,"stargazers_count":1855,"watchers_count":1855,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1108,"mirror_url":"git://git.apache.org/kafka.git","open_issues_count":75,"forks":1108,"open_issues":75,"watchers":1855,"default_branch":"trunk"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/kafka/pulls/151"},"html":{"href":"https://github.com/apache/kafka/pull/151"},"issue":{"href":"https://api.github.com/repos/apache/kafka/issues/151"},"comments":{"href":"https://api.github.com/repos/apache/kafka/issues/151/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/kafka/pulls/151/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/kafka/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/kafka/pulls/151/commits"},"statuses":{"href":"https://api.github.com/repos/apache/kafka/statuses/3eb6a3f1889acaadd0e6ea728e179e1659c05225"}}}}