Fix production deadlock
This commit is contained in:
@@ -378,11 +378,20 @@ class ProductionAlertService(BaseAlertService, AlertServiceMixin):
|
||||
}
|
||||
}, item_type='alert')
|
||||
|
||||
# Mark as acknowledged to avoid duplicates
|
||||
await self.db_manager.execute(
|
||||
"UPDATE quality_checks SET acknowledged = true WHERE id = $1",
|
||||
issue['id']
|
||||
)
|
||||
# Mark as acknowledged to avoid duplicates - using proper session management
|
||||
try:
|
||||
from sqlalchemy import text
|
||||
async with self.db_manager.get_session() as session:
|
||||
await session.execute(
|
||||
text("UPDATE quality_checks SET acknowledged = true WHERE id = :id"),
|
||||
{"id": issue['id']}
|
||||
)
|
||||
await session.commit()
|
||||
except Exception as e:
|
||||
logger.error("Failed to update quality check acknowledged status",
|
||||
quality_check_id=str(issue.get('id')),
|
||||
error=str(e))
|
||||
# Don't raise here to avoid breaking the main flow
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Error processing quality issue",
|
||||
@@ -421,17 +430,20 @@ class ProductionAlertService(BaseAlertService, AlertServiceMixin):
|
||||
for tenant_id in tenants:
|
||||
try:
|
||||
from sqlalchemy import text
|
||||
# Use a separate session for each tenant to avoid connection blocking
|
||||
async with self.db_manager.get_session() as session:
|
||||
result = await session.execute(text(query), {"tenant_id": tenant_id})
|
||||
equipment_list = result.fetchall()
|
||||
|
||||
for equipment in equipment_list:
|
||||
# Process each equipment item in a non-blocking manner
|
||||
await self._process_equipment_issue(equipment)
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Error checking equipment status",
|
||||
tenant_id=str(tenant_id),
|
||||
error=str(e))
|
||||
# Continue processing other tenants despite this error
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Equipment status check failed", error=str(e))
|
||||
@@ -558,17 +570,20 @@ class ProductionAlertService(BaseAlertService, AlertServiceMixin):
|
||||
for tenant_id in tenants:
|
||||
try:
|
||||
from sqlalchemy import text
|
||||
# Use a separate session per tenant to avoid connection blocking
|
||||
async with self.db_manager.get_session() as session:
|
||||
result = await session.execute(text(query), {"tenant_id": tenant_id})
|
||||
recommendations = result.fetchall()
|
||||
|
||||
for rec in recommendations:
|
||||
# Process each recommendation individually
|
||||
await self._generate_efficiency_recommendation(tenant_id, rec)
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Error generating efficiency recommendations",
|
||||
tenant_id=str(tenant_id),
|
||||
error=str(e))
|
||||
# Continue with other tenants despite this error
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Efficiency recommendations failed", error=str(e))
|
||||
@@ -665,6 +680,7 @@ class ProductionAlertService(BaseAlertService, AlertServiceMixin):
|
||||
for tenant_id in tenants:
|
||||
try:
|
||||
from sqlalchemy import text
|
||||
# Use a separate session per tenant to avoid connection blocking
|
||||
async with self.db_manager.get_session() as session:
|
||||
result = await session.execute(text(query), {"tenant_id": tenant_id})
|
||||
energy_data = result.fetchall()
|
||||
@@ -676,6 +692,7 @@ class ProductionAlertService(BaseAlertService, AlertServiceMixin):
|
||||
logger.error("Error generating energy recommendations",
|
||||
tenant_id=str(tenant_id),
|
||||
error=str(e))
|
||||
# Continue with other tenants despite this error
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Energy recommendations failed", error=str(e))
|
||||
|
||||
Reference in New Issue
Block a user