cloudstack/engine/storage
Rohit Yadav 02dee6a029
CW1542: Fix thread leak in RemoteEndHostEndPoint (#54)
This fixes the following:
- Fixes thread leaks in RemoteEndHostEndPoint
- Fixes a potential NPE while finding EP for a storage/scope

Unbounded thread growth can be reproduced with following findings:
- Every unreachable template would produce 6 new threads (in a single
ScheduledExecutorService instance) spaced by 10 seconds
- Every reachable template url without the template would produce 1 new
thread (and one ScheduledExecutorService instance), it errors out quickly without
causing more thread growth.
- Every valid url will produce upto 10 threads as the same ep (endpoint
instance) will be reused to query upload/download (async callback)
progresses.

Every RemoteHostEndPoint instances creates its own
ScheduledExecutorService instance which is why in the jstack dump, we
see several threads that share the prefix RemoteHostEndPoint-{1..10}
(given poolsize is defined as 10, it uses suffixes 1-10).

This fixes the discovered thread leakage with following notes:
- Instead of ScheduledExecutorService instance, a cached pool could be
used instead and was implemented, and with `static` scope to be reused
among other future RemoteHostEndPoint instances.
- It was not clear why we would want to wait when we've Answers returned
from the remote EP, and therefore a scheduled/delayed Runnable was
not required at all for processing answers. ScheduledExecutorService
was therefore not really required, moved to ExecutorService instead.
- Another benefit of using a cached pool is that it will shutdown
threads if they are not used in 60 seconds, and they get re-used for
future runnable submissions.
- Caveat: the executor service is still unbounded, however, the use-case
that this method is used for short jobs to check upload/download
progresses fits the case here.
- Refactored CmdRunner to not use/reference objects from parent class.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2017-11-09 12:32:38 +05:30
..
cache cloudstack: set next version to 4.5.3-SNAPSHOT 2015-09-14 09:59:40 +05:30
datamotion cloudstack: set next version to 4.5.3-SNAPSHOT 2015-09-14 09:59:40 +05:30
image cloudstack: set next version to 4.5.3-SNAPSHOT 2015-09-14 09:59:40 +05:30
integration-test cloudstack: set next version to 4.5.3-SNAPSHOT 2015-09-14 09:59:40 +05:30
resources/META-INF/cloudstack fix compile 2013-11-01 16:16:03 -07:00
snapshot cloudstack: set next version to 4.5.3-SNAPSHOT 2015-09-14 09:59:40 +05:30
src/org/apache/cloudstack/storage CW1542: Fix thread leak in RemoteEndHostEndPoint (#54) 2017-11-09 12:32:38 +05:30
test/org/apache/cloudstack/engine/subsystem/api/storage Reformatted all of the code. 2013-11-21 06:15:26 -08:00
volume cloudstack: set next version to 4.5.3-SNAPSHOT 2015-09-14 09:59:40 +05:30
pom.xml cloudstack: set next version to 4.5.3-SNAPSHOT 2015-09-14 09:59:40 +05:30
storage.ucls Cleanup of Xen and XenServer terms. Cloned xen plugin creating a xenserver plugin, then removed xen plugin 2014-06-07 04:50:23 -04:00