refactor: Split extism out of core's dependency tree - #1148
Merged
Conversation
Move the extism-based WASM plugin runtime into a new auth-plugin-runtime crate boundary, keeping only wire contracts and the AuthPluginRuntime/HostFunctions traits in a new extism-free auth-plugin-core crate that openstack-keystone-core depends on instead. load_auth_plugins (the one place core previously constructed a concrete WasmPluginRegistry) moves to crates/keystone, so extism now only appears in the runtime crate and the service binary that actually executes plugins, cutting it from every other consumer of core's compile graph. Assisted-by: Claude <noreply@anthropic.com> Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
|
🦢 Load Test Results Goose Attack ReportPlan Overview
Request Metrics
Response Time Metrics
Status Code Metrics
Transaction Metrics
Scenario Metrics
Error Metrics
|
gtema
enabled auto-merge
August 3, 2026 18:15
|
🧪 Tempest Identity Compatibility Results (advisory, non-blocking) rust Failed test IDs |
|
| Project | keystone |
| Branch | claude/extism-keystone-core-refactor-8uj71b |
| Testbed | ubuntu-latest |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result nanoseconds (ns) (Result Δ%) | Upper Boundary nanoseconds (ns) (Limit %) |
|---|---|---|---|
| Command_Serde/apply/remove | 📈 view plot 🚷 view threshold | 144,710.00 ns(-54.68%)Baseline: 319,272.06 ns | 1,634,101.99 ns (8.86%) |
| Command_Serde/apply/set | 📈 view plot 🚷 view threshold | 155,110.00 ns(-55.59%)Baseline: 349,281.86 ns | 1,679,671.23 ns (9.23%) |
| Command_Serde/pack/delete | 📈 view plot 🚷 view threshold | 125.65 ns(+5.84%)Baseline: 118.71 ns | 157.53 ns (79.76%) |
| Command_Serde/pack/delete_index | 📈 view plot 🚷 view threshold | 112.74 ns(+7.22%)Baseline: 105.15 ns | 139.12 ns (81.04%) |
| Command_Serde/pack/set | 📈 view plot 🚷 view threshold | 204.96 ns(+8.18%)Baseline: 189.47 ns | 248.75 ns (82.40%) |
| Command_Serde/pack/set_index | 📈 view plot 🚷 view threshold | 112.38 ns(+6.86%)Baseline: 105.17 ns | 139.18 ns (80.75%) |
| Command_Serde/unpack/delete | 📈 view plot 🚷 view threshold | 188.74 ns(+2.24%)Baseline: 184.61 ns | 267.96 ns (70.44%) |
| Command_Serde/unpack/delete_index | 📈 view plot 🚷 view threshold | 160.77 ns(+3.76%)Baseline: 154.95 ns | 218.78 ns (73.48%) |
| Command_Serde/unpack/set | 📈 view plot 🚷 view threshold | 283.18 ns(+10.36%)Baseline: 256.60 ns | 349.57 ns (81.01%) |
| Command_Serde/unpack/set_index | 📈 view plot 🚷 view threshold | 157.49 ns(+4.01%)Baseline: 151.42 ns | 212.26 ns (74.20%) |
| Payload_encryption/pack/remove_cmd | 📈 view plot 🚷 view threshold | 125.09 ns(+10.21%)Baseline: 113.50 ns | 151.03 ns (82.82%) |
| Payload_encryption/pack/set_cmd | 📈 view plot 🚷 view threshold | 213.15 ns(+9.09%)Baseline: 195.39 ns | 263.37 ns (80.93%) |
| Payload_encryption/unpack/remove_cmd | 📈 view plot 🚷 view threshold | 216.22 ns(+11.96%)Baseline: 193.13 ns | 281.45 ns (76.82%) |
| Payload_encryption/unpack/set_cmd | 📈 view plot 🚷 view threshold | 310.83 ns(+15.08%)Baseline: 270.11 ns | 374.42 ns (83.02%) |
| Raft_1Node_Latency/prefix/1node | 📈 view plot 🚷 view threshold | 2,507,700.00 ns(-6.57%)Baseline: 2,684,171.25 ns | 6,171,231.98 ns (40.64%) |
| Raft_1Node_Latency/read/1node | 📈 view plot 🚷 view threshold | 43,850.00 ns(+15.19%)Baseline: 38,068.81 ns | 53,319.60 ns (82.24%) |
| Raft_1Node_Latency/remove/1node | 📈 view plot 🚷 view threshold | 404,660.00 ns(-50.53%)Baseline: 818,054.53 ns | 4,098,046.95 ns (9.87%) |
| Raft_1Node_Latency/write/1node | 📈 view plot 🚷 view threshold | 432,950.00 ns(-55.43%)Baseline: 971,300.16 ns | 5,492,419.70 ns (7.88%) |
| build_snapshot/default | 📈 view plot 🚷 view threshold | 117,100.00 ns(-6.42%)Baseline: 125,140.23 ns | 219,356.50 ns (53.38%) |
| fernet token/project | 📈 view plot 🚷 view threshold | 1,503.10 ns(+5.41%)Baseline: 1,425.89 ns | 1,811.00 ns (83.00%) |
| get_data_keyspace | 📈 view plot 🚷 view threshold | 0.31 ns(-1.08%)Baseline: 0.32 ns | 0.39 ns (80.42%) |
| get_db | 📈 view plot 🚷 view threshold | 0.31 ns(-1.23%)Baseline: 0.32 ns | 0.39 ns (80.42%) |
| get_fernet_token_timestamp/project | 📈 view plot 🚷 view threshold | 159.04 ns(+13.24%)Baseline: 140.44 ns | 179.00 ns (88.85%) |
| get_keyspace | 📈 view plot 🚷 view threshold | 4.33 ns(-29.68%)Baseline: 6.16 ns | 14.58 ns (29.72%) |
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Move the extism-based WASM plugin runtime into a new
auth-plugin-runtime crate boundary, keeping only wire contracts and
the AuthPluginRuntime/HostFunctions traits in a new extism-free
auth-plugin-core crate that openstack-keystone-core depends on
instead. load_auth_plugins (the one place core previously
constructed a concrete WasmPluginRegistry) moves to crates/keystone,
so extism now only appears in the runtime crate and the service
binary that actually executes plugins, cutting it from every other
consumer of core's compile graph.
Assisted-by: Claude noreply@anthropic.com
Signed-off-by: Artem Goncharov artem.goncharov@gmail.com