(Resend: I forgot to actually subscribe before sending originally.) I noticed a difference in behavior between our cluster and our tests running on MiniCluster: when multiple put() calls are made to a Mutation with the same CF, CQ, and CV and no explicit timestamp, on a live cluster only the last one is written, whereas in Mini all of them are.
Of course in most cases it wouldn't matter but if there is a Combiner set on the column (which is the case I am dealing with) then it does. I believe the difference in behavior is due to code in NativeMap._mutate and InMemoryMap.DefaultMap.mutate. In the former if there are multiple ColumnUpdates in a Mutation they all get written with the same mutationCount value; I haven't looked at the C++ map code but I assume that this means that entries with the same CF/CQ/CV/timestamp will overwrite each other. In contrast, in DefaultMap multiple ColumnUpdates are stored with an incrementing kvCount, so the keys will necessarily be distinct. My main question is: which of these is the intended behavior? We'll obviously need to change our code to work with NativeMap's current implementation regardless (since we don't want to use the Java maps on a live cluster), but it would be useful to know if that change is temporary or permanent. My secondary question is whether there is any trick to getting native maps to work in MiniCluster, which would be very helpful for our testing. I changed the configuration XML we use and I can see that it picks up the change - server.Accumulo logs "tserver.memory.maps.native.enabled = true," but NativeMap never logs that it tries to load the library so the setting seems to be dropped somewhere.