in esrally/track/params.py [0:0]
def __next__(self):
if self.conflicting_ids is not None:
if self.conflict_probability and self.id_up_to > 0 and self.rand() <= self.conflict_probability:
# a recency of zero means that we don't care about recency and just take a random number
# within the whole interval.
if self.recency == 0:
idx = self.randint(0, self.id_up_to - 1)
else:
# A recency > 0 biases id selection towards more recent ids. The recency parameter decides
# by how much we bias. See docs for the resulting curve.
#
# idx_range is in the interval [0, 1].
idx_range = min(self.randexp(GenerateActionMetaData.RECENCY_SLOPE * self.recency), 1)
# the resulting index is in the range [0, self.id_up_to). Note that a smaller idx_range
# biases towards more recently used ids (higher indexes).
idx = round((self.id_up_to - 1) * (1 - idx_range))
doc_id = self.conflicting_ids[idx]
action = self.on_conflict
else:
if self.id_up_to >= len(self.conflicting_ids):
raise StopIteration()
doc_id = self.conflicting_ids[self.id_up_to]
self.id_up_to += 1
action = "index"
if action == "index":
return "index", self.meta_data_index_with_id % doc_id
elif action == "update":
return "update", self.meta_data_update_with_id % doc_id
else:
raise exceptions.RallyAssertionError(f"Unknown action [{action}]")
else:
if self.use_create:
return "create", self.meta_data_create_no_id
return "index", self.meta_data_index_no_id