Here are a couple quick ideas off the top of my head:
1) use a priority queue inside the RPC server, and allow the constructor of the server to specify a Comparator<Invocation> to decide which things to go first. We can then introspect the RPCs while they're in the queue to put META requests first.
2) allow an RPC server to specify a Function<Invocation,Long> which returns a priority level for any incoming RPC. This would allow not just ordering like comparator above, but also the ability to reserve pools of handlers for different RPC tiers. (eg we can say any request to META has a priority 1000, anything to normal tables is < 500, and we will always reserve a thread pool of 5 handlers for META access)
3) give region servers TWO rpc ports, with separate handler pools - probably a big mess since we have assumptions that we only have one RPC port per server. But this is what HDFS is doing now and seems to work.
I kind of like option 2 above, and it doesn't seem like it would be incredibly difficult.