func sendMessageAndExpectAnAck(stream *comm.Stream, dead chan bool, message *messages.Message) { err := stream.WriteMessage(message) if err != nil { log.Printf("Unable to send message to client: %v\n", err) dead <- true return } expectedAck := messages.MessageAck{ Partition: message.Partition, Offset: message.Offset, } acks[expectedAck] = make(chan bool) go func() { select { case _ = <-acks[expectedAck]: break case <-time.After(50 * time.Millisecond): if !message.IsAckRequest { blackHole.inbox <- *message } dead <- true } delete(acks, expectedAck) }() }