This overlaps with the existing old_peering_msg() mechanism
except in one case: pulls from a replica not in the acting
set. If such a replica gets marked down, we may resend
pulls to another replica without causing a new interval
to start. If we recieved, but didn't process, a push in
response to such a pull prior to processing the map marking
the peer down, we might process the push after having reset
the pull state for a different pull operation. We can
avoid this by discarding ops from down peers.
Signed-off-by: Samuel Just <sam.just@inktank.com>
We must include newest_update_osd->second.log_tail when considering backfill
peers because in GetLog we will request logs back to the min last_update over
our acting_backfill set. This will result in our log being extended as far
backwards as necessary to pick up any peers which can be log recovered by the
union of newest_update_osd's log and that of the chosen primary.
Signed-off-by: Samuel Just <sam.just@inktank.com>
Otherwise it doesn't behave properly with snapshots since
update_object_version doesn't add another snapshot entry.
Signed-off-by: Samuel Just <sam.just@inktank.com>
do_osd_ops will need to either copy the old version out of the
way or simply delete it depending on mod_desc. Thus, defer
handling filling that part in until we finish the copy op.
Signed-off-by: Samuel Just <sam.just@inktank.com>
EC pools won't support SYNC reads. This means that TMAP and friends
along with reads from an object class will not be supported.
Signed-off-by: Samuel Just <sam.just@inktank.com>
We don't recover the older versions, so we can't do a rollback.
In general, this is ok since we had enough copies to recover it
in the first place.
Signed-off-by: Samuel Just <sam.just@inktank.com>
We need to be able to allow the PGLog interface user to provide
logic for rolling back and trimming log entries. To that end,
serveral PGLog methods now take a LogEntryHander.
In PGLog::merge_old_entry, if prior_version > info.log_tail and
the object is not missing, we must have rolled back the prior
log entry. Thus, we don't skip the entry.
To simplify the code, _merge_old_entry has been split out as
a const helper. This way, proc_replica_log can be reexpressed
as merging the divergent replica log entries with the fully
merged authoritative log.
Signed-off-by: Samuel Just <sam.just@inktank.com>
RPGTransaction is essentially a wrapped ObjectStore::Transaction.
The coll_t argument is elided, tempness is instead encoded in the
hobject. RPGTransaction tracks which temp objects are created and
cleared so we can update the ReplicatedBackend tracking and possibly
create the temp collection as needed.
Signed-off-by: Samuel Just <sam.just@inktank.com>
PGBackend implmentations will have complete control over the temp
collection. Rather than specifying the collection when sending
ops into the PGBackend, hobjects themselves will be temp or not.
Signed-off-by: Samuel Just <sam.just@inktank.com>