[ https://issues.apache.org/jira/browse/CLOUDSTACK-9827?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15924748#comment-15924748 ]
ASF GitHub Bot commented on CLOUDSTACK-9827: -------------------------------------------- Github user nvazquez commented on a diff in the pull request: https://github.com/apache/cloudstack/pull/1994#discussion_r105990460 --- Diff: engine/schema/src/com/cloud/storage/dao/StoragePoolTagsDaoImpl.java --- @@ -77,4 +90,68 @@ public void deleteTags(long poolId) { txn.commit(); } + @Override + public List<StoragePoolTagVO> searchByIds(Long... stIds) { + final int detailsBatchSize = getDetailsBatchSize(); + + // query details by batches + List<StoragePoolTagVO> uvList = new ArrayList<StoragePoolTagVO>(); + int curr_index = 0; + + if (stIds.length > detailsBatchSize) { + while ((curr_index + detailsBatchSize) <= stIds.length) { + searchForStoragePoolIdsInternal(curr_index, detailsBatchSize, stIds, uvList); + curr_index += detailsBatchSize; + } + } + + if (curr_index < stIds.length) { + int batch_size = (stIds.length - curr_index); + searchForStoragePoolIdsInternal(curr_index, batch_size, stIds, uvList); + } + + return uvList; + } + + /** + * Search storage pools + * @param currIndex current index + * @param batchSize batch size + * @param stIds storage tags array + * @param uvList + */ + protected void searchForStoragePoolIdsInternal(int currIndex, int batchSize, Long[] stIds, List<StoragePoolTagVO> uvList) { + Long[] ids = new Long[batchSize]; + for (int k = 0, j = currIndex; j < currIndex + batchSize; j++, k++) { + ids[k] = stIds[j]; + } + SearchCriteria<StoragePoolTagVO> sc = StoragePoolIdsSearch.create(); + sc.setParameters("idIN", (Object[])ids); + List<StoragePoolTagVO> vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + + /** + * Retrieve {@code detail.batch.query.size} configuration value. If not available, return the default value (2000) + * @return detail.batch.query.size configuration value + */ + protected int getDetailsBatchSize() { + String batchCfg = _configDao.getValue("detail.batch.query.size"); + return batchCfg != null ? Integer.parseInt(batchCfg) : 2000; --- End diff -- Done, thanks! > Storage tags stored in multiple places > -------------------------------------- > > Key: CLOUDSTACK-9827 > URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9827 > Project: CloudStack > Issue Type: Bug > Security Level: Public(Anyone can view this level - this is the > default.) > Components: Management Server > Affects Versions: 4.10.0.0 > Environment: N/A > Reporter: Mike Tutkowski > Assignee: Nicolas Vazquez > Priority: Blocker > Fix For: 4.10.0.0 > > > I marked this as a Blocker because it concerns me that we are not handling > storage tags correctly in 4.10 and, as such, VM storage might get placed in > locations that users don't want. > From e-mails I sent to dev@ (most recent to oldest): > If I add a new primary storage and give it a storage tag, the tag ends up in > storage_pool_details. > If I edit an existing storage pool’s storage tags, it places them in > storage_pool_tags. > ********** > I believe I have found another bug (one that we should either fix or examine > in detail before releasing 4.10). > It looks like we have a new table: cloud.storage_pool_tags. > The addition of this table seems to have broken the listStorageTags API > command. When this command runs, it doesn’t pick up any storage tags for me > (and I know I have one storage tag). > This data used to be stored in the cloud.storage_pool_details table. It’s > good to put it in its own table, but will our upgrade process move the > existing tags from storage_pool_details to storage_pool_tags? -- This message was sent by Atlassian JIRA (v6.3.15#6346)