diff --git a/image_import_worker.py b/image_import_worker.py index 552f826..274bb28 100644 --- a/image_import_worker.py +++ b/image_import_worker.py @@ -12,6 +12,9 @@ CHECK_INTERVAL = 10 # seconds app = create_app() +from sqlalchemy.exc import OperationalError +import time + def monitor_and_import(): with app.app_context(): print("[Image Importer] Monitoring for trigger flag...") @@ -19,43 +22,70 @@ def monitor_and_import(): while True: if os.path.exists(TRIGGER_FLAG): print("[Image Importer] Trigger flag found. Starting import...") - try: - result = import_images_task(SOURCE_DIR, DEST_DIR) - print(f"[Image Importer] {result}") - except Exception as e: - print(f"[Image Importer] Error during import: {e}") - finally: - try: - os.remove(TRIGGER_FLAG) - print("[Image Importer] Trigger flag cleared.") - except Exception as e: - print(f"[Image Importer] Failed to remove trigger flag: {e}") + max_retries = 3 + attempt = 0 - # Thumbnail generation Check + while attempt < max_retries: + try: + result = import_images_task(SOURCE_DIR, DEST_DIR) + print(f"[Image Importer] {result}") + break # Exit retry loop if successful + except OperationalError as e: + attempt += 1 + print(f"[Image Importer] Database error during import (attempt {attempt}): {e}") + if attempt >= max_retries: + print("[Image Importer] Max retries reached. Import failed.") + else: + sleep_time = 2 ** attempt + print(f"[Image Importer] Retrying in {sleep_time} seconds...") + time.sleep(sleep_time) + except Exception as e: + print(f"[Image Importer] Unexpected error during import: {e}") + break + finally: + try: + os.remove(TRIGGER_FLAG) + print("[Image Importer] Trigger flag cleared.") + except Exception as e: + print(f"[Image Importer] Failed to remove trigger flag: {e}") + + # Thumbnail regeneration if os.path.exists(THUMBNAIL_FLAG): print("[Image Importer] Thumbnail regeneration triggered.") - try: - from app.models import ImageRecord - from app.utils.image_importer import generate_thumbnail + max_retries = 3 + attempt = 0 - for img in ImageRecord.query.all(): - try: - generate_thumbnail(img.filepath, overwrite=True) - print(f"[Thumbnail] Regenerated for {img.filename}") - except Exception as e: - print(f"[Thumbnail] Failed for {img.filename}: {e}") - time.sleep(1) - except Exception as e: - print(f"[Image Importer] Error during thumbnail regeneration: {e}") - finally: + while attempt < max_retries: try: - os.remove(THUMBNAIL_FLAG) - print("[Image Importer] Thumbnail flag cleared.") + from app.models import ImageRecord + from app.utils.image_importer import generate_thumbnail + + for img in ImageRecord.query.all(): + try: + generate_thumbnail(img.filepath, overwrite=True) + print(f"[Thumbnail] Regenerated for {img.filename}") + except Exception as e: + print(f"[Thumbnail] Failed for {img.filename}: {e}") + break # Success + except OperationalError as e: + attempt += 1 + print(f"[Image Importer] Database error during thumbnail regen (attempt {attempt}): {e}") + if attempt >= max_retries: + print("[Image Importer] Max retries reached. Thumbnail regeneration failed.") + else: + sleep_time = 2 ** attempt + print(f"[Image Importer] Retrying in {sleep_time} seconds...") + time.sleep(sleep_time) except Exception as e: - print(f"[Image Importer] Failed to remove thumbnail flag: {e}") + print(f"[Image Importer] Unexpected error during thumbnail regen: {e}") + break + finally: + try: + os.remove(THUMBNAIL_FLAG) + print("[Image Importer] Thumbnail flag cleared.") + except Exception as e: + print(f"[Image Importer] Failed to remove thumbnail flag: {e}") - time.sleep(CHECK_INTERVAL) - if __name__ == '__main__': monitor_and_import()