Looking at the (non-deprecated) methods in HRegionInterface, there are two that could return a status: batchUpdate and close (a scanner).
However, the remainder return a value.
The Java paradigm seems (to me at least) to be that methods return values or void and not a status code. Errors are handled by throwing exceptions. This is the paradigm that is followed by the other Hadoop RPC protocols.
A client sending a request to the wrong server, either due to a bug or because the region has moved to another server feels like an error to me, and throwing an exception to get the client to 'recalibrate' seems ok.
The server really has no other choice because input parameters are final (any modification to them are not returned to the client).
The only other thing we could do is wrap each returned value in another Writable which always contains a "status message". This does not feel like the right paradigm to me.
The only other solution I can think of is to make two RPCs for every one we make today. The first asks the server, "Are you serving this region?", and based on that answer either sends the "real" message or "recalibrates". Seems highly inefficient to me.
If there are other ideas I have overlooked, please comment here.