Hey team: When I read the BufferedMutator#mutate related code, this part of the code confused me.
At present, BufferedMutator#mutate only remind the user in the comment that it only supports Put/Delete, but it is not checked in the code implementation, and we know that the BufferedMutator is a delegation of AsyncBufferedMutator. After in-depth analysis, although BufferedMutator is a delegation of AsyncBufferedMutator, BufferedMutatorOverAsyncBufferedMutator#mutate does not directly call AsyncBufferedMutator#mutate, instead AsyncBufferedMutatorImpl#mutate(List) is called. However, AsyncBufferedMutatorImpl#mutate(List) is a public api, and there is no description of the mutate type restriction in the comments. Besides, AsyncBufferedMutatorImpl#mutate(List) will call the AsyncTable#batch(List) method, which supports the mutation types including Get, Put, Delete, Increment, Append, and RowMutations. The logic of this part is really a bit confusing. Can we discuss and optimize this part of the code? Thanks.