@@ -62,6 +62,7 @@ const (
6262 tagRemovedBackingTable = 106
6363 tagNewBlobFile = 107
6464 tagDeletedBlobFile = 108
65+ tagNewBlobFile2 = 109
6566
6667 // The custom tags sub-format used by tagNewFile4 and above. All tags less
6768 // than customTagNonSafeIgnoreMask are safe to ignore and their format must be
@@ -77,6 +78,8 @@ const (
7778 customTagBlobReferences = 69
7879 // customTagBlobReferences2 contains BackingValueSize for each BlobReference.
7980 customTagBlobReferences2 = 70
81+ // customTagBlobReferences3 contains BackingValueSize and Tier for each BlobReference.
82+ customTagBlobReferences3 = 71
8083)
8184
8285// DeletedTableEntry holds the state for a sstable deletion from a level. The
@@ -467,7 +470,7 @@ func (v *VersionEdit) Decode(r io.Reader) error {
467470 return err
468471 }
469472
470- case customTagBlobReferences , customTagBlobReferences2 :
473+ case customTagBlobReferences , customTagBlobReferences2 , customTagBlobReferences3 :
471474 // The first varint encodes the 'blob reference depth'
472475 // of the table.
473476 v , err := d .readUvarint ()
@@ -490,16 +493,28 @@ func (v *VersionEdit) Decode(r io.Reader) error {
490493 return err
491494 }
492495 var backingValueSize uint64
493- if customTag == customTagBlobReferences2 {
496+ if customTag == customTagBlobReferences2 || customTag == customTagBlobReferences3 {
494497 backingValueSize , err = d .readUvarint ()
495498 if err != nil {
496499 return err
497500 }
498501 }
502+ var tier base.StorageTier
503+ if customTag == customTagBlobReferences3 {
504+ tierValue , err := d .readUvarint ()
505+ if err != nil {
506+ return err
507+ }
508+ tier = base .StorageTier (tierValue )
509+ } else {
510+ // For backward compatibility, default to HotTier.
511+ tier = base .HotTier
512+ }
499513 blobReferences [i ] = BlobReference {
500514 FileID : base .BlobFileID (fileID ),
501515 ValueSize : valueSize ,
502516 BackingValueSize : backingValueSize ,
517+ Tier : tier ,
503518 }
504519 }
505520 continue
@@ -566,7 +581,7 @@ func (v *VersionEdit) Decode(r io.Reader) error {
566581 }
567582 v .NewTables = append (v .NewTables , nfe )
568583
569- case tagNewBlobFile :
584+ case tagNewBlobFile , tagNewBlobFile2 :
570585 fileID , err := d .readUvarint ()
571586 if err != nil {
572587 return err
@@ -587,13 +602,25 @@ func (v *VersionEdit) Decode(r io.Reader) error {
587602 if err != nil {
588603 return err
589604 }
605+ var tier base.StorageTier
606+ if tag == tagNewBlobFile2 {
607+ tierValue , err := d .readUvarint ()
608+ if err != nil {
609+ return err
610+ }
611+ tier = base .StorageTier (tierValue )
612+ } else {
613+ // For backward compatibility with tagNewBlobFile, default to HotTier.
614+ tier = base .HotTier
615+ }
590616 v .NewBlobFiles = append (v .NewBlobFiles , BlobFileMetadata {
591617 FileID : base .BlobFileID (fileID ),
592618 Physical : & PhysicalBlobFile {
593619 FileNum : base .DiskFileNum (diskFileNum ),
594620 Size : size ,
595621 ValueSize : valueSize ,
596622 CreationTime : creationTime ,
623+ Tier : tier ,
597624 },
598625 })
599626
@@ -948,40 +975,27 @@ func (v *VersionEdit) Encode(w io.Writer) error {
948975 e .writeBytes (x .Meta .SyntheticPrefixAndSuffix .Suffix ())
949976 }
950977 if len (x .Meta .BlobReferences ) > 0 {
951- writeBackingValueSize := false
952- if x .Meta .Virtual {
953- for _ , ref := range x .Meta .BlobReferences {
954- if ref .BackingValueSize > 0 && ref .BackingValueSize != ref .ValueSize {
955- writeBackingValueSize = true
956- break
957- }
958- }
959- }
960- if writeBackingValueSize {
961- e .writeUvarint (customTagBlobReferences2 )
962- } else {
963- e .writeUvarint (customTagBlobReferences )
964- }
978+ e .writeUvarint (customTagBlobReferences3 )
965979 e .writeUvarint (uint64 (x .Meta .BlobReferenceDepth ))
966980 e .writeUvarint (uint64 (len (x .Meta .BlobReferences )))
967981 for _ , ref := range x .Meta .BlobReferences {
968982 e .writeUvarint (uint64 (ref .FileID ))
969983 e .writeUvarint (ref .ValueSize )
970- if writeBackingValueSize {
971- e .writeUvarint (ref .BackingValueSize )
972- }
984+ e .writeUvarint (ref .BackingValueSize )
985+ e .writeUvarint (uint64 (ref .Tier ))
973986 }
974987 }
975988 e .writeUvarint (customTagTerminate )
976989 }
977990 }
978991 for _ , x := range v .NewBlobFiles {
979- e .writeUvarint (tagNewBlobFile )
992+ e .writeUvarint (tagNewBlobFile2 )
980993 e .writeUvarint (uint64 (x .FileID ))
981994 e .writeUvarint (uint64 (x .Physical .FileNum ))
982995 e .writeUvarint (x .Physical .Size )
983996 e .writeUvarint (x .Physical .ValueSize )
984997 e .writeUvarint (x .Physical .CreationTime )
998+ e .writeUvarint (uint64 (x .Physical .Tier ))
985999 }
9861000 for x := range v .DeletedBlobFiles {
9871001 e .writeUvarint (tagDeletedBlobFile )
0 commit comments