fix: skip re-extraction if source directory already exists
When reusing a source image (Copy flow), the archive was already extracted in /mnt/converter/in/. The extraction step failed with 'Destination path already exists' from 7z. Now extract_if_needed checks if the expected output directory already contains disk images, and returns it directly without re-extracting.
This commit is contained in:
parent
111d0d1331
commit
7ded831354
1 changed files with 13 additions and 0 deletions
|
|
@ -6,6 +6,7 @@ Runs on the Proxmox host (srv2) where qemu-img, 7z, unzip, tar are available.
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
|
|
@ -17,6 +18,8 @@ from typing import Optional
|
|||
STAGING_IN = Path("/mnt/converter/in")
|
||||
STAGING_OUT = Path("/mnt/converter/out")
|
||||
|
||||
logger = logging.getLogger("backend.converter")
|
||||
|
||||
DISK_EXTENSIONS = {".vmdk", ".qcow2", ".qcow", ".img", ".raw", ".vhd", ".vhdx"}
|
||||
|
||||
ARCHIVE_EXTENSIONS = {".7z", ".zip", ".rar", ".tar.gz", ".tgz", ".tar", ".gz", ".bz2", ".xz"}
|
||||
|
|
@ -77,6 +80,16 @@ def extract_if_needed(filename: str) -> Path:
|
|||
stem = stem[:-len(e)]
|
||||
break
|
||||
|
||||
# If already extracted, skip re-extraction
|
||||
expected_dir = STAGING_IN / stem
|
||||
if expected_dir.is_dir() and any(
|
||||
f.suffix.lower() in DISK_EXTENSIONS
|
||||
for f in expected_dir.rglob("*")
|
||||
if f.is_file()
|
||||
):
|
||||
logger.info("Already extracted: %s", expected_dir)
|
||||
return expected_dir
|
||||
|
||||
# Snapshot STAGING_IN before extraction
|
||||
before = set(STAGING_IN.iterdir()) if STAGING_IN.exists() else set()
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue