@@ -56,7 +56,7 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
5656 LOG_PREFIX (Cache::retire_extent_addr);
5757 TRACET (" retire {}~0x{:x}" , t, paddr, length);
5858
59- assert (paddr.is_real () && !paddr. is_block_relative ());
59+ assert (paddr.is_real_location ());
6060
6161 CachedExtentRef ext;
6262 auto result = t.get_extent (paddr, &ext);
@@ -71,8 +71,8 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
7171 ceph_abort ();
7272 }
7373
74- // any relative paddr must have been on the transaction
75- assert (! paddr.is_relative ());
74+ // any record- relative or delayed paddr must have been on the transaction
75+ assert (paddr.is_absolute ());
7676
7777 // absent from transaction
7878 // retiring is not included by the cache hit metrics
@@ -97,6 +97,8 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
9797void Cache::retire_absent_extent_addr (
9898 Transaction &t, paddr_t paddr, extent_len_t length)
9999{
100+ assert (paddr.is_absolute ());
101+
100102 CachedExtentRef ext;
101103#ifndef NDEBUG
102104 auto result = t.get_extent (paddr, &ext);
@@ -729,11 +731,14 @@ void Cache::add_extent(CachedExtentRef ref)
729731 assert (ref->is_valid ());
730732 assert (ref->user_hint == PLACEMENT_HINT_NULL);
731733 assert (ref->rewrite_generation == NULL_GENERATION);
734+ assert (ref->get_paddr ().is_absolute () ||
735+ ref->get_paddr ().is_root ());
732736 extents_index.insert (*ref);
733737}
734738
735739void Cache::mark_dirty (CachedExtentRef ref)
736740{
741+ assert (ref->get_paddr ().is_absolute ());
737742 if (ref->is_dirty ()) {
738743 assert (ref->primary_ref_list_hook .is_linked ());
739744 return ;
@@ -752,6 +757,8 @@ void Cache::add_to_dirty(
752757 assert (!ref->primary_ref_list_hook .is_linked ());
753758 ceph_assert (ref->get_modify_time () != NULL_TIME);
754759 assert (ref->is_fully_loaded ());
760+ assert (ref->get_paddr ().is_absolute () ||
761+ ref->get_paddr ().is_root ());
755762
756763 // Note: next might not be at extent_state_t::DIRTY,
757764 // also see CachedExtent::is_stable_writting()
@@ -781,6 +788,8 @@ void Cache::remove_from_dirty(
781788 assert (ref->is_dirty ());
782789 ceph_assert (ref->primary_ref_list_hook .is_linked ());
783790 assert (ref->is_fully_loaded ());
791+ assert (ref->get_paddr ().is_absolute () ||
792+ ref->get_paddr ().is_root ());
784793
785794 auto extent_length = ref->get_length ();
786795 stats.dirty_bytes -= extent_length;
@@ -862,9 +871,12 @@ void Cache::remove_extent(
862871 const Transaction::src_t * p_src)
863872{
864873 assert (ref->is_valid ());
874+ assert (ref->get_paddr ().is_absolute () ||
875+ ref->get_paddr ().is_root ());
865876 if (ref->is_dirty ()) {
866877 remove_from_dirty (ref, p_src);
867878 } else if (!ref->is_placeholder ()) {
879+ assert (ref->get_paddr ().is_absolute ());
868880 lru.remove_from_lru (*ref);
869881 }
870882 extents_index.erase (*ref);
@@ -887,6 +899,7 @@ void Cache::commit_replace_extent(
887899 CachedExtentRef prev)
888900{
889901 assert (next->get_paddr () == prev->get_paddr ());
902+ assert (next->get_paddr ().is_absolute () || next->get_paddr ().is_root ());
890903 assert (next->version == prev->version + 1 );
891904 extents_index.replace (*next, *prev);
892905
@@ -1267,8 +1280,7 @@ record_t Cache::prepare_record(
12671280 assert (can_inplace_rewrite (i->prior_instance ->get_type ()));
12681281 assert (i->prior_instance ->dirty_from_or_retired_at == JOURNAL_SEQ_MIN);
12691282 assert (i->prior_instance ->state == CachedExtent::extent_state_t ::CLEAN);
1270- assert (i->prior_instance ->get_paddr ().get_addr_type () ==
1271- paddr_types_t ::RANDOM_BLOCK);
1283+ assert (i->prior_instance ->get_paddr ().is_absolute_random_block ());
12721284 i->version = 1 ;
12731285 }
12741286
@@ -1290,10 +1302,11 @@ record_t Cache::prepare_record(
12901302 t, delta_length, *i);
12911303 assert (t.root == i);
12921304 root = t.root ;
1305+ assert (root->get_paddr ().is_root ());
12931306 record.push_back (
12941307 delta_info_t {
12951308 extent_types_t ::ROOT,
1296- P_ADDR_NULL ,
1309+ P_ADDR_ROOT ,
12971310 L_ADDR_NULL,
12981311 0 ,
12991312 0 ,
@@ -1308,7 +1321,7 @@ record_t Cache::prepare_record(
13081321 auto stype = segment_type_t ::NULL_SEG;
13091322
13101323 // FIXME: This is specific to the segmented implementation
1311- if (i->get_paddr ().get_addr_type () == paddr_types_t ::SEGMENT ) {
1324+ if (i->get_paddr ().is_absolute_segmented () ) {
13121325 auto sid = i->get_paddr ().as_seg_paddr ().get_segment_id ();
13131326 auto sinfo = get_segment_info (sid);
13141327 if (sinfo) {
@@ -1407,7 +1420,11 @@ record_t Cache::prepare_record(
14071420 fresh_stat.increment (i->get_length ());
14081421 get_by_ext (efforts.fresh_inline_by_ext ,
14091422 i->get_type ()).increment (i->get_length ());
1423+ #ifdef UNIT_TESTS_BUILT
14101424 assert (i->is_inline () || i->get_paddr ().is_fake ());
1425+ #else
1426+ assert (i->is_inline ());
1427+ #endif
14111428
14121429 bufferlist bl;
14131430 i->prepare_write ();
@@ -1461,7 +1478,7 @@ record_t Cache::prepare_record(
14611478 for (auto &i: t.ool_block_list ) {
14621479 TRACET (" fresh ool extent -- {}" , t, *i);
14631480 ceph_assert (i->is_valid ());
1464- assert (! i->is_inline ());
1481+ assert (i->get_paddr (). is_absolute ());
14651482 get_by_ext (efforts.fresh_ool_by_ext ,
14661483 i->get_type ()).increment (i->get_length ());
14671484 if (is_backref_mapped_type (i->get_type ())) {
@@ -1870,13 +1887,16 @@ void Cache::init()
18701887 root = nullptr ;
18711888 }
18721889 root = CachedExtent::make_cached_extent_ref<RootBlock>();
1873- root->init (CachedExtent::extent_state_t ::CLEAN,
1890+ // Make it simpler to keep root dirty
1891+ root->init (CachedExtent::extent_state_t ::DIRTY,
18741892 P_ADDR_ROOT,
18751893 PLACEMENT_HINT_NULL,
18761894 NULL_GENERATION,
1877- TRANS_ID_NULL);
1895+ TRANS_ID_NULL);
1896+ root->set_modify_time (seastar::lowres_system_clock::now ());
18781897 INFO (" init root -- {}" , *root);
1879- extents_index.insert (*root);
1898+ add_extent (root);
1899+ add_to_dirty (root, nullptr );
18801900}
18811901
18821902Cache::mkfs_iertr::future<> Cache::mkfs (Transaction &t)
@@ -1937,8 +1957,7 @@ Cache::replay_delta(
19371957 * safetly skip these deltas because the extent must already
19381958 * have been rewritten.
19391959 */
1940- if (delta.paddr != P_ADDR_NULL &&
1941- delta.paddr .get_addr_type () == paddr_types_t ::SEGMENT) {
1960+ if (delta.paddr .is_absolute_segmented ()) {
19421961 auto & seg_addr = delta.paddr .as_seg_paddr ();
19431962 auto seg_info = get_segment_info (seg_addr.get_segment_id ());
19441963 if (seg_info) {
@@ -1976,9 +1995,10 @@ Cache::replay_delta(
19761995 decode (alloc_delta, delta.bl );
19771996 backref_entry_refs_t backref_entries;
19781997 for (auto &alloc_blk : alloc_delta.alloc_blk_ranges ) {
1979- if (alloc_blk.paddr .is_relative ()) {
1980- assert (alloc_blk.paddr .is_record_relative ());
1998+ if (alloc_blk.paddr .is_record_relative ()) {
19811999 alloc_blk.paddr = record_base.add_relative (alloc_blk.paddr );
2000+ } else {
2001+ ceph_assert (alloc_blk.paddr .is_absolute ());
19822002 }
19832003 DEBUG (" replay alloc_blk {}~0x{:x} {}, journal_seq: {}" ,
19842004 alloc_blk.paddr , alloc_blk.len , alloc_blk.laddr , journal_seq);
@@ -2001,6 +2021,7 @@ Cache::replay_delta(
20012021 if (is_root_type (delta.type )) {
20022022 TRACE (" replay root delta at {} {}, remove extent ... -- {}, prv_root={}" ,
20032023 journal_seq, record_base, delta, *root);
2024+ ceph_assert (delta.paddr .is_root ());
20042025 remove_extent (root, nullptr );
20052026 root->apply_delta_and_adjust_crc (record_base, delta.bl );
20062027 root->dirty_from_or_retired_at = journal_seq;
@@ -2014,6 +2035,7 @@ Cache::replay_delta(
20142035 return replay_delta_ertr::make_ready_future<std::pair<bool , CachedExtentRef>>(
20152036 std::make_pair (true , root));
20162037 } else {
2038+ ceph_assert (delta.paddr .is_absolute ());
20172039 auto _get_extent_if_cached = [this ](paddr_t addr)
20182040 -> get_extent_ertr::future<CachedExtentRef> {
20192041 // replay is not included by the cache hit metrics
@@ -2061,15 +2083,15 @@ Cache::replay_delta(
20612083 DEBUG (" replay extent delta at {} {} ... -- {}, prv_extent={}" ,
20622084 journal_seq, record_base, delta, *extent);
20632085
2064- if (delta.paddr .get_addr_type () == paddr_types_t ::SEGMENT ||
2086+ if (delta.paddr .is_absolute_segmented () ||
20652087 !can_inplace_rewrite (delta.type )) {
20662088 ceph_assert_always (extent->last_committed_crc == delta.prev_crc );
20672089 assert (extent->version == delta.pversion );
20682090 extent->apply_delta_and_adjust_crc (record_base, delta.bl );
20692091 extent->set_modify_time (modify_time);
20702092 ceph_assert_always (extent->last_committed_crc == delta.final_crc );
20712093 } else {
2072- assert (delta.paddr .get_addr_type () == paddr_types_t ::RANDOM_BLOCK );
2094+ assert (delta.paddr .is_absolute_random_block () );
20732095 // see prepare_record(), inplace rewrite might cause version mismatch
20742096 extent->apply_delta_and_adjust_crc (record_base, delta.bl );
20752097 extent->set_modify_time (modify_time);
0 commit comments