From 57edd7d2f8d8e73612a6588053790b2bd239cb80 Mon Sep 17 00:00:00 2001 From: abhishek Date: Tue, 17 Aug 2010 16:43:01 -0700 Subject: [PATCH] Refactoring the StorageManager interface into server code --- .../src/com/cloud/storage/StorageManager.java | 294 ------------------ .../commands/UpdateServiceOfferingCmd.java | 9 +- 2 files changed, 6 insertions(+), 297 deletions(-) delete mode 100644 core/src/com/cloud/storage/StorageManager.java diff --git a/core/src/com/cloud/storage/StorageManager.java b/core/src/com/cloud/storage/StorageManager.java deleted file mode 100644 index 4bc6851a181..00000000000 --- a/core/src/com/cloud/storage/StorageManager.java +++ /dev/null @@ -1,294 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.storage; - -import java.net.URI; -import java.net.UnknownHostException; -import java.util.List; -import java.util.Map; - -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.Command; -import com.cloud.api.commands.UpdateStoragePoolCmd; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.exception.InternalErrorException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceInUseException; -import com.cloud.exception.StorageUnavailableException; -import com.cloud.host.Host; -import com.cloud.host.HostVO; -import com.cloud.service.ServiceOfferingVO; -import com.cloud.user.Account; -import com.cloud.uservm.UserVm; -import com.cloud.utils.Pair; -import com.cloud.utils.component.Manager; -import com.cloud.utils.exception.ExecutionException; -import com.cloud.vm.VMInstanceVO; - -public interface StorageManager extends Manager { - /** - * Calls the storage agent and makes the volumes sharable with this host. - * - * @param vm vm that owns the volumes - * @param vols volumes to share - * @param host host to share the volumes to. - * @param cancelPrevious cancel the previous shares? - * @return true if works. - * - * @throws StorageUnavailableException if the storage server is unavailable. - */ - boolean share(VMInstanceVO vm, List vols, HostVO host, boolean cancelPrevious) throws StorageUnavailableException; - - List prepare(VMInstanceVO vm, HostVO host); - - /** - * Calls the storage server to unshare volumes to the host. - * - * @param vm vm that owns the volumes. - * @param vols volumes to remove from share. - * @param host host to unshare the volumes to. - * @return true if it worked; false if not. - */ - boolean unshare(VMInstanceVO vm, List vols, HostVO host); - - /** - * unshares the storage volumes of a certain vm to the host. - * - * @param vm vm to unshare. - * @param host host. - * @return List if succeeded. null if not. - */ - List unshare(VMInstanceVO vm, HostVO host); - - /** - * destroy the storage volumes of a certain vm. - * - * @param vm vm to destroy. - * @param vols volumes to remove from storage pool - */ - void destroy(VMInstanceVO vm, List vols); - - /** - * Creates volumes for a particular VM. - * @param account account to create volumes for. - * @param vm vm to create the volumes for. - * @param template template the root volume is based on. - * @param dc datacenter to put this. - * @param pod pod to put this. - * @param offering service offering of the vm. - * @param diskOffering disk offering of the vm. - * @param avoids storage pools to avoid. - * @param size : size of the volume if defined - * @return List of VolumeVO - */ - List create(Account account, VMInstanceVO vm, VMTemplateVO template, DataCenterVO dc, HostPodVO pod, ServiceOfferingVO offering, DiskOfferingVO diskOffering, long size) throws StorageUnavailableException, ExecutionException; - - /** - * Create StoragePool based on uri - * - * @param zoneId - * @param podId - * @param poolName - * @param uriString - * @return - * @throws ResourceInUseException, IllegalArgumentException - * @throws ResourceAllocationException - */ - StoragePoolVO createPool(long zoneId, Long podId, Long clusterId, String poolName, URI uri, String tags, Map details) throws ResourceInUseException, IllegalArgumentException, UnknownHostException, ResourceAllocationException; - - /** - * Get the storage ip address to connect to. - * @param vm vm to run. - * @param host host to run it on. - * @param storage storage that contains the vm. - * @return ip address if it can be determined. null if not. - */ - String chooseStorageIp(VMInstanceVO vm, Host host, Host storage); - - boolean canVmRestartOnAnotherServer(long vmId); - - /** Returns the absolute path of the specified ISO - * @param templateId - the ID of the template that represents the ISO - * @param datacenterId - * @return absolute ISO path - */ - public String getAbsoluteIsoPath(long templateId, long dataCenterId); - - /** - * Returns the URL of the secondary storage host - * @param zoneId - * @return URL - */ - public String getSecondaryStorageURL(long zoneId); - - /** - * Returns a comma separated list of tags for the specified storage pool - * @param poolId - * @return comma separated list of tags - */ - public String getStoragePoolTags(long poolId); - - /** - * Returns the secondary storage host - * @param zoneId - * @return secondary storage host - */ - public HostVO getSecondaryStorageHost(long zoneId); - - /** - * Create the volumes for a user VM based on service offering in a particular data center - * - * @return true if successful - */ - public long createUserVM(Account account, VMInstanceVO vm, - VMTemplateVO template, DataCenterVO dc, HostPodVO pod, - ServiceOfferingVO offering, DiskOfferingVO diskOffering, - List avoids, long size); - - /** - * This method sends the given command on all the hosts in the primary storage pool given until is succeeds on any one. - * If the command doesn't succeed on any, it return null. All exceptions are swallowed. Any errors are expected be be in - * answer.getDetails(), if it's not null. - * @param poolId The primary storage pool. The cmd uses this for some reason. - * @param cmd Any arbitrary command which needs access to the volumes on the given storage pool. - * @param basicErrMsg The cmd specific error msg to spew out in case of any exception. - * @return The answer for that command, could be success or failure. - */ - Answer sendToHostsOnStoragePool(Long poolId, Command cmd, String basicErrMsg); - Answer sendToHostsOnStoragePool(Long poolId, Command cmd, String basicErrMsg, int retriesPerHost, int pauseBeforeRetry, boolean shouldBeSnapshotCapable, Long vmId ); - - - /** - * Add a pool to a host - * @param hostId - * @param pool - */ - boolean addPoolToHost(long hostId, StoragePoolVO pool); - - /** - * Moves a volume from its current storage pool to a storage pool with enough capacity in the specified zone, pod, or cluster - * @param volume - * @param destPoolDcId - * @param destPoolPodId - * @param destPoolClusterId - * @return VolumeVO - */ - VolumeVO moveVolume(VolumeVO volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId) throws InternalErrorException; - - /** - * Creates a new volume in a pool in the specified zone - * @param accountId - * @param userId - * @param name - * @param dc - * @param diskOffering - * @param size - * @return VolumeVO - */ - VolumeVO createVolume(long accountId, long userId, String name, DataCenterVO dc, DiskOfferingVO diskOffering, long startEventId, long size); - - /** - * Marks the specified volume as destroyed in the management server database. The expunge thread will delete the volume from its storage pool. - * @param volume - */ - void destroyVolume(VolumeVO volume); - - /** Create capacity entries in the op capacity table - * @param storagePool - */ - public void createCapacityEntry(StoragePoolVO storagePool); - - /** - * Checks that the volume is stored on a shared storage pool - * @param volume - * @return true if the volume is on a shared storage pool, false otherwise - */ - boolean volumeOnSharedStoragePool(VolumeVO volume); - - Answer[] sendToPool(StoragePoolVO pool, Command[] cmds, boolean stopOnError); - - Answer sendToPool(StoragePoolVO pool, Command cmd); - - /** - * Checks that one of the following is true: - * 1. The volume is not attached to any VM - * 2. The volume is attached to a VM that is running on a host with the KVM hypervisor, and the VM is stopped - * 3. The volume is attached to a VM that is running on a host with the XenServer hypervisor (the VM can be stopped or running) - * @return true if one of the above conditions is true - */ - boolean volumeInactive(VolumeVO volume); - - String getVmNameOnVolume(VolumeVO volume); - - List> isStoredOn(VMInstanceVO vm); - - /** - * Checks if a host has running VMs that are using its local storage pool. - * @return true if local storage is active on the host - */ - boolean isLocalStorageActiveOnHost(HostVO host); - - /** - * Cleans up storage pools by removing unused templates. - * @param recurring - true if this cleanup is part of a recurring garbage collection thread - */ - void cleanupStorage(boolean recurring); - - /** - * Delete the storage pool - * @param id -- id associated - */ - boolean deletePool(long id); - - /** - * Updates a storage pool. - * @param poolId ID of the storage pool to be updated - * @param tags Tags that will be added to the storage pool - */ -// StoragePoolVO updateStoragePool(long poolId, String tags) throws IllegalArgumentException; - - /** - * Find all of the storage pools needed for this vm. - * - * @param vmId id of the vm. - * @return List of StoragePoolVO - */ - List getStoragePoolsForVm(long vmId); - - String getPrimaryStorageNameLabel(VolumeVO volume); - - /** - * Creates a volume from the specified snapshot. A new volume is returned which is not attached to any VM Instance - */ - VolumeVO createVolumeFromSnapshot(long userId, long accountId, long snapshotId, String volumeName, long startEventId); - - /** - * Enable maintenance for primary storage - * @return - */ - public boolean preparePrimaryStorageForMaintenance(long primaryStorageId, long userId); - - /** - * Complete maintenance for primary storage - * @return - */ - public boolean cancelPrimaryStorageForMaintenance(long primaryStorageId, long userId); - - public StoragePoolVO updateStoragePool(UpdateStoragePoolCmd cmd) throws IllegalArgumentException; -} diff --git a/server/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java b/server/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java index f9807c136fe..875c66f0d7f 100644 --- a/server/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java +++ b/server/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java @@ -25,17 +25,20 @@ import java.util.Map; import org.apache.log4j.Logger; import com.cloud.api.BaseCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; +import com.cloud.api.BaseCmd.Manager; import com.cloud.offering.ServiceOffering.GuestIpType; import com.cloud.service.ServiceOfferingVO; import com.cloud.user.User; import com.cloud.utils.Pair; - -public class UpdateServiceOfferingCmd extends BaseCmd{ + +@Implementation(method="updateServiceOffering", manager=Manager.ConfigManager) +public class UpdateServiceOfferingCmd extends BaseCmd +{ public static final Logger s_logger = Logger.getLogger(UpdateServiceOfferingCmd.class.getName()); private static final String s_name = "updateserviceofferingresponse"; - private static final List> s_properties = new ArrayList>(); static { s_properties.add(new Pair(BaseCmd.Properties.DISPLAY_TEXT, Boolean.FALSE));