Re: Review Request 36345: Patch for KAFKA-2322

2015-07-10 Thread Jiangjie Qin

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/36345/#review91321
---

Ship it!


LGTM.

- Jiangjie Qin


On July 9, 2015, 9:05 a.m., Ismael Juma wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 https://reviews.apache.org/r/36345/
 ---
 
 (Updated July 9, 2015, 9:05 a.m.)
 
 
 Review request for kafka.
 
 
 Bugs: KAFKA-2322
 https://issues.apache.org/jira/browse/KAFKA-2322
 
 
 Repository: kafka
 
 
 Description
 ---
 
 kafka-2322; Use multi-catch to reduce redundancy
 
 
 kafka-2322; Use try with resources instead of try/finally
 
 It's more concise and handles the exception from `close`
 better.
 
 
 Diffs
 -
 
   clients/src/main/java/org/apache/kafka/clients/ClientUtils.java 
 0d68bf1e1e90fe9d5d4397ddf817b9a9af8d9f7a 
   clients/src/main/java/org/apache/kafka/clients/ClusterConnectionStates.java 
 9ebda5eae5936a6b0897e74cfb231803c9d6a2da 
   clients/src/main/java/org/apache/kafka/clients/InFlightRequests.java 
 15d00d4e484bb5d51a9ae6857ed6e024a2cc1820 
   clients/src/main/java/org/apache/kafka/clients/Metadata.java 
 0387f2602c93a62cd333f1b3c569ca6b66b5b779 
   clients/src/main/java/org/apache/kafka/clients/NetworkClient.java 
 48fe7961e2215372d8033ece4af739ea06c6457b 
   clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerConfig.java 
 daff34db5bf2144e9dc274b23dc56b88f4efafdc 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerRecords.java 
 eb75d2e797e3aa3992e4cf74b12f51c8f1545e02 
   clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java 
 7aa076084c894bb8f47b9df2c086475b06f47060 
   clients/src/main/java/org/apache/kafka/clients/consumer/MockConsumer.java 
 46e26a665a22625d50888efa7b53472279f36e79 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/internals/Coordinator.java
  c1c8172cd45f6715262f9a6f497a7b1797a834a3 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/internals/Fetcher.java
  695eaf63db9a5fa20dc2ca68957901462a96cd96 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/internals/RequestFuture.java
  13fc9af7392b4ade958daf3b0c9a165ddda351a6 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/internals/SubscriptionState.java
  683745304c671952ff566f23b5dd4cf3ab75377a 
   clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java 
 03b8dd23df63a8d8a117f02eabcce4a2d48c44f7 
   clients/src/main/java/org/apache/kafka/clients/producer/MockProducer.java 
 36e7ffa2a0a0b9bfaa41c22feb1be8ae476ab321 
   clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java 
 aa264202f2724907924985a5ecbe74afc4c6c04b 
   
 clients/src/main/java/org/apache/kafka/clients/producer/internals/BufferPool.java
  4cb1e50d6c4ed55241aeaef1d3af09def5274103 
   
 clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordAccumulator.java
  a152bd7697dca55609a9ec4cfe0a82c10595fbc3 
   
 clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordBatch.java
  06182db1c3a5da85648199b4c0c98b80ea7c6c0c 
   
 clients/src/main/java/org/apache/kafka/clients/producer/internals/Sender.java 
 0baf16e55046a2f49f6431e01d52c323c95eddf0 
   
 clients/src/main/java/org/apache/kafka/clients/tools/ProducerPerformance.java 
 13f4d5958052afcc8ad66eacbcae50b6fd149398 
   clients/src/main/java/org/apache/kafka/common/Cluster.java 
 60594a7dce90130911a626ea80cf80d815aeb46e 
   clients/src/main/java/org/apache/kafka/common/MetricName.java 
 04b4a09badd5157a426812b78d491248a4d38fba 
   clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java 
 bae528d31516679bed88ee61b408f209f185a8cc 
   clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java 
 4170bcc7def5b50d8aa20e8e84089c35b705b527 
   clients/src/main/java/org/apache/kafka/common/metrics/JmxReporter.java 
 6b9590c418aedd2727544c5dd23c017b4b72467a 
   clients/src/main/java/org/apache/kafka/common/metrics/Metrics.java 
 5f6caf957e3bd3789e575236b00b3996cd7731c2 
   clients/src/main/java/org/apache/kafka/common/metrics/Sensor.java 
 ca823fd4639523018311b814fde69b6177e73b97 
   
 clients/src/main/java/org/apache/kafka/common/metrics/stats/Percentiles.java 
 78c93e88fa0b886b8a618e80dfd86ff53f753507 
   
 clients/src/main/java/org/apache/kafka/common/metrics/stats/SampledStat.java 
 b341b7daaa10204906d78b812fb05fd27bc69373 
   clients/src/main/java/org/apache/kafka/common/network/Selector.java 
 aaf60c98c2c0f4513a8d65ee0db67953a529d598 
   clients/src/main/java/org/apache/kafka/common/protocol/Errors.java 
 4c0ecc3badd99727b5bd9d430364e61c184e0923 
   
 clients/src/main/java/org/apache/kafka/common/protocol/SecurityProtocol.java 
 dab1a94dd29563688b6ecf4eeb0e180b06049d3f 
   

Re: Review Request 36345: Patch for KAFKA-2322

2015-07-10 Thread Mayuresh Gharat

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/36345/#review91324
---

Ship it!


Ship It!

- Mayuresh Gharat


On July 9, 2015, 9:05 a.m., Ismael Juma wrote:
 
 ---
 This is an automatically generated e-mail. To reply, visit:
 https://reviews.apache.org/r/36345/
 ---
 
 (Updated July 9, 2015, 9:05 a.m.)
 
 
 Review request for kafka.
 
 
 Bugs: KAFKA-2322
 https://issues.apache.org/jira/browse/KAFKA-2322
 
 
 Repository: kafka
 
 
 Description
 ---
 
 kafka-2322; Use multi-catch to reduce redundancy
 
 
 kafka-2322; Use try with resources instead of try/finally
 
 It's more concise and handles the exception from `close`
 better.
 
 
 Diffs
 -
 
   clients/src/main/java/org/apache/kafka/clients/ClientUtils.java 
 0d68bf1e1e90fe9d5d4397ddf817b9a9af8d9f7a 
   clients/src/main/java/org/apache/kafka/clients/ClusterConnectionStates.java 
 9ebda5eae5936a6b0897e74cfb231803c9d6a2da 
   clients/src/main/java/org/apache/kafka/clients/InFlightRequests.java 
 15d00d4e484bb5d51a9ae6857ed6e024a2cc1820 
   clients/src/main/java/org/apache/kafka/clients/Metadata.java 
 0387f2602c93a62cd333f1b3c569ca6b66b5b779 
   clients/src/main/java/org/apache/kafka/clients/NetworkClient.java 
 48fe7961e2215372d8033ece4af739ea06c6457b 
   clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerConfig.java 
 daff34db5bf2144e9dc274b23dc56b88f4efafdc 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerRecords.java 
 eb75d2e797e3aa3992e4cf74b12f51c8f1545e02 
   clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java 
 7aa076084c894bb8f47b9df2c086475b06f47060 
   clients/src/main/java/org/apache/kafka/clients/consumer/MockConsumer.java 
 46e26a665a22625d50888efa7b53472279f36e79 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/internals/Coordinator.java
  c1c8172cd45f6715262f9a6f497a7b1797a834a3 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/internals/Fetcher.java
  695eaf63db9a5fa20dc2ca68957901462a96cd96 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/internals/RequestFuture.java
  13fc9af7392b4ade958daf3b0c9a165ddda351a6 
   
 clients/src/main/java/org/apache/kafka/clients/consumer/internals/SubscriptionState.java
  683745304c671952ff566f23b5dd4cf3ab75377a 
   clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java 
 03b8dd23df63a8d8a117f02eabcce4a2d48c44f7 
   clients/src/main/java/org/apache/kafka/clients/producer/MockProducer.java 
 36e7ffa2a0a0b9bfaa41c22feb1be8ae476ab321 
   clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java 
 aa264202f2724907924985a5ecbe74afc4c6c04b 
   
 clients/src/main/java/org/apache/kafka/clients/producer/internals/BufferPool.java
  4cb1e50d6c4ed55241aeaef1d3af09def5274103 
   
 clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordAccumulator.java
  a152bd7697dca55609a9ec4cfe0a82c10595fbc3 
   
 clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordBatch.java
  06182db1c3a5da85648199b4c0c98b80ea7c6c0c 
   
 clients/src/main/java/org/apache/kafka/clients/producer/internals/Sender.java 
 0baf16e55046a2f49f6431e01d52c323c95eddf0 
   
 clients/src/main/java/org/apache/kafka/clients/tools/ProducerPerformance.java 
 13f4d5958052afcc8ad66eacbcae50b6fd149398 
   clients/src/main/java/org/apache/kafka/common/Cluster.java 
 60594a7dce90130911a626ea80cf80d815aeb46e 
   clients/src/main/java/org/apache/kafka/common/MetricName.java 
 04b4a09badd5157a426812b78d491248a4d38fba 
   clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java 
 bae528d31516679bed88ee61b408f209f185a8cc 
   clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java 
 4170bcc7def5b50d8aa20e8e84089c35b705b527 
   clients/src/main/java/org/apache/kafka/common/metrics/JmxReporter.java 
 6b9590c418aedd2727544c5dd23c017b4b72467a 
   clients/src/main/java/org/apache/kafka/common/metrics/Metrics.java 
 5f6caf957e3bd3789e575236b00b3996cd7731c2 
   clients/src/main/java/org/apache/kafka/common/metrics/Sensor.java 
 ca823fd4639523018311b814fde69b6177e73b97 
   
 clients/src/main/java/org/apache/kafka/common/metrics/stats/Percentiles.java 
 78c93e88fa0b886b8a618e80dfd86ff53f753507 
   
 clients/src/main/java/org/apache/kafka/common/metrics/stats/SampledStat.java 
 b341b7daaa10204906d78b812fb05fd27bc69373 
   clients/src/main/java/org/apache/kafka/common/network/Selector.java 
 aaf60c98c2c0f4513a8d65ee0db67953a529d598 
   clients/src/main/java/org/apache/kafka/common/protocol/Errors.java 
 4c0ecc3badd99727b5bd9d430364e61c184e0923 
   
 clients/src/main/java/org/apache/kafka/common/protocol/SecurityProtocol.java 
 dab1a94dd29563688b6ecf4eeb0e180b06049d3f 
   

Re: Review Request 36345: Patch for KAFKA-2322

2015-07-09 Thread Ismael Juma

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/36345/
---

(Updated July 9, 2015, 9:05 a.m.)


Review request for kafka.


Bugs: KAFKA-2322
https://issues.apache.org/jira/browse/KAFKA-2322


Repository: kafka


Description
---

kafka-2322; Use multi-catch to reduce redundancy


kafka-2322; Use try with resources instead of try/finally

It's more concise and handles the exception from `close`
better.


Diffs
-

  clients/src/main/java/org/apache/kafka/clients/ClientUtils.java 
0d68bf1e1e90fe9d5d4397ddf817b9a9af8d9f7a 
  clients/src/main/java/org/apache/kafka/clients/ClusterConnectionStates.java 
9ebda5eae5936a6b0897e74cfb231803c9d6a2da 
  clients/src/main/java/org/apache/kafka/clients/InFlightRequests.java 
15d00d4e484bb5d51a9ae6857ed6e024a2cc1820 
  clients/src/main/java/org/apache/kafka/clients/Metadata.java 
0387f2602c93a62cd333f1b3c569ca6b66b5b779 
  clients/src/main/java/org/apache/kafka/clients/NetworkClient.java 
48fe7961e2215372d8033ece4af739ea06c6457b 
  clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerConfig.java 
daff34db5bf2144e9dc274b23dc56b88f4efafdc 
  clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerRecords.java 
eb75d2e797e3aa3992e4cf74b12f51c8f1545e02 
  clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java 
7aa076084c894bb8f47b9df2c086475b06f47060 
  clients/src/main/java/org/apache/kafka/clients/consumer/MockConsumer.java 
46e26a665a22625d50888efa7b53472279f36e79 
  
clients/src/main/java/org/apache/kafka/clients/consumer/internals/Coordinator.java
 c1c8172cd45f6715262f9a6f497a7b1797a834a3 
  
clients/src/main/java/org/apache/kafka/clients/consumer/internals/Fetcher.java 
695eaf63db9a5fa20dc2ca68957901462a96cd96 
  
clients/src/main/java/org/apache/kafka/clients/consumer/internals/RequestFuture.java
 13fc9af7392b4ade958daf3b0c9a165ddda351a6 
  
clients/src/main/java/org/apache/kafka/clients/consumer/internals/SubscriptionState.java
 683745304c671952ff566f23b5dd4cf3ab75377a 
  clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java 
03b8dd23df63a8d8a117f02eabcce4a2d48c44f7 
  clients/src/main/java/org/apache/kafka/clients/producer/MockProducer.java 
36e7ffa2a0a0b9bfaa41c22feb1be8ae476ab321 
  clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java 
aa264202f2724907924985a5ecbe74afc4c6c04b 
  
clients/src/main/java/org/apache/kafka/clients/producer/internals/BufferPool.java
 4cb1e50d6c4ed55241aeaef1d3af09def5274103 
  
clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordAccumulator.java
 a152bd7697dca55609a9ec4cfe0a82c10595fbc3 
  
clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordBatch.java
 06182db1c3a5da85648199b4c0c98b80ea7c6c0c 
  clients/src/main/java/org/apache/kafka/clients/producer/internals/Sender.java 
0baf16e55046a2f49f6431e01d52c323c95eddf0 
  clients/src/main/java/org/apache/kafka/clients/tools/ProducerPerformance.java 
13f4d5958052afcc8ad66eacbcae50b6fd149398 
  clients/src/main/java/org/apache/kafka/common/Cluster.java 
60594a7dce90130911a626ea80cf80d815aeb46e 
  clients/src/main/java/org/apache/kafka/common/MetricName.java 
04b4a09badd5157a426812b78d491248a4d38fba 
  clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java 
bae528d31516679bed88ee61b408f209f185a8cc 
  clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java 
4170bcc7def5b50d8aa20e8e84089c35b705b527 
  clients/src/main/java/org/apache/kafka/common/metrics/JmxReporter.java 
6b9590c418aedd2727544c5dd23c017b4b72467a 
  clients/src/main/java/org/apache/kafka/common/metrics/Metrics.java 
5f6caf957e3bd3789e575236b00b3996cd7731c2 
  clients/src/main/java/org/apache/kafka/common/metrics/Sensor.java 
ca823fd4639523018311b814fde69b6177e73b97 
  clients/src/main/java/org/apache/kafka/common/metrics/stats/Percentiles.java 
78c93e88fa0b886b8a618e80dfd86ff53f753507 
  clients/src/main/java/org/apache/kafka/common/metrics/stats/SampledStat.java 
b341b7daaa10204906d78b812fb05fd27bc69373 
  clients/src/main/java/org/apache/kafka/common/network/Selector.java 
aaf60c98c2c0f4513a8d65ee0db67953a529d598 
  clients/src/main/java/org/apache/kafka/common/protocol/Errors.java 
4c0ecc3badd99727b5bd9d430364e61c184e0923 
  clients/src/main/java/org/apache/kafka/common/protocol/SecurityProtocol.java 
dab1a94dd29563688b6ecf4eeb0e180b06049d3f 
  clients/src/main/java/org/apache/kafka/common/protocol/types/Schema.java 
3a14ac0fb350a9d60b5cba82d55d4656cb5be8d7 
  clients/src/main/java/org/apache/kafka/common/requests/FetchRequest.java 
df073a0e76cc5cc731861b9604d0e19a928970e0 
  clients/src/main/java/org/apache/kafka/common/requests/FetchResponse.java 
eb8951fba48c335095cc43fc3672de1c733e07ff 
  clients/src/main/java/org/apache/kafka/common/requests/JoinGroupRequest.java 
1ffe0760b40c4c669ffceedd231a2129e0eb9b24 
  

Review Request 36345: Patch for KAFKA-2322

2015-07-09 Thread Ismael Juma

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/36345/
---

Review request for kafka.


Bugs: KAFKA-2322
https://issues.apache.org/jira/browse/KAFKA-2322


Repository: kafka


Description
---

kafka-2322; Use multi-catch to reduce redundancy


kafka-2322; Use try with resources instead of try/finally

It's more concise and handles the exception from `close`
better.


Diffs
-

  clients/src/main/java/org/apache/kafka/clients/ClientUtils.java 
0d68bf1e1e90fe9d5d4397ddf817b9a9af8d9f7a 
  clients/src/main/java/org/apache/kafka/clients/ClusterConnectionStates.java 
9ebda5eae5936a6b0897e74cfb231803c9d6a2da 
  clients/src/main/java/org/apache/kafka/clients/InFlightRequests.java 
15d00d4e484bb5d51a9ae6857ed6e024a2cc1820 
  clients/src/main/java/org/apache/kafka/clients/Metadata.java 
0387f2602c93a62cd333f1b3c569ca6b66b5b779 
  clients/src/main/java/org/apache/kafka/clients/NetworkClient.java 
48fe7961e2215372d8033ece4af739ea06c6457b 
  clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerConfig.java 
daff34db5bf2144e9dc274b23dc56b88f4efafdc 
  clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerRecords.java 
eb75d2e797e3aa3992e4cf74b12f51c8f1545e02 
  clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java 
7aa076084c894bb8f47b9df2c086475b06f47060 
  clients/src/main/java/org/apache/kafka/clients/consumer/MockConsumer.java 
46e26a665a22625d50888efa7b53472279f36e79 
  
clients/src/main/java/org/apache/kafka/clients/consumer/internals/Coordinator.java
 c1c8172cd45f6715262f9a6f497a7b1797a834a3 
  
clients/src/main/java/org/apache/kafka/clients/consumer/internals/Fetcher.java 
695eaf63db9a5fa20dc2ca68957901462a96cd96 
  
clients/src/main/java/org/apache/kafka/clients/consumer/internals/RequestFuture.java
 13fc9af7392b4ade958daf3b0c9a165ddda351a6 
  
clients/src/main/java/org/apache/kafka/clients/consumer/internals/SubscriptionState.java
 683745304c671952ff566f23b5dd4cf3ab75377a 
  clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java 
03b8dd23df63a8d8a117f02eabcce4a2d48c44f7 
  clients/src/main/java/org/apache/kafka/clients/producer/MockProducer.java 
36e7ffa2a0a0b9bfaa41c22feb1be8ae476ab321 
  clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java 
aa264202f2724907924985a5ecbe74afc4c6c04b 
  
clients/src/main/java/org/apache/kafka/clients/producer/internals/BufferPool.java
 4cb1e50d6c4ed55241aeaef1d3af09def5274103 
  
clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordAccumulator.java
 a152bd7697dca55609a9ec4cfe0a82c10595fbc3 
  
clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordBatch.java
 06182db1c3a5da85648199b4c0c98b80ea7c6c0c 
  clients/src/main/java/org/apache/kafka/clients/producer/internals/Sender.java 
0baf16e55046a2f49f6431e01d52c323c95eddf0 
  clients/src/main/java/org/apache/kafka/clients/tools/ProducerPerformance.java 
13f4d5958052afcc8ad66eacbcae50b6fd149398 
  clients/src/main/java/org/apache/kafka/common/Cluster.java 
60594a7dce90130911a626ea80cf80d815aeb46e 
  clients/src/main/java/org/apache/kafka/common/MetricName.java 
04b4a09badd5157a426812b78d491248a4d38fba 
  clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java 
bae528d31516679bed88ee61b408f209f185a8cc 
  clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java 
4170bcc7def5b50d8aa20e8e84089c35b705b527 
  clients/src/main/java/org/apache/kafka/common/metrics/JmxReporter.java 
6b9590c418aedd2727544c5dd23c017b4b72467a 
  clients/src/main/java/org/apache/kafka/common/metrics/Metrics.java 
5f6caf957e3bd3789e575236b00b3996cd7731c2 
  clients/src/main/java/org/apache/kafka/common/metrics/Sensor.java 
ca823fd4639523018311b814fde69b6177e73b97 
  clients/src/main/java/org/apache/kafka/common/metrics/stats/Percentiles.java 
78c93e88fa0b886b8a618e80dfd86ff53f753507 
  clients/src/main/java/org/apache/kafka/common/metrics/stats/SampledStat.java 
b341b7daaa10204906d78b812fb05fd27bc69373 
  clients/src/main/java/org/apache/kafka/common/network/Selector.java 
aaf60c98c2c0f4513a8d65ee0db67953a529d598 
  clients/src/main/java/org/apache/kafka/common/protocol/Errors.java 
4c0ecc3badd99727b5bd9d430364e61c184e0923 
  clients/src/main/java/org/apache/kafka/common/protocol/SecurityProtocol.java 
dab1a94dd29563688b6ecf4eeb0e180b06049d3f 
  clients/src/main/java/org/apache/kafka/common/protocol/types/Schema.java 
3a14ac0fb350a9d60b5cba82d55d4656cb5be8d7 
  clients/src/main/java/org/apache/kafka/common/requests/FetchRequest.java 
df073a0e76cc5cc731861b9604d0e19a928970e0 
  clients/src/main/java/org/apache/kafka/common/requests/FetchResponse.java 
eb8951fba48c335095cc43fc3672de1c733e07ff 
  clients/src/main/java/org/apache/kafka/common/requests/JoinGroupRequest.java 
1ffe0760b40c4c669ffceedd231a2129e0eb9b24