Move geo cache commit handling into repository layer
This commit is contained in:
@@ -425,8 +425,14 @@ async def lookup(
|
||||
await _store(ip, result)
|
||||
if result.country_code is not None and db is not None:
|
||||
try:
|
||||
await _persist_entry(db, ip, result)
|
||||
await db.commit()
|
||||
await geo_cache_repo.upsert_entry_and_commit(
|
||||
db=db,
|
||||
ip=ip,
|
||||
country_code=result.country_code,
|
||||
country_name=result.country_name,
|
||||
asn=result.asn,
|
||||
org=result.org,
|
||||
)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
log.warning("geo_persist_failed", ip=ip, error=str(exc))
|
||||
log.debug("geo_lookup_success", ip=ip, country=result.country_code, asn=result.asn)
|
||||
@@ -451,8 +457,14 @@ async def lookup(
|
||||
await _store(ip, fallback)
|
||||
if fallback.country_code is not None and db is not None:
|
||||
try:
|
||||
await _persist_entry(db, ip, fallback)
|
||||
await db.commit()
|
||||
await geo_cache_repo.upsert_entry_and_commit(
|
||||
db=db,
|
||||
ip=ip,
|
||||
country_code=fallback.country_code,
|
||||
country_name=fallback.country_name,
|
||||
asn=fallback.asn,
|
||||
org=fallback.org,
|
||||
)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
log.warning("geo_persist_failed", ip=ip, error=str(exc))
|
||||
log.debug("geo_geoip_fallback_success", ip=ip, country=fallback.country_code)
|
||||
@@ -463,8 +475,7 @@ async def lookup(
|
||||
_neg_cache[ip] = time.monotonic()
|
||||
if db is not None:
|
||||
try:
|
||||
await _persist_neg_entry(db, ip)
|
||||
await db.commit()
|
||||
await geo_cache_repo.upsert_neg_entry_and_commit(db=db, ip=ip)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
log.warning("geo_persist_neg_failed", ip=ip, error=str(exc))
|
||||
|
||||
@@ -604,7 +615,7 @@ async def lookup_batch(
|
||||
# API failed — try local GeoIP fallback.
|
||||
fallback = _geoip_lookup(ip)
|
||||
if fallback is not None:
|
||||
_store(ip, fallback)
|
||||
await _store(ip, fallback)
|
||||
geo_result[ip] = fallback
|
||||
if db is not None:
|
||||
pos_rows.append(
|
||||
@@ -624,31 +635,20 @@ async def lookup_batch(
|
||||
if db is not None:
|
||||
neg_ips.append(ip)
|
||||
|
||||
if db is not None:
|
||||
if pos_rows:
|
||||
try:
|
||||
await geo_cache_repo.bulk_upsert_entries(db, pos_rows)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
log.warning(
|
||||
"geo_batch_persist_failed",
|
||||
count=len(pos_rows),
|
||||
error=str(exc),
|
||||
)
|
||||
if neg_ips:
|
||||
try:
|
||||
await geo_cache_repo.bulk_upsert_neg_entries(db, neg_ips)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
log.warning(
|
||||
"geo_batch_persist_neg_failed",
|
||||
count=len(neg_ips),
|
||||
error=str(exc),
|
||||
)
|
||||
|
||||
if db is not None:
|
||||
try:
|
||||
await db.commit()
|
||||
except Exception as exc: # noqa: BLE001
|
||||
log.warning("geo_batch_commit_failed", error=str(exc))
|
||||
if db is not None and (pos_rows or neg_ips):
|
||||
try:
|
||||
await geo_cache_repo.bulk_upsert_entries_and_neg_entries_and_commit(
|
||||
db,
|
||||
pos_rows,
|
||||
neg_ips,
|
||||
)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
log.warning(
|
||||
"geo_batch_persist_failed",
|
||||
positive_count=len(pos_rows),
|
||||
negative_count=len(neg_ips),
|
||||
error=str(exc),
|
||||
)
|
||||
|
||||
log.info(
|
||||
"geo_batch_lookup_complete",
|
||||
@@ -821,8 +821,7 @@ async def flush_dirty(db: aiosqlite.Connection) -> int:
|
||||
return 0
|
||||
|
||||
try:
|
||||
await geo_cache_repo.bulk_upsert_entries(db, rows)
|
||||
await db.commit()
|
||||
await geo_cache_repo.bulk_upsert_entries_and_commit(db, rows)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
log.warning("geo_flush_dirty_failed", error=str(exc))
|
||||
# Re-add to dirty so they are retried on the next flush cycle.
|
||||
|
||||
Reference in New Issue
Block a user