Skip to content

Commit 2431e0d

Browse files
WarrenGreenlindong28
authored andcommitted
ProduceService and ConsumerService should not allow certain properties in the properties override config (linkedin#34)
1 parent 424d3f8 commit 2431e0d

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

services/src/main/java/com/linkedin/kmf/services/ConsumeService.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
import com.linkedin.kmf.consumer.BaseConsumerRecord;
1717
import com.linkedin.kmf.consumer.NewConsumer;
1818
import com.linkedin.kmf.consumer.OldConsumer;
19+
import com.linkedin.kmf.services.configs.ProduceServiceConfig;
1920
import org.apache.avro.generic.GenericRecord;
2021
import org.apache.kafka.clients.consumer.ConsumerConfig;
2122
import org.apache.kafka.common.MetricName;
23+
import org.apache.kafka.common.config.ConfigException;
2224
import org.apache.kafka.common.metrics.JmxReporter;
2325
import org.apache.kafka.common.metrics.Measurable;
2426
import org.apache.kafka.common.metrics.MetricConfig;
@@ -47,6 +49,8 @@
4749
public class ConsumeService implements Service {
4850
private static final Logger LOG = LoggerFactory.getLogger(ConsumeService.class);
4951
private static final String METRIC_GROUP_NAME = "consume-service";
52+
private static final String[] NONOVERRIDABLE_PROPERTIES = new String[]{ ConsumeServiceConfig.BOOTSTRAP_SERVERS_CONFIG,
53+
ConsumeServiceConfig.ZOOKEEPER_CONNECT_CONFIG };
5054

5155
private final String _name;
5256
private final ConsumeMetrics _sensors;
@@ -59,7 +63,8 @@ public class ConsumeService implements Service {
5963

6064
public ConsumeService(Map<String, Object> props, String name) throws Exception {
6165
_name = name;
62-
Map consumerPropsOverride = (Map) props.get(ConsumeServiceConfig.CONSUMER_PROPS_CONFIG);
66+
Map consumerPropsOverride = props.containsKey(ConsumeServiceConfig.CONSUMER_PROPS_CONFIG) ?
67+
(Map) props.get(ConsumeServiceConfig.CONSUMER_PROPS_CONFIG) : new HashMap<>();
6368
ConsumeServiceConfig config = new ConsumeServiceConfig(props);
6469
String topic = config.getString(ConsumeServiceConfig.TOPIC_CONFIG);
6570
String zkConnect = config.getString(ConsumeServiceConfig.ZOOKEEPER_CONNECT_CONFIG);
@@ -70,6 +75,12 @@ public ConsumeService(Map<String, Object> props, String name) throws Exception {
7075
_latencyPercentileGranularityMs = config.getInt(ConsumeServiceConfig.LATENCY_PERCENTILE_GRANULARITY_MS_CONFIG);
7176
_running = new AtomicBoolean(false);
7277

78+
for (String property: NONOVERRIDABLE_PROPERTIES) {
79+
if (consumerPropsOverride.containsKey(property)) {
80+
throw new ConfigException("Override must not contain " + property + " config.");
81+
}
82+
}
83+
7384
Properties consumerProps = new Properties();
7485

7586
// Assign default config. This has the lowest priority.
@@ -94,8 +105,7 @@ public ConsumeService(Map<String, Object> props, String name) throws Exception {
94105
consumerProps.put("zookeeper.connect", zkConnect);
95106

96107
// Assign config specified for consumer. This has the highest priority.
97-
if (consumerPropsOverride != null)
98-
consumerProps.putAll(consumerPropsOverride);
108+
consumerProps.putAll(consumerPropsOverride);
99109

100110
_consumer = (KMBaseConsumer) Class.forName(consumerClassName).getConstructor(String.class, Properties.class).newInstance(topic, consumerProps);
101111

services/src/main/java/com/linkedin/kmf/services/ProduceService.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.kafka.clients.producer.ProducerConfig;
2323
import org.apache.kafka.clients.producer.RecordMetadata;
2424
import org.apache.kafka.common.MetricName;
25+
import org.apache.kafka.common.config.ConfigException;
2526
import org.apache.kafka.common.metrics.JmxReporter;
2627
import org.apache.kafka.common.metrics.Measurable;
2728
import org.apache.kafka.common.metrics.MetricConfig;
@@ -48,6 +49,8 @@
4849
public class ProduceService implements Service {
4950
private static final Logger LOG = LoggerFactory.getLogger(ProduceService.class);
5051
private static final String METRIC_GROUP_NAME = "produce-service";
52+
private static final String[] NONOVERRIDABLE_PROPERTIES = new String[]{ ProduceServiceConfig.BOOTSTRAP_SERVERS_CONFIG,
53+
ProduceServiceConfig.ZOOKEEPER_CONNECT_CONFIG };
5154

5255
private final String _name;
5356
private final ProduceMetrics _sensors;
@@ -72,7 +75,6 @@ public class ProduceService implements Service {
7275

7376
public ProduceService(Map<String, Object> props, String name) throws Exception {
7477
_name = name;
75-
_producerPropsOverride = (Map) props.get(ProduceServiceConfig.PRODUCER_PROPS_CONFIG);
7678
ProduceServiceConfig config = new ProduceServiceConfig(props);
7779
_zkConnect = config.getString(ProduceServiceConfig.ZOOKEEPER_CONNECT_CONFIG);
7880
_brokerList = config.getString(ProduceServiceConfig.BOOTSTRAP_SERVERS_CONFIG);
@@ -86,6 +88,14 @@ public ProduceService(Map<String, Object> props, String name) throws Exception {
8688
_partitionNum = new AtomicInteger(0);
8789
_running = new AtomicBoolean(false);
8890
_nextIndexPerPartition = new ConcurrentHashMap<>();
91+
_producerPropsOverride = props.containsKey(ProduceServiceConfig.PRODUCER_PROPS_CONFIG) ?
92+
(Map) props.get(ProduceServiceConfig.PRODUCER_PROPS_CONFIG) : new HashMap<>();
93+
94+
for (String property: NONOVERRIDABLE_PROPERTIES) {
95+
if (_producerPropsOverride.containsKey(property)) {
96+
throw new ConfigException("Override must not contain " + property + " config.");
97+
}
98+
}
8999

90100
double partitionsToBrokersRatio = config.getDouble(CommonServiceConfig.PARTITIONS_TO_BROKER_RATO_CONFIG);
91101
int topicReplicationFactor = config.getInt(ProduceServiceConfig.TOPIC_REPLICATION_FACTOR_CONFIG);
@@ -147,8 +157,7 @@ private void initializeProducer() throws Exception {
147157
producerProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, _brokerList);
148158

149159
// Assign config specified for producer. This has the highest priority.
150-
if (_producerPropsOverride != null)
151-
producerProps.putAll(_producerPropsOverride);
160+
producerProps.putAll(_producerPropsOverride);
152161

153162
_producer = (KMBaseProducer) Class.forName(_producerClassName).getConstructor(Properties.class).newInstance(producerProps);
154163
LOG.info("Producer is initialized.");

0 commit comments

Comments
 (0)