[ https://issues.apache.org/jira/browse/CASSANDRA-20190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17937122#comment-17937122 ]
Dmitry Konstantinov commented on CASSANDRA-20190: ------------------------------------------------- Bloom filter: * write and store flow ** org.apache.cassandra.utils.obs.OffHeapBitSet#set(long) - uses Memory.setByte(..), so it is order agnostic ** org.apache.cassandra.utils.obs.OffHeapBitSet#serialize - writes to output stream memory as a sequence of buffers, by copying the buffers as is * load and read flow ** org.apache.cassandra.utils.BloomFilterSerializer#deserialize - uses FBUtilities.copy(in, new MemoryOutputStream(memory), byteCount) to load memory as is from the input stream ** org.apache.cassandra.utils.obs.IBitSet#get uses org.apache.cassandra.io.util.Memory#getByte, so it is order agnostic So, it is agnostic to the memory order in Memory and it will not be affected by using LE in Memory#get/putXByByte > MemoryUtil.setInt/getInt and similar use the wrong endianness > ------------------------------------------------------------- > > Key: CASSANDRA-20190 > URL: https://issues.apache.org/jira/browse/CASSANDRA-20190 > Project: Apache Cassandra > Issue Type: Bug > Components: Local/Other > Reporter: Branimir Lambov > Assignee: Dmitry Konstantinov > Priority: Normal > Time Spent: 1h > Remaining Estimate: 0h > > `NativeCell`, `NativeClustering` and `NativeDecoratedKey` use the above > methods from `MemoryUtil` to write and read data from native memory. As far > as I can see they are meant to write data in big endian. They do not (they > always correct to little endian). > Moreover, they disagree with their `ByByte` versions on big-endian machines > (which is only likely an issue on aligned-access architectures (x86 and arm > should be fine)). > The same is true for the methods in `Memory`, used by compression metadata as > well as index summaries. > We need to verify that this does not cause any problems, and to change the > methods to behave as expected and document the behaviour by explicitly using > `ByteOrder.LITTLE_ENDIAN` for any data that may have been persisted on disk > with the wrong endianness. > > The current MemoryUtil behaviour (before the fix): > ||Native > order||MemoryUtil.setX||MemoryUtil.setXByByte||MemoryUtil.getX||MemoryUtil.getXByByte|| > |BE|LE|BE|LE|BE| > |LE|LE|LE|LE|LE| > shortly: MemoryUtil.setX/getX is LE, MemoryUtil.setXByByte/getXByByte is > Native -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org