Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/cassandra/cql.py
Show First 20 Lines • Show All 1,328 Lines • ▼ Show 20 Lines | ) -> Optional[ExtIDRow]: | ||||
else: | else: | ||||
return None | return None | ||||
@_prepared_select_statement( | @_prepared_select_statement( | ||||
ExtIDRow, "WHERE token(extid_type, extid) = ?", | ExtIDRow, "WHERE token(extid_type, extid) = ?", | ||||
) | ) | ||||
def extid_get_from_token(self, token: int, *, statement) -> Iterable[ExtIDRow]: | def extid_get_from_token(self, token: int, *, statement) -> Iterable[ExtIDRow]: | ||||
return map(ExtIDRow.from_dict, self._execute_with_retries(statement, [token]),) | return map(ExtIDRow.from_dict, self._execute_with_retries(statement, [token]),) | ||||
# Rows are partitioned by token(extid_type, extid), then ordered (aka. "clustered") | |||||
# by (extid_type, extid, extid_version, ...). This means that, without knowing the | |||||
vlorentz: actually it does not, so the error is legitimate
You can rephrase the comment like this:
>… | |||||
Done Inline ActionsThanks that's way better. ardumont: Thanks that's way better. | |||||
# exact extid_type and extid, we need to scan the whole partition; which should be | |||||
# reasonably small. We can change the schema later if this becomes an issue | |||||
@_prepared_select_statement( | |||||
ExtIDRow, | |||||
"WHERE token(extid_type, extid) = ? AND extid_version = ? ALLOW FILTERING", | |||||
) | |||||
def extid_get_from_token_and_extid_version( | |||||
self, token: int, extid_version: int, *, statement | |||||
) -> Iterable[ExtIDRow]: | |||||
return map( | |||||
ExtIDRow.from_dict, | |||||
self._execute_with_retries(statement, [token, extid_version]), | |||||
) | |||||
@_prepared_select_statement( | @_prepared_select_statement( | ||||
ExtIDRow, "WHERE extid_type=? AND extid=?", | ExtIDRow, "WHERE extid_type=? AND extid=?", | ||||
) | ) | ||||
def extid_get_from_extid( | def extid_get_from_extid( | ||||
self, extid_type: str, extid: bytes, *, statement | self, extid_type: str, extid: bytes, *, statement | ||||
) -> Iterable[ExtIDRow]: | ) -> Iterable[ExtIDRow]: | ||||
return map( | return map( | ||||
ExtIDRow.from_dict, | ExtIDRow.from_dict, | ||||
self._execute_with_retries(statement, [extid_type, extid]), | self._execute_with_retries(statement, [extid_type, extid]), | ||||
) | ) | ||||
@_prepared_select_statement( | |||||
ExtIDRow, "WHERE extid_type=? AND extid=? AND extid_version = ?", | |||||
) | |||||
def extid_get_from_extid_and_version( | |||||
self, extid_type: str, extid: bytes, extid_version: int, *, statement | |||||
) -> Iterable[ExtIDRow]: | |||||
return map( | |||||
ExtIDRow.from_dict, | |||||
self._execute_with_retries(statement, [extid_type, extid, extid_version]), | |||||
) | |||||
def extid_get_from_target( | def extid_get_from_target( | ||||
self, target_type: str, target: bytes | self, | ||||
target_type: str, | |||||
target: bytes, | |||||
extid_type: Optional[str] = None, | |||||
extid_version: Optional[int] = None, | |||||
) -> Iterable[ExtIDRow]: | ) -> Iterable[ExtIDRow]: | ||||
for token in self._extid_get_tokens_from_target(target_type, target): | for token in self._extid_get_tokens_from_target(target_type, target): | ||||
if token is not None: | if token is not None: | ||||
for extid in self.extid_get_from_token(token): | if extid_type is not None and extid_version is not None: | ||||
extids = self.extid_get_from_token_and_extid_version( | |||||
token, extid_version | |||||
) | |||||
else: | |||||
extids = self.extid_get_from_token(token) | |||||
for extid in extids: | |||||
# re-check the extid against target (in case of murmur3 collision) | # re-check the extid against target (in case of murmur3 collision) | ||||
if ( | if ( | ||||
extid is not None | extid is not None | ||||
and extid.target_type == target_type | and extid.target_type == target_type | ||||
and extid.target == target | and extid.target == target | ||||
and ( | |||||
(extid_version is None and extid_type is None) | |||||
or ( | |||||
( | |||||
extid_version is not None | |||||
and extid.extid_version == extid_version | |||||
and extid_type is not None | |||||
and extid.extid_type == extid_type | |||||
) | |||||
) | |||||
) | |||||
): | ): | ||||
yield extid | yield extid | ||||
########################## | ########################## | ||||
# 'extid_by_target' table | # 'extid_by_target' table | ||||
########################## | ########################## | ||||
@_prepared_insert_statement(ExtIDByTargetRow) | @_prepared_insert_statement(ExtIDByTargetRow) | ||||
Show All 32 Lines |
actually it does not, so the error is legitimate
You can rephrase the comment like this: