feat: support iteration wrapper nodes and filter overlay by selected iteration
Server: - Add split_depth and loop_depth columns (V9 migration) - Persist splitDepth/loopDepth with reflection fallback for older agent versions UI: - Detect iterations via wrapper processorTypes (loopIteration, splitIteration, multicastBranch) - Filter overlay by selected iteration at the wrapper level - Skip non-selected iteration wrappers entirely (wrapper + children) - Don't add synthetic wrappers to overlay (no diagram node correspondence) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -74,8 +74,8 @@ public class PostgresExecutionStore implements ExecutionStore {
|
||||
status, start_time, end_time, duration_ms, error_message, error_stacktrace,
|
||||
input_body, output_body, input_headers, output_headers, attributes,
|
||||
loop_index, loop_size, split_index, split_size, multicast_index,
|
||||
resolved_endpoint_uri)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?::jsonb, ?::jsonb, ?::jsonb, ?, ?, ?, ?, ?, ?)
|
||||
resolved_endpoint_uri, split_depth, loop_depth)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?::jsonb, ?::jsonb, ?::jsonb, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT (execution_id, processor_id, start_time) DO UPDATE SET
|
||||
status = EXCLUDED.status,
|
||||
end_time = COALESCE(EXCLUDED.end_time, processor_executions.end_time),
|
||||
@@ -92,7 +92,9 @@ public class PostgresExecutionStore implements ExecutionStore {
|
||||
split_index = COALESCE(EXCLUDED.split_index, processor_executions.split_index),
|
||||
split_size = COALESCE(EXCLUDED.split_size, processor_executions.split_size),
|
||||
multicast_index = COALESCE(EXCLUDED.multicast_index, processor_executions.multicast_index),
|
||||
resolved_endpoint_uri = COALESCE(EXCLUDED.resolved_endpoint_uri, processor_executions.resolved_endpoint_uri)
|
||||
resolved_endpoint_uri = COALESCE(EXCLUDED.resolved_endpoint_uri, processor_executions.resolved_endpoint_uri),
|
||||
split_depth = EXCLUDED.split_depth,
|
||||
loop_depth = EXCLUDED.loop_depth
|
||||
""",
|
||||
processors.stream().map(p -> new Object[]{
|
||||
p.executionId(), p.processorId(), p.processorType(),
|
||||
@@ -105,7 +107,9 @@ public class PostgresExecutionStore implements ExecutionStore {
|
||||
p.attributes(),
|
||||
p.loopIndex(), p.loopSize(), p.splitIndex(), p.splitSize(),
|
||||
p.multicastIndex(),
|
||||
p.resolvedEndpointUri()
|
||||
p.resolvedEndpointUri(),
|
||||
p.splitDepth(),
|
||||
p.loopDepth()
|
||||
}).toList());
|
||||
}
|
||||
|
||||
@@ -164,7 +168,9 @@ public class PostgresExecutionStore implements ExecutionStore {
|
||||
rs.getObject("split_index") != null ? rs.getInt("split_index") : null,
|
||||
rs.getObject("split_size") != null ? rs.getInt("split_size") : null,
|
||||
rs.getObject("multicast_index") != null ? rs.getInt("multicast_index") : null,
|
||||
rs.getString("resolved_endpoint_uri"));
|
||||
rs.getString("resolved_endpoint_uri"),
|
||||
rs.getInt("split_depth"),
|
||||
rs.getInt("loop_depth"));
|
||||
|
||||
private static Instant toInstant(ResultSet rs, String column) throws SQLException {
|
||||
Timestamp ts = rs.getTimestamp(column);
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
ALTER TABLE processor_executions ADD COLUMN resolved_endpoint_uri TEXT;
|
||||
ALTER TABLE processor_executions ADD COLUMN split_depth INTEGER DEFAULT 0;
|
||||
ALTER TABLE processor_executions ADD COLUMN loop_depth INTEGER DEFAULT 0;
|
||||
|
||||
Reference in New Issue
Block a user