Uploaded image for project: 'WiredTiger'
  1. WiredTiger
  2. WT-6648

Checkpoint doesn't retain the full historical data as per the oldest timestamp in the checkpoint

    • Type: Icon: Bug Bug
    • Resolution: Gone away
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • Labels:
    • 1
    • Storage - Ra 2020-09-21

      WiredTiger checkpoint stores the information of both oldest and stable timestamps during the checkpoint to indicate the total history of the data from which the user can query. The oldest and stable timestamps are saved as part of the checkpoint during the start of the checkpoint.

      But when the oldest timestamp gets changed when the checkpoint is in progress can some times led to the removal of historical data that must be retained as per the oldest timestamp that is saved as part of the checkpoint.

      With the following change, the above-discussed problem can reproduce. This test may not be the proper test case, but can be used as an example to understand the problem.

      diff --git a/test/suite/test_rollback_to_stable10.py b/test/suite/test_rollback_to_stable10.py
      index 4a322c619..023244507 100755
      --- a/test/suite/test_rollback_to_stable10.py
      +++ b/test/suite/test_rollback_to_stable10.py
      @@ -166,10 +166,13 @@ class test_rollback_to_stable10(test_rollback_to_stable_base):
                   retry_rollback(self, 'update ds1, e',
                                  lambda: self.large_updates(uri_1, value_e, ds_1, nrows, 70))
      +            self.conn.set_timestamp('oldest_timestamp=' + timestamp_str(20))
                   retry_rollback(self, 'update ds2, e',
                                  lambda: self.large_updates(uri_2, value_e, ds_2, nrows, 70))
      +            self.conn.set_timestamp('oldest_timestamp=' + timestamp_str(30))
                   retry_rollback(self, 'update ds1, f',
                                  lambda: self.large_updates(uri_1, value_f, ds_1, nrows, 80))
      +            self.conn.set_timestamp('oldest_timestamp=' + timestamp_str(40))
                   retry_rollback(self, 'update ds2, f',
                                  lambda: self.large_updates(uri_2, value_f, ds_2, nrows, 80))

            chenhao.qu@mongodb.com Chenhao Qu
            haribabu.kommi@mongodb.com Haribabu Kommi
            0 Vote for this issue
            6 Start watching this issue