Fix: Add missing return statement in needs_recovery for normal case

- Add complete logic for checking timestamp mismatch
- Ensure all code paths return tuple (needs_recovery, is_full_resync)
- Fixes 'cannot unpack non-iterable bool object' error
parent 72703ef9
...@@ -1596,6 +1596,42 @@ class ReportsSyncResponseHandler(ResponseHandler): ...@@ -1596,6 +1596,42 @@ class ReportsSyncResponseHandler(ResponseHandler):
# Return (True, True) - needs recovery but it's a full resync scenario # Return (True, True) - needs recovery but it's a full resync scenario
return (True, True) return (True, True)
# No full resync needed, check for timestamp mismatch
session = self.db_manager.get_session()
try:
# Check if local tracking exists
local_tracking = session.query(self.ReportsSyncTrackingModel).filter_by(
entity_type='sync',
entity_id='latest'
).first()
if not local_tracking:
# No local tracking exists - need recovery
logger.info("No local tracking found - recovery needed")
return (True, False)
# Compare sync IDs if available
server_sync_id = server_info.get('last_sync_id')
if server_sync_id:
# If server has sync info but local doesn't match, need recovery
# We can't directly compare sync IDs since they're generated differently
# Instead, compare timestamps
server_timestamp = server_info.get('last_sync_timestamp')
if server_timestamp:
server_time = datetime.fromisoformat(server_timestamp.replace('Z', '+00:00'))
# If server time is significantly newer than local, need recovery
time_diff = abs((server_time - local_tracking.last_synced_at).total_seconds())
if time_diff > 60: # More than 1 minute difference
logger.warning(f"Sync time mismatch detected: server={server_time}, local={local_tracking.last_synced_at}")
return (True, False)
# No recovery needed
return (False, False)
finally:
session.close()
session = self.db_manager.get_session() session = self.db_manager.get_session()
try: try:
# Check if local tracking exists # Check if local tracking exists
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment