Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

osd/PGLog: add roll_forward_to(to update crt) to PGLog update_missing #38906

Closed
wants to merge 3 commits into from

Conversation

ideepika
Copy link
Member

@ideepika ideepika commented Jan 14, 2021

Signed-off-by: Deepika Upadhyay dupadhya@redhat.com

Checklist

  • References tracker ticket
  • Updates documentation if necessary
  • Includes tests for new functionality or reproducer for bug

Show available Jenkins commands
  • jenkins retest this please
  • jenkins test classic perf
  • jenkins test crimson perf
  • jenkins test signed
  • jenkins test make check
  • jenkins test make check arm64
  • jenkins test submodules
  • jenkins test dashboard
  • jenkins test api
  • jenkins test docs
  • jenkins render docs
  • jenkins test ceph-volume all
  • jenkins test ceph-volume tox

src/test/osd/TestPGLog.cc Outdated Show resolved Hide resolved
src/osd/PGLog.h Outdated Show resolved Hide resolved
@ideepika ideepika force-pushed the wip-tracker-48609 branch 2 times, most recently from 66bcf56 to 3e3d14c Compare January 19, 2021 21:44
@ideepika ideepika changed the title osd/PGLog: call rollforward_to(update crt) only if new entries added osd/PGLog: add roll_forward_to(to update crt) to PGLog update_missing Jan 19, 2021
src/osd/PGLog.h Outdated Show resolved Hide resolved
src/osd/PGLog.h Outdated Show resolved Hide resolved
@ideepika ideepika force-pushed the wip-tracker-48609 branch 2 times, most recently from e996e89 to 47d4973 Compare January 20, 2021 16:00
src/osd/PGLog.h Outdated Show resolved Hide resolved
src/osd/PGLog.h Outdated
@@ -1257,6 +1257,7 @@ struct PGLog : DoutPrefixProvider {
bool maintain_rollback,
IndexedLog *log,
missing_type &missing,
bool &should_rollforward,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out params like should_rollforward should be passed as a pointer with null allowed as a way for the caller to ignore the output, see CodingStyle.

Copy link
Member Author

@ideepika ideepika Jan 25, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, will take into accord.
updated code.
Also, kept whitespace changes for different PR for brevity

Test output:

[100%] Built target unittest_pglog

2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log log((1'1,2'1], crt=0'0) from osd.? into log((1'1,2'1], crt=0'0)**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log result log((1'1,2'1], crt=0'0) missing(0 may_include_deletes = 1) changed=0**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log log((1'1,2'1], crt=0'0) from osd.? into log((1'1,2'1], crt=0'0)**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log result log((1'1,2'1], crt=0'0) missing(0 may_include_deletes = 0) changed=0**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log log((1'1,1'5], crt=0'0) from osd.? into log((1'4,1'5], crt=0'0)**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 merge_log extending tail to 1'1
2021-01-25T22:32:57.574+0000 7fdbb80b5280 15 1'1 (0'0) unknown  -9223372036854775808:a0000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log result log((1'1,1'5], crt=0'0) missing(0 may_include_deletes = 0) changed=1**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log log((1'1,2'4], crt=0'0) from osd.? into log((1'1,1'3], crt=0'0)**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 merge_log extending head to 2'4
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20   ? 2'4 (0'0) delete   -9223372036854775808:e0000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20   ? 2'3 (0'0) modify   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20   ? 1'2 (0'0) delete   -9223372036854775808:c0000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20 merge_log cut point (usually last shared) is 1'2
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20 merge_log original_crt = 0'0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 merge_log divergent 1'3 (0'0) delete   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20 update missing, appended 2'3 (0'0) modify   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20 update missing, appended 2'4 (0'0) delete   -9223372036854775808:e0000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20 _merge_object_divergent_entries: merging hoid -9223372036854775808:90000000::::0 entries: 1'3 (0'0) delete   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20 _merge_object_divergent_entries: keeping 1'3 (0'0) delete   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 _merge_object_divergent_entries: hoid  object_not_in_store: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 _merge_object_divergent_entries: hoid -9223372036854775808:90000000::::0 prior_version: 0'0 first_divergent_update: 1'3 last_divergent_update: 1'3
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 _merge_object_divergent_entries: more recent entry found: 2'3 (0'0) modify   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0, already merged
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 crt updated after new entries merged to 2'4
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log result log((1'1,2'4], crt=2'4) missing(2 may_include_deletes = 1) changed=1**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 **merge_log log((1'1,2'4], crt=0'0) from osd.? into log((1'1,1'3], crt=0'0)**
2021-01-25T22:32:57.574+0000 7fdbb80b5280 10 merge_log extending head to 2'4
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20   ? 2'4 (0'0) delete   -9223372036854775808:e0000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20   ? 2'3 (0'0) modify   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20   ? 1'2 (0'0) delete   -9223372036854775808:c0000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20 merge_log cut point (usually last shared) is 1'2
2021-01-25T22:32:57.574+0000 7fdbb80b5280 20 merge_log original_crt = 0'0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 merge_log divergent 1'3 (0'0) delete   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 20 update missing, appended 2'3 (0'0) modify   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 20 update missing, appended 2'4 (0'0) delete   -9223372036854775808:e0000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 20 _merge_object_divergent_entries: merging hoid -9223372036854775808:90000000::::0 entries: 1'3 (0'0) delete   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 20 _merge_object_divergent_entries: keeping 1'3 (0'0) delete   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 _merge_object_divergent_entries: hoid  object_not_in_store: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 _merge_object_divergent_entries: hoid -9223372036854775808:90000000::::0 prior_version: 0'0 first_divergent_update: 1'3 last_divergent_update: 1'3
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 _merge_object_divergent_entries: more recent entry found: 2'3 (0'0) modify   -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0, already merged
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 crt updated after new entries merged to 2'4
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 **merge_log result log((1'1,2'4], crt=2'4) missing(1 may_include_deletes = 0) changed=1**
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 merge_log log((1'1,1'4], crt=0'0) from osd.? into log((1'1,1'5], crt=0'0)
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 rewind_divergent_log truncate divergent future 1'4
2021-01-25T22:32:57.575+0000 7fdbb80b5280 20 rewind_divergent_log original_crt = 0'0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 rewind_divergent_log future divergent 1'5 (0'0) unknown  -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 20 _merge_object_divergent_entries: merging hoid -9223372036854775808:90000000::::0 entries: 1'5 (0'0) unknown  -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 20 _merge_object_divergent_entries: keeping 1'5 (0'0) unknown  -9223372036854775808:90000000::::0 by unknown.0.0:0 0.000000 0 ObjectCleanRegions clean_offsets: [0~18446744073709551615], clean_omap: 1, new_object: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 _merge_object_divergent_entries: hoid  object_not_in_store: 0
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 _merge_object_divergent_entries: hoid -9223372036854775808:90000000::::0 prior_version: 0'0 first_divergent_update: 1'5 last_divergent_update: 1'5
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 _merge_object_divergent_entries: hoid -9223372036854775808:90000000::::0 has no more recent entries in log
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 _merge_object_divergent_entries: hoid -9223372036854775808:90000000::::0 prior_version or op type indicates creation, deleting
2021-01-25T22:32:57.575+0000 7fdbb80b5280 10 **merge_log result log((1'1,1'4], crt=0'0) missing(0 may_include_deletes = 0) changed=1**
[       OK ] PGLogTest.merge_log (1 ms)
[----------] 1 test from PGLogTest (1 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1 ms total)
[  PASSED  ] 1 test.

src/osd/PGLog.h Outdated Show resolved Hide resolved
src/osd/PGLog.h Outdated
log->add(*p);
log->add(*p);
ldpp_dout(dpp, 20) << "update missing, appended " << *p << dendl;
if (should_rollforward)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like it should be outside of the if(log) check. Also, add braces.

Copy link
Member Author

@ideepika ideepika Feb 5, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@athanatos but we specifically want to check this itself, since we only want to rollforward, if actually log->add operation happened or not.

@athanatos
Copy link
Contributor

athanatos commented Feb 5, 2021

You test changes appear to pass without the changes to merge_log. I'd like at least one test case that doesn't pass on master.

Deepika Upadhyay added 2 commits February 5, 2021 15:02
 we need to check the if log if entries were actually appended
 successfully using append_log_entries_update_missing instead of
 updating can_rollback_to value unconditionally

 fixes: https://tracker.ceph.com/issues/48609

 Signed-off-by: Deepika Upadhyay <dupadhya@redhat.com>
on merging logs can_rollback_to should only be updated if any new entry
has been added.

crt >> initial crt >> updated crt
1,2,3 case: 0'0  | 0'0
4 case: head updated & hence crt updated >> 0'0 | 2'4
5 case: divergent entry in log >> crt unchanged 0'0  | 0'0

fixes: https://tracker.ceph.com/issues/48609

Signed-off-by: Deepika Upadhyay <dupadhya@redhat.com>
@ideepika
Copy link
Member Author

ideepika commented Feb 5, 2021

You test changes appear to pass without the changes to merge_log. I'd like at least one test case that doesn't pass on master.

working on it

@ideepika
Copy link
Member Author

the test case for creating a scenario seems non trivial, but to test that crt would have been updated even if log->add didn't happen, @neha-ojha suggested to check with debugging through teuthology: ( 3218028 )
indeed we could see the else condition:

ideepika@teuthology:/a/ideepika-2021-02-23_17:15:01-rados:thrash-erasure-code-wip-tracker-48609-distro-basic-gibba$ find .
 -name ceph-osd.*.log.gz -print0 | xargs -0 zgrep "crt not updated no log appended"
./5907682/remote/gibba019/log/ceph-osd.4.log.gz:2021-02-23T17:35:52.130+0000 7f1dea426700 10 merge_logcrt not updated no log appended

earlier we would have updated crt if not for the check, this should verify behaviour until we can figure out unit test that would exercise this.

@jdurgin
Copy link
Member

jdurgin commented Feb 23, 2021

There are a couple ways to make adding unit tests for this simpler:

  1. test append_log_entries_update_missing() to verify the behavior of the should_rollforward parameter directly

  2. add an out parameter bool *rolledforward=nullptr to merge_log() - and check this in merge_log() tests that do/do not add more entries

@neha-ojha
Copy link
Member

the test case for creating a scenario seems non trivial, but to test that crt would have been updated even if log->add didn't happen, @neha-ojha suggested to check with debugging through teuthology: ( 3218028 )
indeed we could see the else condition:

ideepika@teuthology:/a/ideepika-2021-02-23_17:15:01-rados:thrash-erasure-code-wip-tracker-48609-distro-basic-gibba$ find .
 -name ceph-osd.*.log.gz -print0 | xargs -0 zgrep "crt not updated no log appended"
./5907682/remote/gibba019/log/ceph-osd.4.log.gz:2021-02-23T17:35:52.130+0000 7f1dea426700 10 merge_logcrt not updated no log appended

earlier we would have updated crt if not for the check, this should verify behaviour until we can figure out unit test that would exercise this.

@ideepika I'm not sure the code you have for this is exactly what I meant. I suggested adding a debug statement in the existing code (not with your fix) which could tell us if/when crt was updated without log addition in a teuthology run.

This can be achieved by

if (!should_rollforward && log.get_can_rollback_to() != original_crt)
  dout(10) << "crt updated without log addition " << dendl;

Signed-off-by: Deepika Upadhyay <dupadhya@redhat.com>
@ideepika
Copy link
Member Author

ideepika commented Mar 5, 2021

the test case for creating a scenario seems non trivial, but to test that crt would have been updated even if log->add didn't happen, @neha-ojha suggested to check with debugging through teuthology: ( 3218028 )
indeed we could see the else condition:

ideepika@teuthology:/a/ideepika-2021-02-23_17:15:01-rados:thrash-erasure-code-wip-tracker-48609-distro-basic-gibba$ find .
 -name ceph-osd.*.log.gz -print0 | xargs -0 zgrep "crt not updated no log appended"
./5907682/remote/gibba019/log/ceph-osd.4.log.gz:2021-02-23T17:35:52.130+0000 7f1dea426700 10 merge_logcrt not updated no log appended

earlier we would have updated crt if not for the check, this should verify behaviour until we can figure out unit test that would exercise this.

@ideepika I'm not sure the code you have for this is exactly what I meant. I suggested adding a debug statement in the existing code (not with your fix) which could tell us if/when crt was updated without log addition in a teuthology run.

This can be achieved by

if (!should_rollforward && log.get_can_rollback_to() != original_crt)
  dout(10) << "crt updated without log addition " << dendl;

using with dispatch delays with which we can reproduce lrc issue, we enter peering state, whenever we receive log while peering, I get to see log addition without append.
working on test case for it

          osd debug inject dispatch delay duration: 0.2
          osd debug inject dispatch delay probability: 0.1
ideepika@teuthology:/a/ideepika-2021-03-02_15:37:15-rados:thrash-erasure-code-wip-tracker-48609-neha-suggestion-distro-basic-gibba$ find . -name ceph-osd.*.log* -print0 | xargs -0 zgrep "crt updated without log addition"
./5927452/remote/gibba009/log/ceph-osd.3.log.gz:2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 crt updated without log addition
2021-03-02T16:11:04.622+0000 7f7c6a2df700 20 osd.3 op_wq(0) _process OpSchedulerItem(3.20s0 PGPeeringEvent(epoch_sent: 604 epoch_requested: 604 MLogRec from 1(0) log log((0'0,571'230], crt=571'230) pi ([0,0] all_participants= intervals=) +create_info) prio 255 cost 10 e604) pg 0x561c56f09000
2021-03-02T16:11:04.622+0000 7f7c77c49700 20 bluefs flush_buffer caching tail of 0xf36 and padding block with 0xca buffer.length() 0
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 osd.3 pg_epoch: 606 pg[3.20s0( v 339'158 (0'0,339'158] local-lis/les=283/284 n=4 ec=599/22 lis/c=562/394 les/c/f=563/396/0 sis=603) [3,0,1,5,4,7]/[3,0,NONE,5,4,7]p3(0) async=[1(2)] r=0 lpr=603 pi=[241,603)/6 crt=339'158 lcod 0'0 mlcod 0'0 remapped+peering mbc={} ps=24] do_peering_event: epoch_sent: 604 epoch_requested: 604 MLogRec from 1(0) log log((0'0,571'230], crt=571'230) pi ([0,0] all_participants= intervals=) +create_info
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 osd.3 pg_epoch: 606 pg[3.20s0( v 339'158 (0'0,339'158] local-lis/les=283/284 n=4 ec=599/22 lis/c=562/394 les/c/f=563/396/0 sis=603) [3,0,1,5,4,7]/[3,0,NONE,5,4,7]p3(0) async=[1(2)] r=0 lpr=603 pi=[241,603)/6 crt=339'158 lcod 0'0 mlcod 0'0 remapped+peering mbc={} ps=24] state<Started/Primary/Peering/GetLog>: GetLog: received master log from osd.1(0)
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 osd.3 pg_epoch: 606 pg[3.20s0( v 339'158 (0'0,339'158] local-lis/les=283/284 n=4 ec=599/22 lis/c=562/394 les/c/f=563/396/0 sis=603) [3,0,1,5,4,7]/[3,0,NONE,5,4,7]p3(0) async=[1(2)] r=0 lpr=603 pi=[241,603)/6 crt=339'158 lcod 0'0 mlcod 0'0 remapped+peering mbc={} ps=24] state<Started/Primary/Peering/GetLog>: leaving GetLog
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 osd.3 pg_epoch: 606 pg[3.20s0( v 339'158 (0'0,339'158] local-lis/les=283/284 n=4 ec=599/22 lis/c=562/394 les/c/f=563/396/0 sis=603) [3,0,1,5,4,7]/[3,0,NONE,5,4,7]p3(0) async=[1(2)] r=0 lpr=603 pi=[241,603)/6 crt=339'158 lcod 0'0 mlcod 0'0 remapped+peering mbc={} ps=24] state<Started/Primary/Peering/GetLog>: processing master log
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 osd.3 pg_epoch: 606 pg[3.20s0( v 339'158 (0'0,339'158] local-lis/les=283/284 n=4 ec=599/22 lis/c=562/394 les/c/f=563/396/0 sis=603) [3,0,1,5,4,7]/[3,0,NONE,5,4,7]p3(0) async=[1(2)] r=0 lpr=603 pi=[241,603)/6 crt=339'158 lcod 0'0 mlcod 0'0 remapped+peering mbc={} ps=24] proc_master_log for osd.1(0): log((0'0,571'230], crt=571'230) missing(0 may_include_deletes = 1)
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 merge_log log((0'0,571'230], crt=571'230) from osd.1(0) into log((0'0,339'158], crt=339'158)
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 merge_log extending head to 571'230
2021-03-02T16:11:04.622+0000 7f7c6a2df700 20 merge_log cut point (usually last shared) is 0'0
2021-03-02T16:11:04.622+0000 7f7c6a2df700 20 merge_log original_crt = 339'158
2021-03-02T16:11:04.622+0000 7f7c672d9700 10 osd.3 pg_epoch: 606 pg[3.1es0( v 597'144 lc 48'4 (0'0,597'144] local-lis/les=604/606 n=2 ec=599/22 lis/c=565/565 les/c/f=566/567/0 sis=604) [3,0,7,2,1,4]/[3,0,NONE,2,1,NONE]p3(0) async=[4(5),7(2)] r=0 lpr=604 pi=[565,604)/1 crt=597'144 lcod 0'0 mlcod 0'0 remapped m=17 mbc={} ps=134] activate peer osd.4(5) 3.1es5( DNE v 597'144 lc 0'0 (0'0,597'144] local-lis/les=0/0 n=0 ec=0/0 lis/c=0/0 les/c/f=0/0/0 sis=0) missing missing(17 may_include_deletes = 1)
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 crt updated without log addition
2021-03-02T16:11:04.622+0000 7f7c672d9700 10 osd.3 pg_epoch: 606 pg[3.1es0( v 597'144 lc 48'4 (0'0,597'144] local-lis/les=604/606 n=2 ec=599/22 lis/c=565/565 les/c/f=566/567/0 sis=604) [3,0,7,2,1,4]/[3,0,NONE,2,1,NONE]p3(0) async=[4(5),7(2)] r=0 lpr=604 pi=[565,604)/1 crt=597'144 lcod 0'0 mlcod 0'0 remapped m=17 mbc={} ps=134] activate peer osd.7(2) 3.1es2( DNE empty local-lis/les=0/0 n=0 ec=0/0 lis/c=0/0 les/c/f=0/0/0 sis=0)
2021-03-02T16:11:04.622+0000 7f7c6a2df700 10 merge_log result log((0'0,571'230], crt=571'230) missing(0 may_include_deletes = 1) changed=1

@@ -453,7 +454,6 @@ void PGLog::merge_log(pg_info_t &oinfo, pg_log_t&& olog, pg_shard_t fromosd,
for (auto &&oe: divergent) {
dout(10) << "merge_log divergent " << oe << dendl;
}
log.roll_forward_to(log.head, rollbacker);
Copy link
Member

@neha-ojha neha-ojha Mar 6, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this PR can be simplified and made more unit-testable by only doing a roll_forward_to() if new_entries is not empty, which is essentially what is used for doing log->add() and setting should_rollforward.

@ideepika ideepika closed this Apr 29, 2021
@ideepika ideepika deleted the wip-tracker-48609 branch April 29, 2021 05:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
5 participants