@@ -858,7 +858,7 @@ func (w *layoutWriter) Abort() {
858
858
// WriteDataBlock constructs a trailer for the provided data block and writes
859
859
// the block and trailer to the writer. It returns the block's handle.
860
860
func (w * layoutWriter ) WriteDataBlock (b []byte , buf * blockBuf ) (block.Handle , error ) {
861
- return w .writeBlock (b , blockkind .SSTableData , & w . compressor , buf )
861
+ return w .writeBlock (b , blockkind .SSTableData , buf )
862
862
}
863
863
864
864
// WritePrecompressedDataBlock writes a pre-compressed data block and its
@@ -873,7 +873,7 @@ func (w *layoutWriter) WritePrecompressedDataBlock(blk block.PhysicalBlock) (blo
873
873
// the last-written index block's handle and adds it to the file's meta index
874
874
// when the writer is finished.
875
875
func (w * layoutWriter ) WriteIndexBlock (b []byte ) (block.Handle , error ) {
876
- h , err := w .writeBlock (b , blockkind .SSTableIndex , & w .compressor , & w . buf )
876
+ h , err := w .writeBlock (b , blockkind .SSTableIndex , & w .buf )
877
877
if err == nil {
878
878
w .lastIndexBlockHandle = h
879
879
}
@@ -888,51 +888,56 @@ func (w *layoutWriter) WriteFilterBlock(f filterWriter) (bh block.Handle, err er
888
888
if err != nil {
889
889
return block.Handle {}, err
890
890
}
891
- return w .writeNamedBlock (b , blockkind .Filter , block . NoopCompressor , f .metaName ())
891
+ return w .writeNamedBlockUncompressed (b , blockkind .Filter , f .metaName ())
892
892
}
893
893
894
894
// WritePropertiesBlock constructs a trailer for the provided properties block
895
895
// and writes the block and trailer to the writer. It automatically adds the
896
896
// properties block to the file's meta index when the writer is finished.
897
- func (w * layoutWriter ) WritePropertiesBlock (b []byte ) (block.Handle , error ) {
898
- compressor := & w .compressor
897
+ func (w * layoutWriter ) WritePropertiesBlock (b []byte ) (bh block.Handle , err error ) {
899
898
// In v6 and earlier, we use a row oriented block with an infinite restart
900
899
// interval, which provides very good prefix compression. Since v7, we use the
901
900
// columnar format without prefix compression for this block; we enable block
902
901
// compression to compensate.
903
902
if w .tableFormat < TableFormatPebblev7 {
904
- compressor = block .NoopCompressor
903
+ bh , err = w .writeBlockUncompressed (b , blockkind .Metadata , & w .buf )
904
+ } else {
905
+ bh , err = w .writeBlock (b , blockkind .Metadata , & w .buf )
906
+ }
907
+ if err == nil {
908
+ w .recordToMetaindex (metaPropertiesName , bh )
905
909
}
906
- return w . writeNamedBlock ( b , blockkind . Metadata , compressor , metaPropertiesName )
910
+ return bh , err
907
911
}
908
912
909
913
// WriteRangeKeyBlock constructs a trailer for the provided range key block and
910
914
// writes the block and trailer to the writer. It automatically adds the range
911
915
// key block to the file's meta index when the writer is finished.
912
916
func (w * layoutWriter ) WriteRangeKeyBlock (b []byte ) (block.Handle , error ) {
913
- return w .writeNamedBlock (b , blockkind .RangeKey , block . NoopCompressor , metaRangeKeyName )
917
+ return w .writeNamedBlockUncompressed (b , blockkind .RangeKey , metaRangeKeyName )
914
918
}
915
919
916
920
// WriteBlobRefIndexBlock constructs a trailer for the provided blob reference
917
921
// index block and writes the block and trailer to the writer. It automatically
918
922
// adds the blob reference index block to the file's meta index when the writer
919
923
// is finished.
920
924
func (w * layoutWriter ) WriteBlobRefIndexBlock (b []byte ) (block.Handle , error ) {
921
- return w .writeNamedBlock (b , blockkind .BlobReferenceValueLivenessIndex , & w . compressor , metaBlobRefIndexName )
925
+ return w .writeNamedBlockUncompressed (b , blockkind .BlobReferenceValueLivenessIndex , metaBlobRefIndexName )
922
926
}
923
927
924
928
// WriteRangeDeletionBlock constructs a trailer for the provided range deletion
925
929
// block and writes the block and trailer to the writer. It automatically adds
926
930
// the range deletion block to the file's meta index when the writer is
927
931
// finished.
928
932
func (w * layoutWriter ) WriteRangeDeletionBlock (b []byte ) (block.Handle , error ) {
929
- return w .writeNamedBlock (b , blockkind .RangeDel , block . NoopCompressor , metaRangeDelV2Name )
933
+ return w .writeNamedBlockUncompressed (b , blockkind .RangeDel , metaRangeDelV2Name )
930
934
}
931
935
932
- func (w * layoutWriter ) writeNamedBlock (
933
- b []byte , kind block.Kind , compressor * block.Compressor , name string ,
936
+ // writeNamedBlockUncompressed writes a block without compressing it and adds it to the metaindex.
937
+ func (w * layoutWriter ) writeNamedBlockUncompressed (
938
+ b []byte , kind block.Kind , name string ,
934
939
) (bh block.Handle , err error ) {
935
- bh , err = w .writeBlock (b , kind , compressor , & w .buf )
940
+ bh , err = w .writeBlockUncompressed (b , kind , & w .buf )
936
941
if err == nil {
937
942
w .recordToMetaindex (name , bh )
938
943
}
@@ -960,10 +965,17 @@ func (w *layoutWriter) WriteValueIndexBlock(
960
965
}
961
966
962
967
// writeBlock checksums, compresses, and writes out a block.
963
- func (w * layoutWriter ) writeBlock (
964
- b []byte , kind block.Kind , compressor * block.Compressor , buf * blockBuf ,
968
+ func (w * layoutWriter ) writeBlock (b []byte , kind block.Kind , buf * blockBuf ) (block.Handle , error ) {
969
+ pb := block .CompressAndChecksum (& buf .dataBuf , b , kind , & w .compressor , & buf .checksummer )
970
+ h , err := w .writePrecompressedBlock (pb )
971
+ return h , err
972
+ }
973
+
974
+ // writeBlock checksums and writes out a block.
975
+ func (w * layoutWriter ) writeBlockUncompressed (
976
+ b []byte , kind block.Kind , buf * blockBuf ,
965
977
) (block.Handle , error ) {
966
- pb := block .CompressAndChecksum (& buf .dataBuf , b , kind , compressor , & buf .checksummer )
978
+ pb := block .CopyAndChecksum (& buf .dataBuf , b , kind , & w . compressor , & buf .checksummer )
967
979
h , err := w .writePrecompressedBlock (pb )
968
980
return h , err
969
981
}
@@ -1047,7 +1059,7 @@ func (w *layoutWriter) Finish() (size uint64, err error) {
1047
1059
}
1048
1060
b = bw .Finish ()
1049
1061
}
1050
- metaIndexHandle , err := w .writeBlock (b , blockkind .Metadata , block . NoopCompressor , & w .buf )
1062
+ metaIndexHandle , err := w .writeBlockUncompressed (b , blockkind .Metadata , & w .buf )
1051
1063
if err != nil {
1052
1064
return 0 , err
1053
1065
}
0 commit comments