Skip to content
Closed
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
32d4124
introduce test
sabasehrish Nov 12, 2025
635874b
make provider_test work
marcpaterno Nov 17, 2025
e696b2d
Add development plan notes to provider_test.cpp
marcpaterno Nov 17, 2025
29546d1
Introduce non-trivial data product
marcpaterno Nov 17, 2025
81dc861
Add stub provider with struct data product
marcpaterno Nov 19, 2025
dc16810
Add provide Method And Documentation
marcpaterno Nov 19, 2025
c5ad9de
Add provider node support to framework
marcpaterno Nov 26, 2025
a71595b
Add provider node support to framework
marcpaterno Dec 2, 2025
6d96e2a
Adjust the matching between providers and downstream ports
knoepfel Dec 2, 2025
5f74b75
Make sure there is only one entry per unique provider name
knoepfel Dec 2, 2025
697fcb3
Change provider API from input_family to output_product
knoepfel Dec 3, 2025
144a67d
Remove output_products from provider_api
marcpaterno Dec 5, 2025
19c78f0
Add providers for tests
knoepfel Dec 2, 2025
bed7e95
Add providers for tests.
sabasehrish Dec 5, 2025
b1b217f
Modify tests to use providers
marcpaterno Dec 5, 2025
223dc18
Modify more tests to use providers
marcpaterno Dec 5, 2025
bcd4ecf
Add provider support to graph_proxy
marcpaterno Dec 8, 2025
9f63d3f
added providers to benchmark tests
sabasehrish Dec 8, 2025
fc8d46a
added providers to check_parallelism tests
sabasehrish Dec 8, 2025
2811ad1
added providers to the job:add test
sabasehrish Dec 8, 2025
9d8ce91
added provider to the many_events test
sabasehrish Dec 8, 2025
53ff93a
added provider to the mock-workflow test
sabasehrish Dec 8, 2025
a5a962c
adding the provider
sabasehrish Dec 8, 2025
146eafc
changing data_store to data_cell_index in graph
sabasehrish Dec 8, 2025
15c324e
More work toward function providers
marcpaterno Dec 8, 2025
f3b0b3e
Adjust fold bookkeeping; remove unnecessary product_store functionality
knoepfel Dec 9, 2025
141496c
Apply clang-format
knoepfel Dec 9, 2025
0bfb7bc
added algorithm header
sabasehrish Dec 9, 2025
6904f36
Adjust driver to accommodate API change
knoepfel Dec 10, 2025
96cb5d4
updated multiplexer to work with providers
sabasehrish Dec 9, 2025
3be11b3
removed fancy comments
sabasehrish Dec 9, 2025
2c9ebed
added execution checks for providers
sabasehrish Dec 9, 2025
32ab6a4
Apply clang-format and update code comments
knoepfel Dec 9, 2025
8efa8f0
Move making of provider edges to dedicated function
knoepfel Dec 9, 2025
3e164c7
Reduce severity of (or remove) logged messages
knoepfel Dec 9, 2025
611de81
Relax check on execution counts for now
knoepfel Dec 9, 2025
bd98914
Simplify multiplexing
knoepfel Dec 9, 2025
94dfb00
Further simplifications to multiplexing
knoepfel Dec 9, 2025
0ece841
Another tweak
knoepfel Dec 9, 2025
e820868
Reduce duplication
knoepfel Dec 10, 2025
7448456
Add caching to providers to prevent unnecessary re-execution
sabasehrish Dec 10, 2025
f8d0196
Allow head ports to be empty for driver-only jobs
knoepfel Dec 10, 2025
6242bd8
Simplify declared_provider class
knoepfel Dec 10, 2025
589d19a
Some cleanups; and a typo fix
knoepfel Dec 10, 2025
40cccf4
Remove trailing whitespace
knoepfel Dec 10, 2025
46e0bdd
Some renaming
knoepfel Dec 10, 2025
92c09c9
Set type of provided product
knoepfel Dec 10, 2025
fb945c0
Initial plan
Copilot Dec 11, 2025
cf2a0da
Add test coverage for provider flush message handling
Copilot Dec 11, 2025
cb658df
Merge branch 'providers' into copilot/sub-pr-180
greenc-FNAL Dec 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions test/provider_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,39 @@ TEST_CASE("provider_test")
CHECK(g.execution_counts("passer") == max_events);
CHECK(g.execution_counts("my_name_here") == max_events);
}

TEST_CASE("provider_with_flush")
{
// Test that providers handle flush messages correctly
// Flush messages should pass through providers without triggering execution
constexpr auto max_events{2u};
spdlog::flush_on(spdlog::level::warn);

auto levels_to_process = [](framework_driver& driver) {
auto job_index = data_cell_index::base_ptr();
driver.yield(job_index);

for (unsigned int i : std::views::iota(1u, max_events + 1)) {
auto spill_index = job_index->make_child(i, "spill");
driver.yield(spill_index);

// Send a flush after each spill - this tests the flush handling path
auto flush_store = product_store::base()->make_flush();
driver.yield(flush_store->id());
}
};

framework_graph g{levels_to_process};

g.provide("flush_aware_provider", give_me_vertices, concurrency::unlimited)
.output_product("flush_vertices"_in("spill"));

g.transform("flush_consumer", pass_on, concurrency::unlimited)
.input_family("flush_vertices"_in("spill"))
.output_products("vertex_data");

g.execute();
// Flush messages should not count as provider executions
CHECK(g.execution_counts("flush_consumer") == max_events);
CHECK(g.execution_counts("flush_aware_provider") == max_events);
}