diff --git a/swh/storage/cassandra/converters.py b/swh/storage/cassandra/converters.py --- a/swh/storage/cassandra/converters.py +++ b/swh/storage/cassandra/converters.py @@ -35,7 +35,9 @@ extra_headers = revision.extra_headers if not extra_headers and metadata and "extra_headers" in metadata: extra_headers = db_revision["metadata"].pop("extra_headers") - db_revision["metadata"] = json.dumps(db_revision["metadata"]) + db_revision["metadata"] = json.dumps( + dict(db_revision["metadata"] if db_revision["metadata"] is not None else None) + ) db_revision["extra_headers"] = extra_headers db_revision["type"] = db_revision["type"].value return db_revision diff --git a/swh/storage/cassandra/cql.py b/swh/storage/cassandra/cql.py --- a/swh/storage/cassandra/cql.py +++ b/swh/storage/cassandra/cql.py @@ -779,7 +779,9 @@ assert self._origin_visit_status_keys[-1] == "metadata" keys = self._origin_visit_status_keys - metadata = json.dumps(visit_update.metadata) + metadata = json.dumps( + dict(visit_update.metadata) if visit_update.metadata is not None else None + ) self._execute_with_retries( statement, [getattr(visit_update, key) for key in keys[:-1]] + [metadata] ) diff --git a/swh/storage/db.py b/swh/storage/db.py --- a/swh/storage/db.py +++ b/swh/storage/db.py @@ -9,11 +9,15 @@ from typing import Any, Dict, Iterable, List, Optional, Tuple, Union from swh.core.db import BaseDb -from swh.core.db.db_utils import stored_procedure, jsonize +from swh.core.db.db_utils import stored_procedure, jsonize as _jsonize from swh.core.db.db_utils import execute_values_generator from swh.model.model import OriginVisit, OriginVisitStatus, SHA1_SIZE +def jsonize(d): + return _jsonize(dict(d) if d is not None else None) + + class Db(BaseDb): """Proxy to the SWH DB, with wrappers around stored procedures