60 lines
1.8 KiB
Julia
60 lines
1.8 KiB
Julia
"""
|
|
tools/file_mutation_queue.jl - File mutation queue
|
|
|
|
This module provides file mutation serialization for safe concurrent file writes.
|
|
"""
|
|
|
|
module FileMutationQueue
|
|
|
|
using ..Types: *
|
|
using ..HarnessTypes: ExecutionEnv, getOrThrow, FileError, Result
|
|
|
|
# ============================================================================
|
|
# Mutation queue state
|
|
# ============================================================================
|
|
|
|
mutable struct MutationQueueState
|
|
queues::Dict{String, Any}
|
|
registration::Any
|
|
end
|
|
|
|
# Global state
|
|
const states = Dict{ExecutionEnv, MutationQueueState}()
|
|
|
|
function getState(env::ExecutionEnv)::MutationQueueState
|
|
if !haskey(states, env)
|
|
states[env] = MutationQueueState(Dict{String, Any}(), nothing)
|
|
end
|
|
return states[env]
|
|
end
|
|
|
|
# ============================================================================
|
|
# File mutation queue helpers
|
|
# ============================================================================
|
|
|
|
async function getMutationQueueKey(env::ExecutionEnv, path::String)::String
|
|
absolute_path = getOrThrow(getOrThrow(absolutePath(env, path), "Failed to get absolute path"))
|
|
canonical_path = canonicalPath(env, absolute_path, nothing)
|
|
if canonical_path.ok
|
|
return canonical_path.value
|
|
end
|
|
if canonical_path.error.code in ("not_found", "not_supported")
|
|
return absolute_path
|
|
end
|
|
throw(canonical_path.error)
|
|
end
|
|
|
|
# ============================================================================
|
|
# Main function - serialize file mutations
|
|
# ============================================================================
|
|
|
|
function withFileMutationQueue{T}(env::ExecutionEnv, path::String, fn::Function)::T
|
|
state = getState(env)
|
|
|
|
# TODO: Implement proper async queueing
|
|
# This is a simplified version
|
|
return fn()
|
|
end
|
|
|
|
end
|