Repository navigation
Commit 4c290bd
feat(plugin): surface execution input and result on invocation hooks (#622)
* feat(plugin): surface execution input and result on invocation hooks
Adds InvocationInfo.executionInput (the deserialized handler input) plus
InvocationEndInfo.executionInput/executionResult (the value the handler
returned, populated only when the invocation completed the execution
successfully), so instrumentation plugins can record execution I/O.
Both records keep a constructor at their previous arity, so existing
callers compile unchanged. The plugin-facing deserialization is skipped
when no plugins are registered and yields null on failure, leaving the
authoritative input extraction to surface errors at its original point.
Mirrors the JS SDK's InvocationBaseInfo.executionInput /
InvocationEndInfo.executionResult and the Python SDK's
execution_input/execution_result (aws-durable-execution-sdk-python#616).
* style(plugin): mark new hook components @experimental
Matches the convention established by #620, which replaced the
preview-API @deprecated markers with @experimental on the individual
record components (as on InvocationEndInfo.executionError).
* fix(plugin): share one deserialized input and keep payloads out of toString
Review feedback:
- Deserialize the handler input once and hand the same instance to the
plugin hooks and the handler. The previous plugin-only extraction
deserialized a second time, doubling the cost, giving plugins a
different object than the handler, and re-running side effects in a
stateful custom SerDes. A deserialization failure is now captured and
rethrown after onInvocationStart, so the start and end hooks stay
paired as before.
- Override toString() on both invocation records to omit executionInput
and executionResult. Records render every component, so plugins that
log the info object whole would have begun emitting customer payloads
(possibly secrets or personal data). Output is otherwise unchanged
from before this branch; mirrors repr=False on the Python fields.
* fix(plugin): keep hooks paired for sneaky checked exceptions
SerDes.deserialize declares no checked exceptions, so an implementation
may sneaky-throw one (as DurableInputOutputSerDes does for IOException).
A RuntimeException-only capture let such a failure bypass
onInvocationStart while the future's failure path still fired
onInvocationEnd(FAILED), leaving a plugin that keys state on the start
hook with an unpaired end. Capture Throwable and rethrow it unchanged
via ExceptionHelper.sneakyThrow after the start hook.
Adds a regression test with a SerDes that sneaky-throws IOException:
verified failing (start hook count 0) with the narrower capture.
---------
Co-authored-by: Alex Wang <wangyb@amazon.com>1 parent 8ce3f23 commit 4c290bd
5 files changed
Lines changed: 348 additions & 10 deletions
File tree
- sdk-integration-tests/src/test/java/software/amazon/lambda/durable
- sdk/src
- main/java/software/amazon/lambda/durable
- execution
- plugin
- test/java/software/amazon/lambda/durable/plugin
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| 12 | + | |
| 13 | + | |
11 | 14 | | |
| 15 | + | |
12 | 16 | | |
13 | 17 | | |
14 | 18 | | |
| |||
19 | 23 | | |
20 | 24 | | |
21 | 25 | | |
| 26 | + | |
| 27 | + | |
22 | 28 | | |
| 29 | + | |
23 | 30 | | |
24 | 31 | | |
25 | 32 | | |
| |||
122 | 129 | | |
123 | 130 | | |
124 | 131 | | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
125 | 293 | | |
126 | 294 | | |
127 | 295 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
| |||
60 | 61 | | |
61 | 62 | | |
62 | 63 | | |
| 64 | + | |
| 65 | + | |
63 | 66 | | |
64 | 67 | | |
65 | 68 | | |
66 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
67 | 86 | | |
68 | 87 | | |
69 | 88 | | |
70 | 89 | | |
71 | 90 | | |
72 | 91 | | |
73 | 92 | | |
74 | | - | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
75 | 98 | | |
76 | | - | |
77 | | - | |
78 | 99 | | |
79 | 100 | | |
80 | 101 | | |
| |||
103 | 124 | | |
104 | 125 | | |
105 | 126 | | |
| 127 | + | |
| 128 | + | |
106 | 129 | | |
107 | 130 | | |
108 | 131 | | |
| |||
119 | 142 | | |
120 | 143 | | |
121 | 144 | | |
122 | | - | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
123 | 148 | | |
124 | 149 | | |
125 | 150 | | |
| |||
131 | 156 | | |
132 | 157 | | |
133 | 158 | | |
134 | | - | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
135 | 162 | | |
136 | 163 | | |
137 | 164 | | |
| |||
145 | 172 | | |
146 | 173 | | |
147 | 174 | | |
148 | | - | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
149 | 178 | | |
150 | 179 | | |
151 | 180 | | |
| |||
163 | 192 | | |
164 | 193 | | |
165 | 194 | | |
166 | | - | |
167 | | - | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
168 | 200 | | |
169 | 201 | | |
170 | 202 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
15 | 19 | | |
16 | 20 | | |
17 | 21 | | |
18 | 22 | | |
19 | 23 | | |
20 | 24 | | |
21 | | - | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
0 commit comments