PGLog: allow for empty pg log in update_range if log_tail == eversion_t()

Signed-off-by: Samuel Just <sam.just@inktank.com>
PGLog: delete old entry if the most recent remaining entry is a delete

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/test/osd: remove tmap test

Signed-off-by: Samuel Just <sam.just@inktank.com>
test/osd/Object: create encoders for ContDesc

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/test/osd: restructure Object/RadosModel in prep for append

Attribute handling no longer has special support in ContentsGenerator.
The most recent operation information is now stored in a special
attr rather than at the beginning of the object.  ObjectDesc layers
include their own ContentsGenerators to allow more flexibility.

Also, writes truncate to the new object size rather than simply
causing reads to stop at that object size.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/test/osd: adapt RadosModel to not do omap ops on ec_pools

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/test/osd: add append support to WriteOp

Signed-off-by: Samuel Just <sam.just@inktank.com>
ReplicatedBackend: update the collection_list mechanisms to skip stashed objects

Signed-off-by: Samuel Just <sam.just@inktank.com>
PGBackend: add PGTransaction

Signed-off-by: Samuel Just <sam.just@inktank.com>
hobject_t/ReplicatedPG: tempness is now an hobject thing

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>
ReplicatedBackend: implement RPGTransaction

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>
PG/ReplicatedPG: move snap map management into append_log

Both the replica and the primary should use the same append_log
mechanism to update the snap map.

Signed-off-by: Samuel Just <sam.just@inktank.com>
ReplicatedPG: split out op_applied_replica

Signed-off-by: Samuel Just <sam.just@inktank.com>
ReplicatedPG: factor out should_send_op

Signed-off-by: Samuel Just <sam.just@inktank.com>
ReplicatedBackend.h: don't need to be active for pushes

Signed-off-by: Samuel Just <sam.just@inktank.com>
ObjectStore: improve name of the queue_transaction which cleans up the transaction

Signed-off-by: Samuel Just <sam.just@inktank.com>
PGBackend: allow queue_transaction to specify an op

Signed-off-by: Samuel Just <sam.just@inktank.com>
osd/: move client op handling into ReplicatedBackend

Signed-off-by: Samuel Just <sam.just@inktank.com>
hobject: admit that gen_t is actually version_t

Signed-off-by: Samuel Just <sam.just@inktank.com>
osd_types: ObjectModDesc

Contains information needed to roll back a pg_log_entry_t.

Signed-off-by: Samuel Just <sam.just@inktank.com>