This JIRA adds storage type info into network topology.
More specifically, this JIRA adds a storage type map by extending InnerNodeImpl to describe the available storages under the current node's subtree. This map is updated when a node is added/removed from the subtree.
With this info, when choosing a random node with storage type requirement, the search could then decide to/not to go deeper into a subtree by examining the available storage types first.
One to-do item still, is that, we might still need to separately handle the cases where a Datanodes restarts, or a disk is hot-swapped, will file another JIRA in that case.