def __init__(self, conf, greedy=True): super(CephStorage, self).__init__(conf) self.rados, self.ioctx = ceph.create_rados_connection(conf) # NOTE(sileht): constants can't be class attributes because # they rely on presence of rados module # NOTE(sileht): We allow to read the measure object on # outdated replicats, that safe for us, we will # get the new stuffs on next metricd pass. self.OMAP_READ_FLAGS = (rados.LIBRADOS_OPERATION_BALANCE_READS | rados.LIBRADOS_OPERATION_SKIPRWLOCKS) # NOTE(sileht): That should be safe to manipulate the omap keys # with any OSDs at the same times, each osd should replicate the # new key to others and same thing for deletion. # I wonder how ceph handle rm_omap and set_omap run at same time # on the same key. I assume the operation are timestamped so that will # be same. If not, they are still one acceptable race here, a rm_omap # can finish before all replicats of set_omap are done, but we don't # care, if that occurs next metricd run, will just remove it again, no # object with the measure have already been delected by previous, so # we are safe and good. self.OMAP_WRITE_FLAGS = rados.LIBRADOS_OPERATION_SKIPRWLOCKS
def __init__(self, conf): super(CephStorage, self).__init__(conf) self.rados, self.ioctx = ceph.create_rados_connection(conf)