... | @@ -277,6 +277,31 @@ We also need the possibility to re-configure the hooks in runtime. We should uti |
... | @@ -277,6 +277,31 @@ We also need the possibility to re-configure the hooks in runtime. We should uti |
|
|
|
|
|
I think the above solutions should be enough for most cases, and we can start with them. Additionally, other solutions may be implemented internally in the hooks without dedicated support in the core.
|
|
I think the above solutions should be enough for most cases, and we can start with them. Additionally, other solutions may be implemented internally in the hooks without dedicated support in the core.
|
|
|
|
|
|
|
|
## Hook data sharing
|
|
|
|
|
|
|
|
Sharing or exchanging data between the hooks registered on the same callout may be beneficial. It allows controlling the processing flow from inside the hooks and covers advanced cases. The hook may communicate with each other to avoid collisions or doubled results. On the other hand, the hooks may be chained to sequentially analyze the data and make a single decision returned to the core.
|
|
|
|
|
|
|
|
In some use cases, exchanging data may be expected. The signature of the callout point may force the communication between hooks by dedicated function arguments and returns. On the other side, we cannot predict all situations when the hook's authors will need the sharing data feature, and we don't want to limit theirs.
|
|
|
|
|
|
|
|
We can implement two ways for sharing data: the first when the sharing is required by the core and the second for internal hook purposes.
|
|
|
|
|
|
|
|
The handling of hook communication will be the responsibility of the `Hook Executor`.
|
|
|
|
|
|
|
|
### Exchange data using context
|
|
|
|
|
|
|
|
We have a special `context.Context` structure in Go. It is a bag for variety, unstructured data. We can assume that each callout point will accept the context object. The same context instance will be passed to each hook sequentially. It allows hook's authors to internally manage the structure of the context and data exchange rules. The core will be only responsible for creating the context object and will know nothing about its content.
|
|
|
|
|
|
|
|
### Exchange data using callout parameters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Hook execution interruption
|
|
|
|
|
|
|
|
### Execution order
|
|
|
|
|
|
|
|
### Comparison
|
|
|
|
|
|
## Steps to implement hook
|
|
## Steps to implement hook
|
|
|
|
|
|
1. Look for needed callout points in the hook module
|
|
1. Look for needed callout points in the hook module
|
... | | ... | |