This commit is contained in:
mike
2025-12-12 23:04:51 +01:00
parent 56b2db82fc
commit 87550e426a
14 changed files with 132 additions and 122 deletions

View File

@@ -63,7 +63,7 @@ class MigrationEngine:
CREATE TABLE IF NOT EXISTS operations (
id SERIAL PRIMARY KEY,
source_path TEXT NOT NULL,
dest_path TEXT NOT NULL,
target_path TEXT NOT NULL,
operation_type TEXT NOT NULL,
size BIGINT DEFAULT 0,
status TEXT DEFAULT 'pending',
@@ -77,7 +77,7 @@ class MigrationEngine:
# Create index on status
cursor.execute("""
CREATE INDEX IF NOT EXISTS idx_operations_status
ON operations_bak(status)
ON operations(status)
""")
conn.commit()
@@ -107,7 +107,7 @@ class MigrationEngine:
params = []
if disk:
conditions.append("disk = %s")
conditions.append("disk_label = %s")
params.append(disk)
if category:
@@ -116,7 +116,7 @@ class MigrationEngine:
query = f"""
SELECT path, size, category, duplicate_of
FROM files_bak
FROM files
WHERE {' AND '.join(conditions)}
ORDER BY category, path
"""
@@ -133,7 +133,7 @@ class MigrationEngine:
source = Path(path_str)
# Determine destination
dest_path = self.target_base / file_category / source.name
target_path = self.target_base / file_category / source.name
# Determine operation type
if duplicate_of:
@@ -145,7 +145,7 @@ class MigrationEngine:
operation = OperationRecord(
source_path=source,
dest_path=dest_path,
target_path=target_path,
operation_type=operation_type,
size=size
)
@@ -200,7 +200,7 @@ class MigrationEngine:
# In dry run, just log what would happen
self.logger.debug(
f"[DRY RUN] Would {operation.operation_type}: "
f"{operation.source_path} -> {operation.dest_path}"
f"{operation.source_path} -> {operation.target_path}"
)
stats.files_succeeded += 1
else:
@@ -261,7 +261,7 @@ class MigrationEngine:
# Execute migration
success = strategy.migrate(
operation.source_path,
operation.dest_path,
operation.target_path,
verify=self.processing_config.verify_operations
)
@@ -293,14 +293,14 @@ class MigrationEngine:
cursor = conn.cursor()
cursor.execute("""
INSERT INTO operations_bak (
source_path, dest_path, operation_type, size,
INSERT INTO operations (
source_path, target_path, operation_type, bytes_processed,
status, error, executed_at, verified
)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
""", (
str(operation.source_path),
str(operation.dest_path),
str(operation.target_path),
operation.operation_type,
operation.size,
operation.status,
@@ -321,22 +321,22 @@ class MigrationEngine:
Returns:
True if rollback successful
"""
self.logger.warning(f"Rolling back: {operation.dest_path}")
self.logger.warning(f"Rolling back: {operation.target_path}")
try:
# Remove destination
if operation.dest_path.exists():
operation.dest_path.unlink()
if operation.target_path.exists():
operation.target_path.unlink()
# Update database
conn = self._get_connection()
cursor = conn.cursor()
cursor.execute("""
UPDATE operations_bak
UPDATE operations
SET status = 'rolled_back'
WHERE source_path = %s AND dest_path = %s
""", (str(operation.source_path), str(operation.dest_path)))
WHERE source_path = %s AND target_path = %s
""", (str(operation.source_path), str(operation.target_path)))
conn.commit()
cursor.close()
@@ -344,7 +344,7 @@ class MigrationEngine:
return True
except Exception as e:
self.logger.error(f"Rollback failed: {operation.dest_path}: {e}")
self.logger.error(f"Rollback failed: {operation.target_path}: {e}")
return False
def get_migration_stats(self) -> dict:
@@ -359,13 +359,13 @@ class MigrationEngine:
stats = {}
# Total operations
cursor.execute("SELECT COUNT(*) FROM operations_bak")
cursor.execute("SELECT COUNT(*) FROM operations")
stats['total_operations'] = cursor.fetchone()[0]
# Operations by status
cursor.execute("""
SELECT status, COUNT(*)
FROM operations_bak
FROM operations
GROUP BY status
""")
@@ -375,7 +375,7 @@ class MigrationEngine:
# Total size migrated
cursor.execute("""
SELECT COALESCE(SUM(size), 0)
FROM operations_bak
FROM operations
WHERE status = 'completed'
""")
stats['total_size_migrated'] = cursor.fetchone()[0]
@@ -396,8 +396,8 @@ class MigrationEngine:
cursor = conn.cursor()
cursor.execute("""
SELECT source_path, dest_path, operation_type
FROM operations_bak
SELECT source_path, target_path, operation_type
FROM operations
WHERE status = 'completed' AND verified = FALSE
""")