Lucas Bradstreet created KAFKA-12791:
----------------------------------------

             Summary: ConcurrentModificationException in KafkaProducer 
constructor
                 Key: KAFKA-12791
                 URL: https://issues.apache.org/jira/browse/KAFKA-12791
             Project: Kafka
          Issue Type: Bug
            Reporter: Lucas Bradstreet


Recently we have noticed multiple instances where KafkaProducers have failed to 
constructe due to the following exception:
{noformat}
org.apache.kafka.common.KafkaException: Failed to construct kafka producer at 
org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:440) 
at 
org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:291) 
at 
org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:318) 
java.base/java.lang.Thread.run(Thread.java:832) Caused by: 
java.util.ConcurrentModificationException at 
java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1584) at 
java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1607) at 
java.base/java.util.AbstractSet.removeAll(AbstractSet.java:171) at 
org.apache.kafka.common.config.AbstractConfig.unused(AbstractConfig.java:221) 
at 
org.apache.kafka.common.config.AbstractConfig.logUnused(AbstractConfig.java:379)
 at 
org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:433) 
... 9 more exception.class:org.apache.kafka.common.KafkaException 
exception.message:Failed to construct kafka producer
{noformat}

It appears that this is due to the fact that `used` below is a synchronized set:



 
{code:java}
public Set<String> unused() {
 Set<String> keys = new HashSet<>(originals.keySet());
 keys.removeAll(used);
 return keys;
}{code}
It appears that `used` is being modified while removeAll is being called. This 
may be due to the way that keys are added to it when used:


{code:java}
protected Object get(String key) {
 if (!values.containsKey(key))
 throw new ConfigException(String.format("Unknown configuration '%s'", key));
 used.add(key);
 return values.get(key);
}{code}
 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to