fix persisted unit failure identity
This commit is contained in:
@@ -38,6 +38,7 @@ struct SharedUnitFilesystemState
|
||||
String compile_output_content;
|
||||
String metadata_build_token;
|
||||
String metadata_input_signature;
|
||||
String metadata_source_path;
|
||||
String current_input_signature;
|
||||
};
|
||||
|
||||
@@ -222,6 +223,7 @@ String compiler_unit_metadata_text(Request* context, SharedUnit* su, String inpu
|
||||
return(
|
||||
"format=uce-unit-metadata-v1\n"
|
||||
"unit_abi_version=" + std::to_string(UCE_UNIT_ABI_VERSION) + "\n"
|
||||
"source_path=" + su->file_name + "\n"
|
||||
"input_signature=" + input_signature + "\n"
|
||||
"build_token=" + compiler_unit_build_token() + "\n"
|
||||
);
|
||||
@@ -275,6 +277,8 @@ bool compiler_failure_retry_deferred(Request* context, SharedUnit* su, const Sha
|
||||
return(false);
|
||||
if(!state.metadata_exists || !state.metadata_parsed || !state.abi_compatible || !state.input_signature_matches)
|
||||
return(false);
|
||||
if(state.metadata_source_path == "" || state.metadata_source_path != su->file_name)
|
||||
return(false);
|
||||
auto required_failure_inputs_time = std::max({
|
||||
state.source_time,
|
||||
state.setup_template_time,
|
||||
@@ -374,6 +378,9 @@ String compiler_normalize_unit_path(Request* context, String file_name)
|
||||
return("");
|
||||
if(file_name[0] != '/')
|
||||
file_name = expand_path(file_name, context->server->config["COMPILER_SYS_PATH"]);
|
||||
String canonical = path_real(file_name);
|
||||
if(canonical != "")
|
||||
return(canonical);
|
||||
return(file_name);
|
||||
}
|
||||
|
||||
@@ -474,6 +481,9 @@ SharedUnitFilesystemState inspect_shared_unit_filesystem(Request* context, Share
|
||||
auto input_it = metadata.find("input_signature");
|
||||
if(input_it != metadata.end())
|
||||
state.metadata_input_signature = input_it->second;
|
||||
auto source_it = metadata.find("source_path");
|
||||
if(source_it != metadata.end())
|
||||
state.metadata_source_path = source_it->second;
|
||||
auto build_it = metadata.find("build_token");
|
||||
if(build_it != metadata.end())
|
||||
state.metadata_build_token = build_it->second;
|
||||
|
||||
Reference in New Issue
Block a user