> Q. Doug, Any reason why you didn't define the @Nullable in common?
That would only make sense if the rest of Avro's reflect code were in common, since it's the reflect code that interprets this annotation. Hadoop is the primary user of Avro reflect, but I don't think the only user.
> Will this prevent us from putting the DatanodeProtocol in a different port?
No more so than the current implementation does. I don't know what the plan is to implement multiple ports. The obvious approach would be to run multiple org.apache.hadoop.ipc.Servers, each serving different objects implementing different protocols. That would work fine with Avro too.
> Was the super-interface added to avoid the duplicate "versioned" interface?
No, the super-interface was added because Avro needs to know the full set of methods that a given service implements. But Namenode has lots of other public methods that are not protocol methods, so we can't otherwise determine the intended set of protocol methods.