Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/cassandra/cql.py
Show First 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | |||||
from .common import TOKEN_BEGIN, TOKEN_END, hash_url | from .common import TOKEN_BEGIN, TOKEN_END, hash_url | ||||
from .model import ( | from .model import ( | ||||
MAGIC_NULL_PK, | MAGIC_NULL_PK, | ||||
BaseRow, | BaseRow, | ||||
ContentRow, | ContentRow, | ||||
DirectoryEntryRow, | DirectoryEntryRow, | ||||
DirectoryRow, | DirectoryRow, | ||||
ExtIDByTargetRow, | ExtIDByTargetRow, | ||||
ExtIDByTargetVersionRow, | |||||
ExtIDRow, | ExtIDRow, | ||||
MetadataAuthorityRow, | MetadataAuthorityRow, | ||||
MetadataFetcherRow, | MetadataFetcherRow, | ||||
ObjectCountRow, | ObjectCountRow, | ||||
OriginRow, | OriginRow, | ||||
OriginVisitRow, | OriginVisitRow, | ||||
OriginVisitStatusRow, | OriginVisitStatusRow, | ||||
RawExtrinsicMetadataByIdRow, | RawExtrinsicMetadataByIdRow, | ||||
▲ Show 20 Lines • Show All 1,259 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]),) | ||||
@_prepared_select_statement( | @_prepared_select_statement( | ||||
ExtIDRow, "WHERE extid_type=? AND extid=?", | ExtIDRow, "WHERE extid_type=? AND extid=?", | ||||
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. | |||||
) | ) | ||||
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, version: Optional[int] = None, | ||||
) -> Iterable[ExtIDRow]: | ) -> Iterable[ExtIDRow]: | ||||
for token in self._extid_get_tokens_from_target(target_type, target): | if version is not None: | ||||
extids = self._extid_get_tokens_from_target_and_version( | |||||
target_type, target, version | |||||
) | |||||
else: | |||||
extids = self._extid_get_tokens_from_target(target_type, target) | |||||
for token in extids: | |||||
if token is not None: | if token is not None: | ||||
for extid in self.extid_get_from_token(token): | for extid in self.extid_get_from_token(token): | ||||
# 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 (version is None or extid.extid_version == version) | |||||
): | ): | ||||
yield extid | yield extid | ||||
########################## | ########################## | ||||
# 'extid_by_target' table | # 'extid_by_target' table | ||||
########################## | ########################## | ||||
@_prepared_insert_statement(ExtIDByTargetRow) | @_prepared_insert_statement(ExtIDByTargetRow) | ||||
def extid_index_add_one(self, row: ExtIDByTargetRow, *, statement) -> None: | def extid_index_add_one(self, row: ExtIDByTargetRow, *, statement) -> None: | ||||
"""Adds a row mapping extid[target_type, target] to the token of the ExtID in | """Adds a row mapping extid[target_type, target] to the token of the ExtID in | ||||
the main 'extid' table.""" | the main 'extid' table.""" | ||||
self._add_one(statement, row) | self._add_one(statement, row) | ||||
@_prepared_insert_statement(ExtIDByTargetVersionRow) | |||||
def extid_index_version_add_one( | |||||
self, row: ExtIDByTargetVersionRow, *, statement | |||||
) -> None: | |||||
"""Adds a row mapping extid[target_type, target, version] to the token of the | |||||
ExtID in the main 'extid' table. | |||||
""" | |||||
self._add_one(statement, row) | |||||
@_prepared_statement( | @_prepared_statement( | ||||
f""" | f""" | ||||
SELECT target_token | SELECT target_token | ||||
FROM {ExtIDByTargetRow.TABLE} | FROM {ExtIDByTargetRow.TABLE} | ||||
WHERE target_type = ? AND target = ? | WHERE target_type = ? AND target = ? | ||||
""" | """ | ||||
) | ) | ||||
def _extid_get_tokens_from_target( | def _extid_get_tokens_from_target( | ||||
self, target_type: str, target: bytes, *, statement | self, target_type: str, target: bytes, *, statement | ||||
) -> Iterable[int]: | ) -> Iterable[int]: | ||||
return ( | return ( | ||||
row["target_token"] | row["target_token"] | ||||
for row in self._execute_with_retries(statement, [target_type, target]) | for row in self._execute_with_retries(statement, [target_type, target]) | ||||
) | ) | ||||
@_prepared_statement( | |||||
f""" | |||||
SELECT target_token | |||||
FROM {ExtIDByTargetVersionRow.TABLE} | |||||
WHERE target_type = ? AND target = ? and extid_version = ? | |||||
""" | |||||
) | |||||
def _extid_get_tokens_from_target_and_version( | |||||
self, target_type: str, target: bytes, version: int, *, statement | |||||
) -> Iterable[int]: | |||||
return ( | |||||
row["target_token"] | |||||
for row in self._execute_with_retries( | |||||
statement, [target_type, target, version] | |||||
) | |||||
) | |||||
########################## | ########################## | ||||
# Miscellaneous | # Miscellaneous | ||||
########################## | ########################## | ||||
def stat_counters(self) -> Iterable[ObjectCountRow]: | def stat_counters(self) -> Iterable[ObjectCountRow]: | ||||
raise NotImplementedError( | raise NotImplementedError( | ||||
"stat_counters is not implemented by the Cassandra backend" | "stat_counters is not implemented by the Cassandra backend" | ||||
) | ) | ||||
@_prepared_statement("SELECT uuid() FROM revision LIMIT 1;") | @_prepared_statement("SELECT uuid() FROM revision LIMIT 1;") | ||||
def check_read(self, *, statement): | def check_read(self, *, statement): | ||||
self._execute_with_retries(statement, []) | self._execute_with_retries(statement, []) |
actually it does not, so the error is legitimate
You can rephrase the comment like this: