This is great @s1monw ! 
Unfortunately it covers only the cases where we submit the task in the transport action, using directly the Java API request class (extends AcknowledgedRequest). In a lot of cases we use a MetaDataService and we translate the request to the internal one that doesn't need to be serialized etc. which extends ClusterStateUpdateRequest.

If we either always use a metadataservice or never use it, we can apply this approach to all cluster state updates that support ack. I vote for the internal layer that uses the metadataservice all the time (`<T extends ClusterStateUpdateRequest, R extends ClusterStateUpdateResponse>`)