@@ -569,7 +569,7 @@ size_t CompactObj::Size() const {
569
569
break ;
570
570
}
571
571
case EXTERNAL_TAG:
572
- raw_size = u_.ext_ptr .size ;
572
+ raw_size = u_.ext_ptr .serialized_size ;
573
573
break ;
574
574
case ROBJ_TAG:
575
575
raw_size = u_.r_obj .Size ();
@@ -941,12 +941,31 @@ void CompactObj::GetString(char* dest) const {
941
941
LOG (FATAL) << " Bad tag " << int (taglen_);
942
942
}
943
943
944
- void CompactObj::SetExternal (size_t offset, size_t sz) {
944
+ void CompactObj::SetExternal (size_t offset, uint32_t sz) {
945
945
SetMeta (EXTERNAL_TAG, mask_);
946
946
947
- u_.ext_ptr .page_index = offset / 4096 ;
947
+ u_.ext_ptr .is_cool = 0 ;
948
948
u_.ext_ptr .page_offset = offset % 4096 ;
949
- u_.ext_ptr .size = sz;
949
+ u_.ext_ptr .serialized_size = sz;
950
+ u_.ext_ptr .offload .page_index = offset / 4096 ;
951
+ }
952
+
953
+ void CompactObj::SetCold (size_t offset, uint32_t sz, detail::TieredColdRecord* record) {
954
+ SetMeta (EXTERNAL_TAG, mask_);
955
+ u_.ext_ptr .is_cool = 1 ;
956
+ u_.ext_ptr .page_offset = offset % 4096 ;
957
+ u_.ext_ptr .serialized_size = sz;
958
+ u_.ext_ptr .cold_record = record;
959
+ }
960
+
961
+ auto CompactObj::GetCold () const -> ColdItem {
962
+ DCHECK (IsExternal () && u_.ext_ptr .is_cool );
963
+
964
+ ColdItem res;
965
+ res.page_offset = u_.ext_ptr .page_offset ;
966
+ res.serialized_size = u_.ext_ptr .serialized_size ;
967
+ res.record = u_.ext_ptr .cold_record ;
968
+ return res;
950
969
}
951
970
952
971
void CompactObj::ImportExternal (const CompactObj& src) {
@@ -957,8 +976,10 @@ void CompactObj::ImportExternal(const CompactObj& src) {
957
976
958
977
std::pair<size_t , size_t > CompactObj::GetExternalSlice () const {
959
978
DCHECK_EQ (EXTERNAL_TAG, taglen_);
960
- size_t offset = size_t (u_.ext_ptr .page_index ) * 4096 + u_.ext_ptr .page_offset ;
961
- return pair<size_t , size_t >(offset, size_t (u_.ext_ptr .size ));
979
+ DCHECK_EQ (u_.ext_ptr .is_cool , 0 );
980
+
981
+ size_t offset = size_t (u_.ext_ptr .offload .page_index ) * 4096 + u_.ext_ptr .page_offset ;
982
+ return pair<size_t , size_t >(offset, size_t (u_.ext_ptr .serialized_size ));
962
983
}
963
984
964
985
void CompactObj::Materialize (std::string_view blob, bool is_raw) {
0 commit comments