Merge pull request #6256 from elsa-workflows/bug/6255

Handle exceptions in variable loading and fix type checking.
This commit is contained in:
Sipke Schoorstra 2025-01-01 22:08:33 +01:00 committed by GitHub
commit d3af106c32
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 10 deletions

View file

@ -104,7 +104,7 @@ public static class ObjectConverter
return underlyingTargetType switch
{
{ } t when t == typeof(string) => jsonNode.ToString(),
{ } t when t == typeof(ExpandoObject) => JsonSerializer.Deserialize<ExpandoObject>(jsonNode.ToJsonString()),
{ } t when t == typeof(ExpandoObject) && jsonNode.GetValueKind() == JsonValueKind.Object => JsonSerializer.Deserialize<ExpandoObject>(jsonNode.ToJsonString()),
{ } t when t != typeof(object) || converterOptions?.DeserializeJsonObjectToObject == true => jsonNode.Deserialize(targetType, serializerOptions),
_ => jsonNode
};

View file

@ -40,18 +40,26 @@ public class VariablePersistenceManager(IStorageDriverManager storageDriverManag
continue;
var id = GetStateId(variable);
var value = await driver.ReadAsync(id, storageDriverContext);
if (value == null) continue;
register.Declare(variable);
if (!variable.TryParseValue(value, out var parsedValue))
try
{
logger.LogWarning("Failed to parse value for variable {VariableId} of type {VariableType} with value {Value}", variable.Id, variable.GetVariableType().FullName, value);
continue;
}
var value = await driver.ReadAsync(id, storageDriverContext);
if (value == null) continue;
variable.Set(register, parsedValue);
register.Declare(variable);
if (!variable.TryParseValue(value, out var parsedValue))
{
logger.LogWarning("Failed to parse value for variable {VariableId} of type {VariableType} with value {Value}", variable.Id, variable.GetVariableType().FullName, value);
continue;
}
variable.Set(register, parsedValue);
}
catch (Exception e)
{
logger.LogError(e, "Failed to read variable {VariableId} from storage driver {StorageDriverType}", variable.Id, driver.GetType().FullName);
}
}
}
}