diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/ListProjectRolesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/ListProjectRolesCmd.java index e876dbc9b58..dedbb410ea5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/ListProjectRolesCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/ListProjectRolesCmd.java @@ -72,7 +72,7 @@ public class ListProjectRolesCmd extends BaseListCmd { @Override public void execute() { - List projectRoles; + List projectRoles = new ArrayList<>(); if (getProjectId() != null && getProjectRoleId() != null) { projectRoles = Collections.singletonList(projRoleService.findProjectRole(getProjectRoleId(), getProjectId())); } else if (StringUtils.isNotBlank(getRoleName())) { diff --git a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java index 93d6afc1df8..b2fc033268c 100644 --- a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java +++ b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java @@ -644,7 +644,7 @@ public class MetricsServiceImpl extends MutualExclusiveIdsManagerBase implements metricsResponse.setStorageUsedThreshold(poolResponse.getDiskSizeTotal(), poolResponse.getDiskSizeUsed(), poolResponse.getOverProvisionFactor(), storageThreshold); metricsResponse.setStorageUsedDisableThreshold(poolResponse.getDiskSizeTotal(), poolResponse.getDiskSizeUsed(), poolResponse.getOverProvisionFactor(), storageDisableThreshold); metricsResponse.setStorageAllocatedThreshold(poolResponse.getDiskSizeTotal(), poolResponse.getDiskSizeAllocated(), poolResponse.getOverProvisionFactor(), storageThreshold); - metricsResponse.setStorageAllocatedDisableThreshold(poolResponse.getDiskSizeTotal(), poolResponse.getDiskSizeUsed(), poolResponse.getOverProvisionFactor(), storageDisableThreshold); + metricsResponse.setStorageAllocatedDisableThreshold(poolResponse.getDiskSizeTotal(), poolResponse.getDiskSizeAllocated(), poolResponse.getOverProvisionFactor(), storageDisableThreshold); metricsResponses.add(metricsResponse); } return metricsResponses; diff --git a/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/EventUtils.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/EventUtils.java index d47bf6eceeb..338caca1fbe 100644 --- a/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/EventUtils.java +++ b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/EventUtils.java @@ -48,6 +48,10 @@ public class EventUtils { private static EventDistributor eventDistributor; + private static final String MODULE_TOP_LEVEL_PACKAGE = + EventUtils.class.getPackage().getName().substring(0, + EventUtils.class.getPackage().getName().lastIndexOf('.')); + public EventUtils() { } @@ -143,6 +147,13 @@ public class EventUtils { @Override public void interceptComplete(Method method, Object target, Object event) { ActionEvent actionEvent = method.getAnnotation(ActionEvent.class); + boolean sameModule = false; + if (target != null && target.getClass().getPackage() != null) { + sameModule = target.getClass().getPackage().getName().startsWith(MODULE_TOP_LEVEL_PACKAGE); + } + if (!sameModule) { + return; + } if (actionEvent != null) { CallContext ctx = CallContext.current(); if (!actionEvent.create()) { diff --git a/plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java b/plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java index c3a82c42189..4bed0780e20 100644 --- a/plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java +++ b/plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java @@ -26,7 +26,6 @@ import javax.inject.Inject; import com.cloud.configuration.Config; import com.cloud.utils.SwiftUtil; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; @@ -37,18 +36,21 @@ import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector; import org.apache.cloudstack.engine.subsystem.api.storage.StorageCacheManager; import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.storage.command.DownloadCommand; import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao; import org.apache.cloudstack.storage.image.BaseImageStoreDriverImpl; import org.apache.cloudstack.storage.image.store.ImageStoreImpl; import org.apache.cloudstack.storage.to.TemplateObjectTO; +import org.apache.log4j.Logger; import com.cloud.agent.api.storage.DownloadAnswer; import com.cloud.agent.api.to.DataObjectType; import com.cloud.agent.api.to.DataStoreTO; import com.cloud.agent.api.to.SwiftTO; +import com.cloud.configuration.Config; import com.cloud.storage.Storage.ImageFormat; -import com.cloud.template.VirtualMachineTemplate; +import com.cloud.utils.SwiftUtil; import com.cloud.utils.exception.CloudRuntimeException; public class SwiftImageStoreDriverImpl extends BaseImageStoreDriverImpl { @@ -99,8 +101,13 @@ public class SwiftImageStoreDriverImpl extends BaseImageStoreDriverImpl { @Override public void createAsync(DataStore dataStore, DataObject data, AsyncCompletionCallback callback) { Long maxTemplateSizeInBytes = getMaxTemplateSizeInBytes(); - VirtualMachineTemplate tmpl = _templateDao.findById(data.getId()); DataStore cacheStore = cacheManager.getCacheStorage(dataStore.getScope()); + if (cacheStore == null) { + String errMsg = String.format("No cache store found for scope: %s", + dataStore.getScope().getScopeType().name()); + logger.error(errMsg); + throw new CloudRuntimeException(errMsg); + } DownloadCommand dcmd = new DownloadCommand((TemplateObjectTO)(data.getTO()), maxTemplateSizeInBytes); dcmd.setCacheStore(cacheStore.getTO()); dcmd.setProxy(getHttpProxy()); diff --git a/ui/src/views/infra/AddSecondaryStorage.vue b/ui/src/views/infra/AddSecondaryStorage.vue index 7c3ef7fd437..0a02401e8e5 100644 --- a/ui/src/views/infra/AddSecondaryStorage.vue +++ b/ui/src/views/infra/AddSecondaryStorage.vue @@ -295,8 +295,10 @@ export default { const swiftParams = { account: values.account, username: values.username, - key: values.key, - storagepolicy: values.storagepolicy + key: values.key + } + if (values.storagepolicy) { + swiftParams.storagepolicy = values.storagepolicy } Object.keys(swiftParams).forEach((key, index) => { data['details[' + index.toString() + '].key'] = key diff --git a/ui/src/views/project/AccountsTab.vue b/ui/src/views/project/AccountsTab.vue index 07256870541..a3256b3bac2 100644 --- a/ui/src/views/project/AccountsTab.vue +++ b/ui/src/views/project/AccountsTab.vue @@ -157,17 +157,6 @@ export default { this.fetchData() }, inject: ['parentFetchData'], - watch: { - resource: { - deep: true, - handler (newItem) { - if (!newItem || !newItem.id) { - return - } - this.fetchData() - } - } - }, methods: { fetchData () { const params = {} @@ -175,6 +164,7 @@ export default { params.page = this.page params.pageSize = this.pageSize this.updateProjectApi = this.$store.getters.apis.updateProject + if (!this.resource.id) return this.fetchUsers() this.fetchProjectAccounts(params) if (this.isProjectRolesSupported()) { diff --git a/ui/src/views/project/iam/ProjectRoleTab.vue b/ui/src/views/project/iam/ProjectRoleTab.vue index 7cfc9fa2a18..c3a3159565d 100644 --- a/ui/src/views/project/iam/ProjectRoleTab.vue +++ b/ui/src/views/project/iam/ProjectRoleTab.vue @@ -173,17 +173,6 @@ export default { mounted () { this.fetchData() }, - watch: { - resource: { - deep: true, - handler (newItem) { - if (!newItem || !newItem.id) { - return - } - this.fetchData() - } - } - }, methods: { initForm () { this.formRef = ref() @@ -192,6 +181,7 @@ export default { }, fetchData () { this.loading = true + if (!this.resource.id) return getAPI('listProjectRoles', { projectid: this.resource.id }).then(json => { const projectRoles = json.listprojectrolesresponse.projectrole if (!projectRoles || projectRoles.length === 0) {