[ 
https://issues.apache.org/jira/browse/KAFKA-371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13418745#comment-13418745
 ] 

Jay Kreps commented on KAFKA-371:
---------------------------------

Hey Jonathan, I don't think so, but I may have misunderstood. Basically a log 
has two states
 OPEN
 CLOSED

Every time we create a log object we run recovery on it which validates any 
messages since the last know flush point and truncates any partial writes to 
put the log in a known state. This is done as part of log construction so there 
is no way to have a reference to a log until it is known to be valid and ready 
for writes.

Our policy is that we actually kill the instance of the broker if we see an 
IOException while writing to disk (STONITH, if you will), so there is 
effectively no invalid state. The reason for this is that an IO error is 
effectively the same as a broker failure in that it indicates a potentially 
partial or corrupt write. You cannot append to the log in this state, so 
continuing to accept traffic only makes thing worse, the best policy is to die 
and let the other brokers cover things.

Attempt to read or write to a closed log would be a programming error in the 
broker, and should just give an exception about the file being closed, so I 
don't know if we need additional checks there.
                
> Creating topic of empty string puts broker in a bad state
> ---------------------------------------------------------
>
>                 Key: KAFKA-371
>                 URL: https://issues.apache.org/jira/browse/KAFKA-371
>             Project: Kafka
>          Issue Type: Bug
>    Affects Versions: 0.6, 0.7
>            Reporter: Martin Kleppmann
>            Assignee: Jay Kreps
>             Fix For: 0.8
>
>         Attachments: KAFKA-371-0.7.1.patch, KAFKA-371-0.8-v2.patch, 
> KAFKA-371-0.8.patch
>
>
> Using the Java client library, I accidentally published a message where the 
> topic name was the empty string. This put the broker in a bad state where 
> publishing became impossible, and the following exception was logged 10-20 
> times per second:
> 2012-06-21 00:41:30,324 [kafka-processor-3] ERROR kafka.network.Processor  - 
> Closing socket for /127.0.0.1 because of er
> ror
> kafka.common.InvalidTopicException: topic name can't be empty
>         at kafka.log.LogManager.getOrCreateLog(LogManager.scala:165)
>         at 
> kafka.server.KafkaRequestHandlers.kafka$server$KafkaRequestHandlers$$handleProducerRequest(KafkaRequestHandle
> rs.scala:75)
>         at 
> kafka.server.KafkaRequestHandlers.handleProducerRequest(KafkaRequestHandlers.scala:58)
>         at 
> kafka.server.KafkaRequestHandlers$$anonfun$handlerFor$1.apply(KafkaRequestHandlers.scala:43)
>         at 
> kafka.server.KafkaRequestHandlers$$anonfun$handlerFor$1.apply(KafkaRequestHandlers.scala:43)
>         at kafka.network.Processor.handle(SocketServer.scala:289)
>         at kafka.network.Processor.read(SocketServer.scala:312)
>         at kafka.network.Processor.run(SocketServer.scala:207)
>         at java.lang.Thread.run(Thread.java:679)
> Restarting Kafka did not help. I had to manually clear out the bad state in 
> Zookeeper to resolve the problem.
> The broker should not accept a message that would put it in such a bad state.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to