[DAEMON-285] Unsubscribe in external plugin service dispatcher not called when forcefully closing connection
GitHub Issue | n/a |
---|---|
Type | Bug |
Priority | None |
Status | Resolved |
Resolution | Fixed |
Resolution Date | 2019-09-24T15:04:24.000+0000 |
Affected Version/s | Appc Daemon 3.0.0 |
Fix Version/s | Appc Daemon 3.1.0 |
Components | appcd-plugin |
Labels | n/a |
Reporter | Jan Vennemann |
Assignee | Jan Vennemann |
Created | 2019-09-24T10:18:38.000+0000 |
Updated | 2019-09-24T15:04:32.000+0000 |
Description
Canceling a subscription to a service dispatcher in external plugins won't properly trigger the cleanup logic since the plugin isn't notified about the end of response stream like it is happening in internal plugins.
*Steps to reproduce the behavior*
Open a subscription to any internal plugin, e.g.
Now, do the same for an external plugin, e.g. run
Open a subscription to any internal plugin, e.g. appcd exec /appcd/status/system/memory --subscribe
, and then cancel the subscription by CTRL+C
Notice that the subscription will be properly cleaned up as indicated by the following logs:
2019-09-24T10:15:47.154Z appcd:http:webserver 127.0.0.1:59795 disconnected
2019-09-24T10:15:47.155Z appcd:http:webserver 127.0.0.1:59795 closed WebSocket
2019-09-24T10:15:47.155Z appcd:service-dispatcher cleanup
2019-09-24T10:15:47.155Z appcd:service-dispatcher Stream ended, cleaning up
2019-09-24T10:15:47.155Z appcd:service-dispatcher [782e2d4a-b194-4f9a-806f-9b3cfc47b2f3] Unsubscribing: system.memory
2019-09-24T10:15:47.155Z appcd:service-dispatcher [782e2d4a-b194-4f9a-806f-9b3cfc47b2f3] No more listeners, removing descriptor: system.memory
2019-09-24T10:15:47.156Z appcd:service-dispatcher [782e2d4a-b194-4f9a-806f-9b3cfc47b2f3] Calling service's destroySubscription(): system.memory
2019-09-24T10:15:47.156Z appcd:data-service-dispatcher Removing gawk watch
2019-09-24T10:15:47.156Z appcd:core:websocket-session stream ended
2019-09-24T10:15:47.157Z appcd:core:websocket-session [0] 127.0.0.1:59795 [finish] /appcd/status/system/memory 200 2874ms
Now, do the same for an external plugin, e.g. run appcd exec /titanium/latest/sdk --subscribe
and then cancel the subscription by CTRL+C
No subscription cleanup is done as you can see in the following logs
2019-09-24T10:10:04.797Z appcd:http:webserver 127.0.0.1:59613 disconnected
2019-09-24T10:10:04.797Z appcd:http:webserver 127.0.0.1:59613 closed WebSocket
2019-09-24T10:10:04.798Z appcd:core:websocket-session stream ended
2019-09-24T10:10:04.798Z appcd:core:websocket-session [0] 127.0.0.1:59613 [finish] /titanium/latest/sdk 200 7006ms
*Actual behavior*
Subscriptions in external plugins are not properly cleaned up and a service dispatchers onUnsubscribe
and destroySubscription
are not being called.
*Expected behavior*
A subscriptions cleanup logic is properly being executed for external plugins.
PR: https://github.com/appcelerator/appc-daemon/pull/431