Sorry for the long time it took me to answer, I was being distracted by other tasks. So, regarding you you questions...
1. The data received from Cinder already contains instance ids. The only reason Horizon does a separate call to Nova is that he needs to get these instances' names (and possibly some other metadata). Asking the Nova to filter the instance list by volumes seems like a duplication of work to me ('cause we already know these instances), passing just instance ids would suffice.
2. Most likely Cinder doesn't know about instances' names, that's why Horizon does a request to Nova. This architecture is okay IMO, because each OpenStack component should do its _own_ job, with Horizon aggregating the data across many components just for the user's convenience.
Sorry for the long time it took me to answer, I was being distracted by other tasks. So, regarding you you questions...
1. The data received from Cinder already contains instance ids. The only reason Horizon does a separate call to Nova is that he needs to get these instances' names (and possibly some other metadata). Asking the Nova to filter the instance list by volumes seems like a duplication of work to me ('cause we already know these instances), passing just instance ids would suffice.
2. Most likely Cinder doesn't know about instances' names, that's why Horizon does a request to Nova. This architecture is okay IMO, because each OpenStack component should do its _own_ job, with Horizon aggregating the data across many components just for the user's convenience.