@@ -790,24 +790,21 @@ func (rw *DataBlockRewriter) RewriteSuffixes(
790
790
return start , end , rewritten , nil
791
791
}
792
792
793
- // dataBlockDecoderSize is the size of DataBlockDecoder, round up to 8 bytes.
794
- const dataBlockDecoderSize = (unsafe .Sizeof (DataBlockDecoder {}) + 7 ) &^ 7
793
+ type blockDecoderAndKeySeekerMetadata struct {
794
+ d DataBlockDecoder
795
+ // Pad to ensure KeySeekerMetadata is 8-byte aligned.
796
+ _ [(8 - unsafe .Sizeof (DataBlockDecoder {})% 8 ) % 8 ]byte
797
+ keySchemaMeta KeySeekerMetadata
798
+ }
795
799
796
- // Assert that dataBlockDecoderSize is a multiple of 8 bytes (so that
797
- // KeySeekerMetadata is also aligned).
798
- const _ uint = uint (- (dataBlockDecoderSize % 8 ))
800
+ // Assert that keySchemaMeta is aligned to 8 bytes.
801
+ const _ uint = uint (- (unsafe .Offsetof (blockDecoderAndKeySeekerMetadata {}.keySchemaMeta ) % 8 ))
799
802
800
- // Assert that a DataBlockDecoder and a KeySeekerMetadata can fit inside block.Metadata.
801
- const _ uint = block .MetadataSize - uint (dataBlockDecoderSize ) - KeySeekerMetadataSize
803
+ // Assert that blockDecoderAndKeySeekerMetadata fit inside block.Metadata.
804
+ const _ uint = block .MetadataSize - uint (unsafe . Sizeof ( blockDecoderAndKeySeekerMetadata {}))
802
805
803
806
// InitDataBlockMetadata initializes the metadata for a data block.
804
807
func InitDataBlockMetadata (schema * KeySchema , md * block.Metadata , data []byte ) (err error ) {
805
- type blockDecoderAndKeySeekerMetadata struct {
806
- d DataBlockDecoder
807
- // Pad to ensure KeySeekerMetadata is 8-byte aligned.
808
- _ [dataBlockDecoderSize - unsafe .Sizeof (DataBlockDecoder {})]byte
809
- keySchemaMeta KeySeekerMetadata
810
- }
811
808
metadatas := block.CastMetadataZero [blockDecoderAndKeySeekerMetadata ](md )
812
809
// Initialization can panic; convert panics to corruption errors (so higher
813
810
// layers can add file number and offset information).
@@ -1095,9 +1092,9 @@ func (i *DataBlockIter) InitHandle(
1095
1092
) error {
1096
1093
i .suffixCmp = comparer .ComparePointSuffixes
1097
1094
i .split = comparer .Split
1098
- blockMeta := h .BlockMetadata ()
1099
- i .d = ( * DataBlockDecoder )( unsafe . Pointer ( blockMeta ))
1100
- keySeekerMeta := ( * KeySeekerMetadata )( blockMeta [ unsafe . Sizeof ( DataBlockDecoder {}):])
1095
+ blockMeta := ( * blockDecoderAndKeySeekerMetadata )( unsafe . Pointer ( h .BlockMetadata ()) )
1096
+ i .d = & blockMeta . d
1097
+ keySeekerMeta := & blockMeta . keySchemaMeta
1101
1098
i .h .Release ()
1102
1099
i .h = h
1103
1100
0 commit comments