There seems to be a bit of duplication in the Compare protobuf definition - it contains both an explicit enum CompareTarget, as well as a oneof target_union. I'm not an expert on protobuf, nor etcd, but is there any reason why CompareTarget is necessary? What happens if I send the server an inconsistent Compare (ie, where CompareTarget does not match target_union)?