Return-Path: X-Original-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8C258DC0A for ; Mon, 2 Jul 2012 15:35:06 +0000 (UTC) Received: (qmail 68038 invoked by uid 500); 2 Jul 2012 15:35:05 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 67952 invoked by uid 500); 2 Jul 2012 15:35:05 -0000 Mailing-List: contact cloudstack-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cloudstack-dev@incubator.apache.org Delivered-To: mailing list cloudstack-commits@incubator.apache.org Received: (qmail 67926 invoked by uid 99); 2 Jul 2012 15:35:05 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jul 2012 15:35:05 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id D92869508; Mon, 2 Jul 2012 15:35:04 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: muralireddy@apache.org To: cloudstack-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [3/4] moving out NetApp code to plugins/file-systems/netapp Message-Id: <20120702153504.D92869508@tyr.zones.apache.org> Date: Mon, 2 Jul 2012 15:35:04 +0000 (UTC) http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/api/commands/netapp/DissociateLunCmd.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/commands/netapp/DissociateLunCmd.java b/server/src/com/cloud/api/commands/netapp/DissociateLunCmd.java deleted file mode 100644 index 77425cb..0000000 --- a/server/src/com/cloud/api/commands/netapp/DissociateLunCmd.java +++ /dev/null @@ -1,79 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands.netapp; - -import java.rmi.ServerException; - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.netapp.NetappManager; -import com.cloud.server.ManagementService; -import com.cloud.server.api.response.netapp.DissociateLunCmdResponse; -import com.cloud.utils.component.ComponentLocator; - -@Implementation(description="Dissociate a LUN", responseObject = DissociateLunCmdResponse.class) -public class DissociateLunCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(DissociateLunCmd.class.getName()); - private static final String s_name = "dissociatelunresponse"; - - @Parameter(name=ApiConstants.PATH, type=CommandType.STRING, required = true, description="LUN path.") - private String path; - - @Parameter(name=ApiConstants.IQN, type=CommandType.STRING, required = true, description="Guest IQN.") - private String guestIQN; - - @Override - public void execute() throws ResourceUnavailableException, - InsufficientCapacityException, ServerApiException, - ConcurrentOperationException, ResourceAllocationException { - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - NetappManager netappMgr = locator.getManager(NetappManager.class); - try { - netappMgr.disassociateLun(guestIQN, path); - DissociateLunCmdResponse response = new DissociateLunCmdResponse(); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); - } catch (ServerException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); - } - } - - @Override - public String getCommandName() { - // TODO Auto-generated method stub - return s_name; - } - - @Override - public long getEntityOwnerId() { - // TODO Auto-generated method stub - return 0; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/api/commands/netapp/ListLunsCmd.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/server/src/com/cloud/api/commands/netapp/ListLunsCmd.java deleted file mode 100644 index 1101648..0000000 --- a/server/src/com/cloud/api/commands/netapp/ListLunsCmd.java +++ /dev/null @@ -1,88 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands.netapp; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.netapp.LunVO; -import com.cloud.netapp.NetappManager; -import com.cloud.server.ManagementService; -import com.cloud.server.api.response.netapp.ListLunsCmdResponse; -import com.cloud.utils.component.ComponentLocator; - -@Implementation(description="List LUN", responseObject = ListLunsCmdResponse.class) -public class ListLunsCmd extends BaseCmd -{ - public static final Logger s_logger = Logger.getLogger(ListLunsCmd.class.getName()); - private static final String s_name = "listlunresponse"; - - @Parameter(name=ApiConstants.POOL_NAME, type=CommandType.STRING, required = true, description="pool name.") - private String poolName; - - @Override - public void execute() throws ResourceUnavailableException, - InsufficientCapacityException, ServerApiException, - ConcurrentOperationException, ResourceAllocationException { - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - NetappManager netappMgr = locator.getManager(NetappManager.class); - try { - List lunList = netappMgr.listLunsOnFiler(poolName); - ListResponse listResponse = new ListResponse(); - List responses = new ArrayList(); - for (LunVO lun : lunList) { - ListLunsCmdResponse response = new ListLunsCmdResponse(); - response.setId(lun.getId()); - response.setIqn(lun.getTargetIqn()); - response.setName(lun.getLunName()); - response.setVolumeId(lun.getVolumeId()); - response.setObjectName("lun"); - responses.add(response); - } - listResponse.setResponses(responses); - listResponse.setResponseName(getCommandName()); - this.setResponseObject(listResponse); - } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); - } - } - - @Override - public String getCommandName() { - // TODO Auto-generated method stub - return s_name; - } - - @Override - public long getEntityOwnerId() { - // TODO Auto-generated method stub - return 0; - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/server/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java deleted file mode 100644 index e646739..0000000 --- a/server/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java +++ /dev/null @@ -1,84 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands.netapp; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.netapp.NetappManager; -import com.cloud.netapp.PoolVO; -import com.cloud.server.ManagementService; -import com.cloud.server.api.response.netapp.ListVolumePoolsCmdResponse; -import com.cloud.utils.component.ComponentLocator; - -@Implementation(description="List Pool", responseObject = ListVolumePoolsCmdResponse.class) -public class ListVolumePoolsCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(ListVolumePoolsCmd.class.getName()); - private static final String s_name = "listpoolresponse"; - - - @Override - public void execute() throws ResourceUnavailableException, - InsufficientCapacityException, ServerApiException, - ConcurrentOperationException, ResourceAllocationException { - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - NetappManager netappMgr = locator.getManager(NetappManager.class); - try { - List poolList = netappMgr.listPools(); - ListResponse listResponse = new ListResponse(); - List responses = new ArrayList(); - for (PoolVO pool : poolList) { - ListVolumePoolsCmdResponse response = new ListVolumePoolsCmdResponse(); - response.setId(pool.getId()); - response.setName(pool.getName()); - response.setAlgorithm(pool.getAlgorithm()); - response.setObjectName("pool"); - responses.add(response); - } - listResponse.setResponses(responses); - listResponse.setResponseName(getCommandName()); - this.setResponseObject(listResponse); - } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); - } - - } - - @Override - public String getCommandName() { - // TODO Auto-generated method stub - return s_name; - } - - @Override - public long getEntityOwnerId() { - // TODO Auto-generated method stub - return 0; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/server/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java deleted file mode 100644 index 389053a..0000000 --- a/server/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java +++ /dev/null @@ -1,94 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands.netapp; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.netapp.NetappManager; -import com.cloud.netapp.NetappVolumeVO; -import com.cloud.server.ManagementService; -import com.cloud.server.api.response.netapp.ListVolumesOnFilerCmdResponse; -import com.cloud.utils.component.ComponentLocator; - -@Implementation(description="List Volumes", responseObject = ListVolumesOnFilerCmdResponse.class) -public class ListVolumesOnFilerCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(ListVolumesOnFilerCmd.class.getName()); - private static final String s_name = "listvolumesresponse"; - - @Parameter(name=ApiConstants.POOL_NAME, type=CommandType.STRING, required = true, description="pool name.") - private String poolName; - - @Override - public void execute() throws ResourceUnavailableException, - InsufficientCapacityException, ServerApiException, - ConcurrentOperationException, ResourceAllocationException { - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - NetappManager netappMgr = locator.getManager(NetappManager.class); - - try { - List volumes = netappMgr.listVolumesOnFiler(poolName); - ListResponse listResponse = new ListResponse(); - List responses = new ArrayList(); - for (NetappVolumeVO volume : volumes) { - ListVolumesOnFilerCmdResponse response = new ListVolumesOnFilerCmdResponse(); - response.setId(volume.getId()); - response.setIpAddress(volume.getIpAddress()); - response.setPoolName(volume.getPoolName()); - response.setAggrName(volume.getAggregateName()); - response.setVolumeName(volume.getVolumeName()); - response.setSnapshotPolicy(volume.getSnapshotPolicy()); - response.setSnapshotReservation(volume.getSnapshotReservation()); - response.setVolumeSize(volume.getVolumeSize()); - response.setObjectName("volume"); - responses.add(response); - } - listResponse.setResponses(responses); - listResponse.setResponseName(getCommandName()); - this.setResponseObject(listResponse); - } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); - } - - } - - @Override - public String getCommandName() { - // TODO Auto-generated method stub - return s_name; - } - - @Override - public long getEntityOwnerId() { - // TODO Auto-generated method stub - return 0; - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java b/server/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java deleted file mode 100644 index 0bca290..0000000 --- a/server/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java +++ /dev/null @@ -1,73 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands.netapp; - - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.netapp.NetappManager; -import com.cloud.server.ManagementService; -import com.cloud.server.api.response.netapp.ModifyVolumePoolCmdResponse; -import com.cloud.utils.component.ComponentLocator; - -@Implementation(description="Modify pool", responseObject = ModifyVolumePoolCmdResponse.class) -public class ModifyVolumePoolCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(ModifyVolumePoolCmd.class.getName()); - private static final String s_name = "modifypoolresponse"; - - @Parameter(name=ApiConstants.POOL_NAME, type=CommandType.STRING, required = true, description="pool name.") - private String poolName; - - @Parameter(name=ApiConstants.ALGORITHM, type=CommandType.STRING, required = true, description="algorithm.") - private String algorithm; - - @Override - public void execute() throws ResourceUnavailableException, - InsufficientCapacityException, ServerApiException, - ConcurrentOperationException, ResourceAllocationException { - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - NetappManager netappMgr = locator.getManager(NetappManager.class); - - netappMgr.modifyPool(poolName, algorithm); - - ModifyVolumePoolCmdResponse response = new ModifyVolumePoolCmdResponse(); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } - - @Override - public String getCommandName() { - // TODO Auto-generated method stub - return s_name; - } - - @Override - public long getEntityOwnerId() { - // TODO Auto-generated method stub - return 0; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/configuration/PremiumComponentLibrary.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/configuration/PremiumComponentLibrary.java b/server/src/com/cloud/configuration/PremiumComponentLibrary.java index ac82603..b25f462 100755 --- a/server/src/com/cloud/configuration/PremiumComponentLibrary.java +++ b/server/src/com/cloud/configuration/PremiumComponentLibrary.java @@ -27,10 +27,6 @@ import com.cloud.baremetal.PxeServerManager.PxeServerType; import com.cloud.baremetal.PxeServerManagerImpl; import com.cloud.baremetal.PxeServerService; import com.cloud.ha.HighAvailabilityManagerExtImpl; -import com.cloud.netapp.NetappManagerImpl; -import com.cloud.netapp.dao.LunDaoImpl; -import com.cloud.netapp.dao.PoolDaoImpl; -import com.cloud.netapp.dao.VolumeDaoImpl; import com.cloud.network.ExternalNetworkDeviceManagerImpl; import com.cloud.network.NetworkUsageManagerImpl; import com.cloud.secstorage.CommandExecLogDaoImpl; @@ -51,9 +47,6 @@ public class PremiumComponentLibrary extends DefaultComponentLibrary { addDao("UsageDao", UsageDaoImpl.class); addDao("UsageIpAddressDao", UsageIPAddressDaoImpl.class); addDao("CommandExecLogDao", CommandExecLogDaoImpl.class); - addDao("NetappPool", PoolDaoImpl.class); - addDao("NetappVolume", VolumeDaoImpl.class); - addDao("NetappLun", LunDaoImpl.class); } @Override @@ -68,7 +61,6 @@ public class PremiumComponentLibrary extends DefaultComponentLibrary { addManager("ExternalDhcpManager", ExternalDhcpManagerImpl.class); addManager("PxeServerManager", PxeServerManagerImpl.class); addManager("NetworkUsageManager", NetworkUsageManagerImpl.class); - addManager("NetappManager", NetappManagerImpl.class); } @Override http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/LunVO.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/LunVO.java b/server/src/com/cloud/netapp/LunVO.java deleted file mode 100644 index af2e575..0000000 --- a/server/src/com/cloud/netapp/LunVO.java +++ /dev/null @@ -1,121 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name="netapp_lun") -public class LunVO { - - @Id - @GeneratedValue(strategy=GenerationType.IDENTITY) - @Column(name="id") - private Long id; - - @Column(name="lun_name") - private String lunName; - - @Column(name="target_iqn") - private String targetIqn; - - @Column(name="path") - private String path; - - @Column(name="volume_id") - private Long volumeId; - - public Long getSize() { - return size; - } - - public void setSize(Long size) { - this.size = size; - } - - - @Column(name="size") - private Long size; - - public LunVO(){ - - } - - public LunVO(String path, Long volumeId, Long size, String lunName, String targetIqn) { - this.path = path; - this.volumeId = volumeId; - this.size = size; - this.lunName = lunName; - this.targetIqn = targetIqn; - } - - public String getLunName() { - return lunName; - } - - public void setLunName(String lunName) { - this.lunName = lunName; - } - - public LunVO(Long id, String path, Long volumeId, Long size, String lunName, String targetIqn) { - this.id = id; - this.path = path; - this.volumeId = volumeId; - this.size = size; - this.lunName = lunName; - this.targetIqn = targetIqn; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public Long getVolumeId() { - return volumeId; - } - - public void setVolumeId(Long volumeId) { - this.volumeId = volumeId; - } - - public void setTargetIqn(String iqn){ - this.targetIqn = iqn; - } - - public String getTargetIqn(){ - return targetIqn; - } - - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/NetappAllocator.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/NetappAllocator.java b/server/src/com/cloud/netapp/NetappAllocator.java deleted file mode 100644 index 0cc3629..0000000 --- a/server/src/com/cloud/netapp/NetappAllocator.java +++ /dev/null @@ -1,25 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp; - - -public interface NetappAllocator{ - - public NetappVolumeVO chooseVolumeFromPool(String poolName, long lunSizeGb) ; - - public NetappVolumeVO chooseLeastFullVolumeFromPool(String poolName,long lunSizeGb); -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/NetappDefaultAllocatorImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/NetappDefaultAllocatorImpl.java b/server/src/com/cloud/netapp/NetappDefaultAllocatorImpl.java deleted file mode 100644 index 3692983..0000000 --- a/server/src/com/cloud/netapp/NetappDefaultAllocatorImpl.java +++ /dev/null @@ -1,142 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp; - -import java.io.IOException; -import java.rmi.ServerException; -import java.util.HashMap; -import java.util.List; - -import org.apache.log4j.Logger; - -import netapp.manage.NaException; - -public class NetappDefaultAllocatorImpl implements NetappAllocator -{ - private static HashMap _poolNameToLastVolumeIdAllocated = new HashMap(); - private NetappManager _netappMgr; - public static final Logger s_logger = Logger.getLogger(NetappDefaultAllocatorImpl.class.getName()); - - public NetappDefaultAllocatorImpl(NetappManager netappMgr) { - _netappMgr = netappMgr; - } - - public synchronized NetappVolumeVO chooseLeastFullVolumeFromPool(String poolName, long lunSizeGb) - { - List volumesOnPoolAscending = _netappMgr.listVolumesAscending(poolName); - - if(volumesOnPoolAscending==null) - { - //no pools exist in db - return null; - } - - long maxAvailable = 0; - NetappVolumeVO selectedVol = null; - for(NetappVolumeVO vol : volumesOnPoolAscending) - { - try { - long availableBytes = _netappMgr.returnAvailableVolumeSize(vol.getVolumeName(), vol.getUsername(), vol.getPassword(), vol.getIpAddress()); - - if(lunSizeGb <= bytesToGb(availableBytes) && availableBytes>maxAvailable) - { - maxAvailable = availableBytes; //new max - selectedVol = vol; //new least loaded vol - } - } catch (ServerException se) { - s_logger.debug("Ignoring failure to obtain volume size for volume " + vol.getVolumeName()); - continue; - } - } - - return selectedVol; - } - - /** - * This method does the actual round robin allocation - * @param poolName - * @param lunSizeGb - * @return -- the selected volume to create the lun on - * @throws IOException - * @throws NaException - */ - public synchronized NetappVolumeVO chooseVolumeFromPool(String poolName, long lunSizeGb) - { - int pos = 0; //0 by default - List volumesOnPoolAscending = _netappMgr.listVolumesAscending(poolName); - - if(volumesOnPoolAscending==null) - { - //no pools exist in db - return null; - } - - //get the index of the record from the map - if(_poolNameToLastVolumeIdAllocated.get(poolName)==null) - { - pos=0; - } - else - { - pos=_poolNameToLastVolumeIdAllocated.get(poolName); - } - - //update for RR effect - _poolNameToLastVolumeIdAllocated.put(poolName, (pos+1)%volumesOnPoolAscending.size()); - - //now iterate over the records - Object[] volumesOnPoolAscendingArray = volumesOnPoolAscending.toArray(); - int counter=0; - while (counter < volumesOnPoolAscendingArray.length) - { - NetappVolumeVO vol = (NetappVolumeVO)volumesOnPoolAscendingArray[pos]; - - //check if the volume fits the bill - long availableBytes; - try { - availableBytes = _netappMgr.returnAvailableVolumeSize(vol.getVolumeName(), vol.getUsername(), vol.getPassword(), vol.getIpAddress()); - - if(lunSizeGb <= bytesToGb(availableBytes)) - { - //found one - return vol; - } - pos = (pos + 1) % volumesOnPoolAscendingArray.length; - counter++; - } catch (ServerException e) { - s_logger.debug("Ignoring failure to obtain volume size for volume " + vol.getVolumeName()); - continue; - } - } - - return null; - } - - - /** - * This method does the byte to gb conversion - * @param bytes - * @return -- converted gb - */ - private long bytesToGb(long bytes){ - long returnVal = (bytes/(1024*1024*1024)); - return returnVal; - } - -} - - \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/NetappManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/NetappManager.java b/server/src/com/cloud/netapp/NetappManager.java deleted file mode 100644 index 7216c50..0000000 --- a/server/src/com/cloud/netapp/NetappManager.java +++ /dev/null @@ -1,66 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp; - -import java.net.UnknownHostException; -import java.rmi.ServerException; -import java.util.List; - -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceInUseException; -import com.cloud.utils.component.Manager; - -public interface NetappManager extends Manager { - enum AlgorithmType { - RoundRobin, - LeastFull - } - void destroyVolumeOnFiler(String ipAddress, String aggrName, String volName) throws ServerException, InvalidParameterValueException, ResourceInUseException; - - void createVolumeOnFiler(String ipAddress, String aggName, String poolName, - String volName, String volSize, String snapshotPolicy, - Integer snapshotReservation, String username, String password) - throws UnknownHostException, ServerException, InvalidParameterValueException; - - public String[] associateLun(String guestIqn, String path) throws ServerException, InvalidParameterValueException; - - - void disassociateLun(String iGroup, String path) throws ServerException, InvalidParameterValueException; - - List listLunsOnFiler(String poolName); - - void destroyLunOnFiler(String path) throws ServerException, InvalidParameterValueException; - - List listVolumesOnFiler(String poolName); - - List listVolumesAscending(String poolName); - - long returnAvailableVolumeSize(String volName, String userName, - String password, String serverIp) throws ServerException; - - void createPool(String poolName, String algorithm) throws InvalidParameterValueException; - - void modifyPool(String poolName, String algorithm) throws InvalidParameterValueException; - - void deletePool(String poolName) throws InvalidParameterValueException, ResourceInUseException; - - List listPools(); - - public String[] createLunOnFiler(String poolName, Long lunSize) throws InvalidParameterValueException, ServerException, ResourceAllocationException; - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/NetappManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/NetappManagerImpl.java b/server/src/com/cloud/netapp/NetappManagerImpl.java deleted file mode 100644 index 7dcb9d3..0000000 --- a/server/src/com/cloud/netapp/NetappManagerImpl.java +++ /dev/null @@ -1,1040 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp; - -import java.io.IOException; -import java.net.UnknownHostException; -import java.rmi.ServerException; -import java.util.ArrayList; -import java.util.ConcurrentModificationException; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import netapp.manage.NaAPIFailedException; -import netapp.manage.NaAuthenticationException; -import netapp.manage.NaElement; -import netapp.manage.NaException; -import netapp.manage.NaProtocolException; -import netapp.manage.NaServer; - -import org.apache.log4j.Logger; - -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceInUseException; -import com.cloud.netapp.dao.LunDao; -import com.cloud.netapp.dao.PoolDao; -import com.cloud.netapp.dao.VolumeDao; -import com.cloud.utils.component.Inject; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.Transaction; -import com.cloud.utils.exception.CloudRuntimeException; - -@Local(value = { NetappManager.class }) -public class NetappManagerImpl implements NetappManager -{ - public enum Algorithm { roundrobin,leastfull } - - protected String _name; - - public static final Logger s_logger = Logger.getLogger(NetappManagerImpl.class.getName()); - @Inject public VolumeDao _volumeDao; - @Inject public PoolDao _poolDao; - @Inject public LunDao _lunDao; - private NetappAllocator _netappAllocator = null; - - /** - * Default constructor - */ - public NetappManagerImpl(){ - } - - @Override - public void createPool(String poolName, String algorithm) throws InvalidParameterValueException - { - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> createPool "); - - PoolVO pool = null; - validAlgorithm(algorithm); - try { - pool = new PoolVO(poolName, algorithm); - _poolDao.persist(pool); - - if(s_logger.isDebugEnabled()) - s_logger.debug("Response --> createPool:success"); - - } catch (CloudRuntimeException cre){ - pool = _poolDao.findPool(poolName); - if (pool != null) { - throw new InvalidParameterValueException("Duplicate Pool Name"); - } else { - throw cre; - } - } - } - - /** - * This method validates the algorithm used for allocation of the volume - * @param algorithm -- algorithm type - * @throws InvalidParameterValueException - */ - private void validAlgorithm(String algorithm) throws InvalidParameterValueException { - //TODO: use enum - if(!algorithm.equalsIgnoreCase("roundrobin") && !algorithm.equalsIgnoreCase("leastfull")){ - throw new InvalidParameterValueException("Unknown algorithm " + algorithm); - } - } - - /** - * Utility method to get the netapp server object - * @param serverIp -- ip address of netapp box - * @param userName -- username - * @param password -- password - * @return - * @throws UnknownHostException - */ - private NaServer getServer(String serverIp, String userName, String password) throws UnknownHostException { - //Initialize connection to server, and - //request version 1.3 of the API set - NaServer s = new NaServer(serverIp, 1, 3); - s.setStyle(NaServer.STYLE_LOGIN_PASSWORD); - s.setAdminUser(userName, password); - - return s; - } - - @Override - public void modifyPool(String poolName, String algorithm) throws InvalidParameterValueException - { - validAlgorithm(algorithm); - PoolVO pool = _poolDao.findPool(poolName); - - if(pool == null){ - throw new InvalidParameterValueException("Cannot find pool " + poolName); - } - - validAlgorithm(algorithm); - - pool.setAlgorithm(algorithm); - pool.setName(poolName); - - _poolDao.update(pool.getId(), pool); - } - - @Override - public void deletePool(String poolName) throws InvalidParameterValueException, ResourceInUseException - { - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> deletePool "); - - PoolVO pool = _poolDao.findPool(poolName); - if(pool == null){ - throw new InvalidParameterValueException("Cannot find pool " + poolName); - } - //check if pool is empty - int volCount = _volumeDao.listVolumes(poolName).size(); - - if(volCount==0){ - _poolDao.remove(pool.getId()); - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> deletePool: Success "); - - } else { - throw new ResourceInUseException("Cannot delete non-empty pool"); - } - } - - @Override - public List listPools(){ - return _poolDao.listAll(); - } - - /** - * This method destroys the volume on netapp filer - * @param ipAddress -- ip address of filer - * @param aggrName -- name of containing aggregate - * @param volName -- name of volume to destroy - * @throws ResourceInUseException - * @throws NaException - * @throws IOException - * @throws NaProtocolException - * @throws NaAPIFailedException - * @throws NaAuthenticationException - */ - @Override - @DB - public void destroyVolumeOnFiler(String ipAddress, String aggrName, String volName) throws ServerException, InvalidParameterValueException, ResourceInUseException{ - NaElement xi0; - NaElement xi1; - NetappVolumeVO volume = null; - - volume = _volumeDao.findVolume(ipAddress, aggrName, volName); - - if(volume==null) - { - s_logger.warn("The volume does not exist in our system"); - throw new InvalidParameterValueException("The given tuple:"+ipAddress+","+aggrName+","+volName+" doesn't exist in our system"); - } - - List lunsOnVol = _lunDao.listLunsByVolId(volume.getId()); - - if(lunsOnVol!=null && lunsOnVol.size()>0) - { - s_logger.warn("There are luns on the volume"); - throw new ResourceInUseException("There are luns on the volume"); - } - - final Transaction txn = Transaction.currentTxn(); - txn.start(); - PoolVO pool = _poolDao.findById(volume.getPoolId()); - if (pool == null) { - throw new InvalidParameterValueException("Failed to find pool for given volume"); - //FIXME: choose a better exception. this is a db integrity exception - } - pool = _poolDao.acquireInLockTable(pool.getId()); - if (pool == null) { - throw new ConcurrentModificationException("Failed to acquire lock on pool " + volume.getPoolId()); - } - NaServer s = null; - try - { - s = getServer(volume.getIpAddress(), volume.getUsername(), volume.getPassword()); - //bring the volume down - xi0 = new NaElement("volume-offline"); - xi0.addNewChild("name",volName); - s.invokeElem(xi0); - - //now destroy it - xi1 = new NaElement("volume-destroy"); - xi1.addNewChild("name",volName); - s.invokeElem(xi1); - - //now delete from our records - _volumeDao.remove(volume.getId()); - txn.commit(); - - } catch (UnknownHostException uhe) { - s_logger.warn("Unable to delete volume on filer " , uhe); - throw new ServerException("Unable to delete volume on filer", uhe); - }catch (NaAPIFailedException naf) { - s_logger.warn("Unable to delete volume on filer " , naf); - if( naf.getErrno() == 13040 ){ - s_logger.info("Deleting the volume: " + volName); - _volumeDao.remove(volume.getId()); - txn.commit(); - } - - throw new ServerException("Unable to delete volume on filer", naf); - } - catch (NaException nae) { - txn.rollback(); - s_logger.warn("Unable to delete volume on filer " , nae); - throw new ServerException("Unable to delete volume on filer", nae); - } catch (IOException ioe) { - txn.rollback(); - s_logger.warn("Unable to delete volume on filer " , ioe); - throw new ServerException("Unable to delete volume on filer", ioe); - } - finally - { - if (pool != null) { - _poolDao.releaseFromLockTable(pool.getId()); - } - if (s != null) - s.close(); - } - - - - } - - /** - * This method creates a volume on netapp filer - * @param ipAddress -- ip address of the filer - * @param aggName -- name of aggregate - * @param poolName -- name of pool - * @param volName -- name of volume - * @param volSize -- size of volume to be created - * @param snapshotPolicy -- associated snapshot policy for volume - * @param snapshotReservation -- associated reservation for snapshots - * @param username -- username - * @param password -- password - * @throws UnknownHostException - * @throws InvalidParameterValueException - */ - @Override - @DB - public void createVolumeOnFiler(String ipAddress, String aggName, String poolName, String volName, String volSize, String snapshotPolicy, Integer snapshotReservation, String username, String password) throws UnknownHostException, ServerException, InvalidParameterValueException - { - - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> createVolume "+"serverIp:"+ipAddress); - - boolean snapPolicy = false; - boolean snapshotRes = false; - boolean volumeCreated = false; - - NaServer s = getServer(ipAddress, username, password); - - NaElement xi = new NaElement("volume-create"); - xi.addNewChild("volume", volName); - xi.addNewChild("containing-aggr-name",aggName); - xi.addNewChild("size",volSize); - - NaElement xi1 = new NaElement("snapshot-set-reserve"); - if(snapshotReservation!=null) - { - snapshotRes = true; - xi1.addNewChild("percentage",snapshotReservation.toString()); - xi1.addNewChild("volume",volName); - } - - NaElement xi2 = new NaElement("snapshot-set-schedule"); - - if(snapshotPolicy!=null) - { - snapPolicy = true; - - String weeks = null; - String days = null; - String hours = null; - String whichHours = null; - String minutes = null; - String whichMinutes = null; - - StringTokenizer s1 = new StringTokenizer(snapshotPolicy," "); - - //count=4: weeks days hours@csi mins@csi - //count=3: weeks days hours@csi - //count=2: weeks days - //count=1: weeks - - if(s1.hasMoreTokens()) - { - weeks = s1.nextToken(); - } - if(weeks!=null && s1.hasMoreTokens()) - { - days = s1.nextToken(); - } - if(days!=null && s1.hasMoreTokens()) - { - String[] hoursArr = s1.nextToken().split("@"); - hours = hoursArr[0]; - whichHours = hoursArr[1]; - } - if(hours!=null && s1.hasMoreTokens()) - { - String[] minsArr = s1.nextToken().split("@"); - minutes = minsArr[0]; - whichMinutes = minsArr[1]; - } - - if(weeks!=null) - xi2.addNewChild("weeks",weeks); - if(days!=null) - xi2.addNewChild("days",days); - if(hours!=null) - xi2.addNewChild("hours",hours); - if(minutes!=null) - xi2.addNewChild("minutes",minutes); - xi2.addNewChild("volume",volName); - - if(whichHours!=null) - xi2.addNewChild("which-hours",whichHours); - if(whichMinutes!=null) - xi2.addNewChild("which-minutes",whichMinutes); - } - Long volumeId = null; - - final Transaction txn = Transaction.currentTxn(); - txn.start(); - NetappVolumeVO volume = null; - volume = _volumeDao.findVolume(ipAddress, aggName, volName); - - if(volume != null) { - throw new InvalidParameterValueException("The volume for the given ipAddress/aggregateName/volumeName tuple already exists"); - } - PoolVO pool = _poolDao.findPool(poolName); - if (pool == null) { - throw new InvalidParameterValueException("Cannot find pool " + poolName); - } - pool = _poolDao.acquireInLockTable(pool.getId()); - if (pool == null) { - s_logger.warn("Failed to acquire lock on pool " + poolName); - throw new ConcurrentModificationException("Failed to acquire lock on pool " + poolName); - } - volume = new NetappVolumeVO(ipAddress, aggName, pool.getId(), volName, volSize, "", 0, username, password,0,pool.getName()); - volume = _volumeDao.persist(volume); - - volumeId = volume.getId(); - try { - s.invokeElem(xi); - volumeCreated = true; - - if(snapshotRes) - { - s.invokeElem(xi1); - volume.setSnapshotReservation(snapshotReservation); - _volumeDao.update(volumeId, volume); - } - - if(snapPolicy) - { - s.invokeElem(xi2); - volume.setSnapshotPolicy(snapshotPolicy); - _volumeDao.update(volumeId, volume); - } - txn.commit(); - } catch (NaException nae) { - //zapi call failed, log and throw e - s_logger.warn("Failed to create volume on the netapp filer:", nae); - txn.rollback(); - if(volumeCreated) { - try { - deleteRogueVolume(volName, s);//deletes created volume on filer - } catch (NaException e) { - s_logger.warn("Failed to cleanup created volume whilst rolling back on the netapp filer:", e); - throw new ServerException("Unable to create volume via cloudtools."+"Failed to cleanup created volume on netapp filer whilst rolling back on the cloud db:", e); - } catch (IOException e) { - s_logger.warn("Failed to cleanup created volume whilst rolling back on the netapp filer:", e); - throw new ServerException("Unable to create volume via cloudtools."+"Failed to cleanup created volume on netapp filer whilst rolling back on the cloud db:", e); - } - } - throw new ServerException("Unable to create volume", nae); - } catch (IOException ioe) { - s_logger.warn("Failed to create volume on the netapp filer:", ioe); - txn.rollback(); - if(volumeCreated) { - try { - deleteRogueVolume(volName, s);//deletes created volume on filer - } catch (NaException e) { - s_logger.warn("Failed to cleanup created volume whilst rolling back on the netapp filer:", e); - throw new ServerException("Unable to create volume via cloudtools."+"Failed to cleanup created volume on netapp filer whilst rolling back on the cloud db:", e); - } catch (IOException e) { - s_logger.warn("Failed to cleanup created volume whilst rolling back on the netapp filer:", e); - throw new ServerException("Unable to create volume via cloudtools."+"Failed to cleanup created volume on netapp filer whilst rolling back on the cloud db:", e); - } - } - throw new ServerException("Unable to create volume", ioe); - } - finally{ - if (s != null) - s.close(); - if (pool != null) - _poolDao.releaseFromLockTable(pool.getId()); - - } - } - - /** - * This method is primarily used to cleanup volume created on the netapp filer, when createVol api command fails at snapshot reservation. - * We roll back the db record, but the record on the netapp box still exists. We clean up that record using this helper method. - * @param volName - * @param s -- server reference - * @throws NaException - * @throws IOException - */ - private void deleteRogueVolume(String volName, NaServer s) throws NaException, IOException { - //bring the volume down - NaElement xi0 = new NaElement("volume-offline"); - xi0.addNewChild("name",volName); - s.invokeElem(xi0); - - //now destroy it - NaElement xi1 = new NaElement("volume-destroy"); - xi1.addNewChild("name",volName); - s.invokeElem(xi1); - } - - /** - * This method lists all the volumes by pool name - * @param poolName - * @return -- volumes in that pool - */ - @Override - public List listVolumesOnFiler(String poolName){ - - List vols = _volumeDao.listVolumesAscending(poolName); - - for(NetappVolumeVO vol : vols){ - try { - String snapScheduleOnFiler = returnSnapshotSchedule(vol); - vol.setSnapshotPolicy(snapScheduleOnFiler); - - } catch (ServerException e) { - s_logger.warn("Error trying to get snapshot schedule for volume"+vol.getVolumeName()); - } - } - return vols; - } - - - /** - * Utility method to return snapshot schedule for a volume - * @param vol -- volume for the snapshot schedule creation - * @return -- the snapshot schedule - * @throws ServerException - */ - private String returnSnapshotSchedule(NetappVolumeVO vol) throws ServerException{ - - NaElement xi = new NaElement("snapshot-get-schedule"); - xi.addNewChild("volume", vol.getVolumeName()); - NaServer s = null; - try { - s = getServer(vol.getIpAddress(), vol.getUsername(), vol.getPassword()); - NaElement xo = s.invokeElem(xi); - String weeks = xo.getChildContent("weeks"); - String days = xo.getChildContent("days"); - String hours = xo.getChildContent("hours"); - String minutes = xo.getChildContent("minutes"); - String whichHours = xo.getChildContent("which-hours"); - String whichMinutes = xo.getChildContent("which-minutes"); - - StringBuilder sB = new StringBuilder(); - sB.append(weeks).append(" ").append(days).append(" ").append(hours).append("@").append(whichHours).append(" ").append(minutes).append("@").append(whichMinutes); - return sB.toString(); - } catch (NaException nae) { - s_logger.warn("Failed to get volume size ", nae); - throw new ServerException("Failed to get volume size", nae); - } catch (IOException ioe) { - s_logger.warn("Failed to get volume size ", ioe); - throw new ServerException("Failed to get volume size", ioe); - } - finally{ - if (s != null) - s.close(); - } - } - /** - * This method returns the ascending order list of volumes based on their ids - * @param poolName -- name of pool - * @return -- ascending ordered list of volumes based on ids - */ - @Override - public List listVolumesAscending(String poolName){ - return _volumeDao.listVolumesAscending(poolName); - } - - /** - * This method returns the available size on the volume in terms of bytes - * @param volName -- name of volume - * @param userName -- username - * @param password -- password - * @param serverIp -- ip address of filer - * @throws UnknownHostException - * @return-- available size on the volume in terms of bytes; return -1 if volume is offline - * @throws ServerException - */ - @Override - public long returnAvailableVolumeSize(String volName, String userName, String password, String serverIp) throws ServerException { - long availableSize = 0; - - NaElement xi = new NaElement("volume-list-info"); - xi.addNewChild("volume", volName); - NaServer s = null; - String volumeState = null; - try { - s = getServer(serverIp, userName, password); - NaElement xo = s.invokeElem(xi); - List volList = xo.getChildByName("volumes").getChildren(); - Iterator volIter = volList.iterator(); - while(volIter.hasNext()){ - NaElement volInfo=(NaElement)volIter.next(); - availableSize = volInfo.getChildLongValue("size-available", -1); - volumeState = volInfo.getChildContent("state"); - } - - if (volumeState != null) { - return volumeState.equalsIgnoreCase("online") ? availableSize : -1; //return -1 if volume is offline - } - else { - //catch all - //volume state unreported - return -1; // as good as volume offline - } - - - } catch (NaException nae) { - s_logger.warn("Failed to get volume size ", nae); - throw new ServerException("Failed to get volume size", nae); - } catch (IOException ioe) { - s_logger.warn("Failed to get volume size ", ioe); - throw new ServerException("Failed to get volume size", ioe); - } - finally{ - if (s != null) - s.close(); - } - } - - /** - * This method creates a lun on the netapp filer - * @param poolName -- name of the pool - * @param lunSize -- size of the lun to be created - * @return -- lun path - * @throws IOException - * @throws ResourceAllocationException - * @throws NaException - */ - @Override - @DB - public String[] createLunOnFiler(String poolName, Long lunSize) throws ServerException, InvalidParameterValueException, ResourceAllocationException { - String[] result = new String[3]; - StringBuilder lunName = new StringBuilder("lun-"); - LunVO lun = null; - final Transaction txn = Transaction.currentTxn(); - txn.start(); - PoolVO pool = _poolDao.findPool(poolName); - - if(pool == null){ - throw new InvalidParameterValueException("Cannot find pool " + poolName); - } - - if (lunSize <= 0) { - throw new InvalidParameterValueException("Please specify a valid lun size in Gb"); - } - - String algorithm = pool.getAlgorithm(); - NetappVolumeVO selectedVol = null; - - //sanity check - int numVolsInPool = _volumeDao.listVolumes(poolName).size(); - - if (numVolsInPool == 0) - { - throw new InvalidParameterValueException("No volumes exist in the given pool"); - } - pool = _poolDao.acquireInLockTable(pool.getId()); - if (pool == null) { - s_logger.warn("Failed to acquire lock on the pool " + poolName); - return result; - } - NaServer s = null; - - try - { - if(algorithm == null || algorithm.equals(Algorithm.roundrobin.toString())) - { - selectedVol = _netappAllocator.chooseVolumeFromPool(poolName, lunSize); - } - else if(algorithm.equals(Algorithm.leastfull.toString())) - { - - selectedVol = _netappAllocator.chooseLeastFullVolumeFromPool(poolName, lunSize); - } - - if(selectedVol == null) - { - throw new ServerException("Could not find a suitable volume to create lun on"); - } - - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> createLun "+"serverIp:"+selectedVol.getIpAddress()); - - StringBuilder exportPath = new StringBuilder("/vol/"); - exportPath.append(selectedVol.getVolumeName()); - exportPath.append("/"); - - lun = new LunVO(exportPath.toString(), selectedVol.getId(), lunSize, "",""); - lun = _lunDao.persist(lun); - - //Lun id created: 6 digits right justified eg. 000045 - String lunIdStr = lun.getId().toString(); - String zeroStr = "000000"; - int length = lunIdStr.length(); - int offset = 6-length; - StringBuilder lunIdOnPath = new StringBuilder(); - lunIdOnPath.append(zeroStr.substring(0, offset)); - lunIdOnPath.append(lunIdStr); - exportPath.append("lun-").append(lunIdOnPath.toString()); - - lunName.append(lunIdOnPath.toString()); - - //update lun name - lun.setLunName(lunName.toString()); - _lunDao.update(lun.getId(), lun); - - NaElement xi; - NaElement xi1; - - long lSizeBytes = 1L*lunSize*1024*1024*1024; //This prevents integer overflow - Long lunSizeBytes = new Long(lSizeBytes); - - s = getServer(selectedVol.getIpAddress(), selectedVol.getUsername(),selectedVol.getPassword()); - - //create lun - xi = new NaElement("lun-create-by-size"); - xi.addNewChild("ostype","linux"); - xi.addNewChild("path",exportPath.toString()); - xi.addNewChild("size", (lunSizeBytes.toString())); - - s.invokeElem(xi); - - try - { - //now create an igroup - xi1 = new NaElement("igroup-create"); - xi1.addNewChild("initiator-group-name", lunName .toString()); - xi1.addNewChild("initiator-group-type", "iscsi"); - xi1.addNewChild("os-type", "linux"); - s.invokeElem(xi1); - }catch(NaAPIFailedException e) - { - if(e.getErrno() == 9004) - { - //igroup already exists hence no error - s_logger.warn("Igroup already exists"); - } - } - - //get target iqn - NaElement xi4 = new NaElement("iscsi-node-get-name"); - NaElement xo = s.invokeElem(xi4); - String iqn = xo.getChildContent("node-name"); - - lun.setTargetIqn(iqn); - _lunDao.update(lun.getId(), lun); - - //create lun mapping - //now map the lun to the igroup - NaElement xi3 = new NaElement("lun-map"); - xi3.addNewChild("force", "true"); - xi3.addNewChild("initiator-group", lunName.toString()); - xi3.addNewChild("path", lun.getPath() + lun.getLunName()); - - xi3.addNewChild("lun-id", lunIdStr); - s.invokeElem(xi3); - - txn.commit(); - //set the result - result[0] = lunName.toString();//lunname - result[1] = iqn;//iqn - result[2] = selectedVol.getIpAddress(); - - return result; - - } - catch (NaAPIFailedException naf) - { - if(naf.getErrno() == 9023){ //lun is already mapped to this group - result[0] = lunName.toString();//lunname; - result[1] = lun.getTargetIqn();//iqn - result[2] = selectedVol.getIpAddress(); - return result; - } - if(naf.getErrno() == 9024){ //another lun mapped at this group - result[0] = lunName.toString();//lunname; - result[1] = lun.getTargetIqn();//iqn - result[2] = selectedVol.getIpAddress(); - return result; - } - } - catch (NaException nae) - { - txn.rollback(); - throw new ServerException("Unable to create LUN", nae); - } - catch (IOException ioe) - { - txn.rollback(); - throw new ServerException("Unable to create LUN", ioe); - } - finally - { - if (pool != null) { - _poolDao.releaseFromLockTable(pool.getId()); - } - if (s != null) { - s.close(); - } - } - - return result; - } - - /** - * This method destroys a lun on the netapp filer - * @param lunName -- name of the lun to be destroyed - */ - @Override - @DB - public void destroyLunOnFiler(String lunName) throws InvalidParameterValueException, ServerException{ - - final Transaction txn = Transaction.currentTxn(); - txn.start(); - - LunVO lun = _lunDao.findByName(lunName); - - if(lun == null) - throw new InvalidParameterValueException("Cannot find lun"); - - NetappVolumeVO vol = _volumeDao.acquireInLockTable(lun.getVolumeId()); - if (vol == null) { - s_logger.warn("Failed to lock volume id= " + lun.getVolumeId()); - return; - } - NaServer s = null; - try { - s = getServer(vol.getIpAddress(), vol.getUsername(), vol.getPassword()); - - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> destroyLun "+":serverIp:"+vol.getIpAddress()); - - try { - //Unmap lun - NaElement xi2 = new NaElement("lun-unmap"); - xi2.addNewChild("initiator-group", lunName); - xi2.addNewChild("path", lun.getPath()+lun.getLunName()); - s.invokeElem(xi2); - } catch (NaAPIFailedException naf) { - if(naf.getErrno()==9016) - s_logger.warn("no map exists excpn 9016 caught in deletelun, continuing with delete"); - } - - //destroy lun - NaElement xi = new NaElement("lun-destroy"); - xi.addNewChild("force","true"); - xi.addNewChild("path", lun.getPath()+lun.getLunName()); - s.invokeElem(xi); - - //destroy igroup - NaElement xi1 = new NaElement("igroup-destroy"); - //xi1.addNewChild("force","true"); - xi1.addNewChild("initiator-group-name",lunName); - s.invokeElem(xi1); - - _lunDao.remove(lun.getId()); - txn.commit(); - } catch(UnknownHostException uhe) { - txn.rollback(); - s_logger.warn("Failed to delete lun", uhe); - throw new ServerException("Failed to delete lun", uhe); - } catch ( IOException ioe) { - txn.rollback(); - s_logger.warn("Failed to delete lun", ioe); - throw new ServerException("Failed to delete lun", ioe); - }catch (NaAPIFailedException naf) { - if(naf.getErrno() == 9017){//no such group exists excpn - s_logger.warn("no such group exists excpn 9017 caught in deletelun, continuing with delete"); - _lunDao.remove(lun.getId()); - txn.commit(); - }else if(naf.getErrno() == 9029){//LUN maps for this initiator group exist - s_logger.warn("LUN maps for this initiator group exist errno 9029 caught in deletelun, continuing with delete"); - _lunDao.remove(lun.getId()); - txn.commit(); - }else{ - txn.rollback(); - s_logger.warn("Failed to delete lun", naf); - throw new ServerException("Failed to delete lun", naf); - } - - } - catch (NaException nae) { - txn.rollback(); - s_logger.warn("Failed to delete lun", nae); - throw new ServerException("Failed to delete lun", nae); - } - finally{ - if (vol != null) { - _volumeDao.releaseFromLockTable(vol.getId()); - } - if (s != null) - s.close(); - } - - } - - /** - * This method lists the luns on the netapp filer - * @param volId -- id of the containing volume - * @return -- list of netapp luns - * @throws NaException - * @throws IOException - */ - @Override - public List listLunsOnFiler(String poolName) - { - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> listLunsOnFiler "); - - List luns = new ArrayList(); - - List vols = _volumeDao.listVolumes(poolName); - - for(NetappVolumeVO vol : vols) - { - luns.addAll(_lunDao.listLunsByVolId(vol.getId())); - } - - if(s_logger.isDebugEnabled()) - s_logger.debug("Response --> listLunsOnFiler:success"); - - return luns; - } - - - /** - * This method disassociates a lun from the igroup on the filer - * @param iGroup -- igroup name - * @param lunName -- lun name - */ - @Override - public void disassociateLun(String iGroup, String lunName) throws ServerException, InvalidParameterValueException - { - NaElement xi; - LunVO lun = _lunDao.findByName(lunName); - - if(lun == null) - throw new InvalidParameterValueException("Cannot find LUN " + lunName); - - NetappVolumeVO vol = _volumeDao.findById(lun.getVolumeId()); - NaServer s = null; - try { - s = getServer(vol.getIpAddress(), vol.getUsername(), vol.getPassword()); - - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> disassociateLun "+":serverIp:"+vol.getIpAddress()); - - xi = new NaElement("igroup-remove"); - xi.addNewChild("force", "true"); - xi.addNewChild("initiator", iGroup); - xi.addNewChild("initiator-group-name", lunName); - s.invokeElem(xi); - - } catch(UnknownHostException uhe) { - throw new ServerException("Failed to disassociate lun", uhe); - } catch ( IOException ioe) { - throw new ServerException("Failed to disassociate lun", ioe); - } catch (NaException nae) { - throw new ServerException("Failed to disassociate lun", nae); - } finally{ - if (s != null) - s.close(); - } - - } - - /** - * This method associates a lun to a particular igroup - * @param iqn - * @param iGroup - * @param lunName - */ - @Override - public String[] associateLun(String guestIqn, String lunName) throws ServerException, InvalidParameterValueException - - { - NaElement xi2; - - //get lun id from path - String[] splitLunName = lunName.split("-"); - String[] returnVal = new String[3]; - if(splitLunName.length != 2) - throw new InvalidParameterValueException("The lun id is malformed"); - - String lunIdStr = splitLunName[1]; - - Long lId = new Long(lunIdStr); - - LunVO lun = _lunDao.findById(lId); - - if(lun == null) - throw new InvalidParameterValueException("Cannot find LUN " + lunName); - - NetappVolumeVO vol = _volumeDao.findById(lun.getVolumeId()); - - //assert(vol != null); - - returnVal[0] = lunIdStr; - returnVal[1] = lun.getTargetIqn(); - returnVal[2] = vol.getIpAddress(); - - NaServer s = null; - - try - { - s = getServer(vol.getIpAddress(), vol.getUsername(), vol.getPassword()); - - if(s_logger.isDebugEnabled()) - s_logger.debug("Request --> associateLun "+":serverIp:"+vol.getIpAddress()); - - //add iqn to the group - xi2 = new NaElement("igroup-add"); - xi2.addNewChild("force", "true"); - xi2.addNewChild("initiator", guestIqn); - xi2.addNewChild("initiator-group-name", lunName); - s.invokeElem(xi2); - - return returnVal; - } catch (UnknownHostException uhe) { - s_logger.warn("Unable to associate LUN " , uhe); - throw new ServerException("Unable to associate LUN", uhe); - }catch (NaAPIFailedException naf){ - if(naf.getErrno() == 9008){ //initiator group already contains node - return returnVal; - } - s_logger.warn("Unable to associate LUN " , naf); - throw new ServerException("Unable to associate LUN", naf); - } - catch (NaException nae) { - s_logger.warn("Unable to associate LUN " , nae); - throw new ServerException("Unable to associate LUN", nae); - } catch (IOException ioe) { - s_logger.warn("Unable to associate LUN " , ioe); - throw new ServerException("Unable to associate LUN", ioe); - } - finally{ - if (s != null) - s.close(); - } - - } - - @Override - public boolean configure(String name, Map params) - throws ConfigurationException { - - _name = name; - - _netappAllocator = new NetappDefaultAllocatorImpl( this ); - - return true; - } - - @Override - public String getName() { - return _name; - } - - @Override - public boolean start() { - return true; - } - - @Override - public boolean stop() { - return true; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/NetappVolumeVO.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/NetappVolumeVO.java b/server/src/com/cloud/netapp/NetappVolumeVO.java deleted file mode 100644 index 04318d0..0000000 --- a/server/src/com/cloud/netapp/NetappVolumeVO.java +++ /dev/null @@ -1,183 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name="netapp_volume") -public class NetappVolumeVO { - - @Id - @GeneratedValue(strategy=GenerationType.IDENTITY) - @Column(name="id") - private Long id; - - @Column(name="ip_address") - private String ipAddress; - - @Column(name="aggregate_name") - private String aggregateName; - - @Column(name="pool_id") - private Long poolId; - - @Column(name="pool_name") - private String poolName; - - @Column(name="volume_name") - private String volumeName; - - @Column(name="username") - private String username; - - @Column(name="password") - private String password; - - @Column(name="snapshot_policy") - private String snapshotPolicy; - - @Column(name="snapshot_reservation") - private Integer snapshotReservation; - - @Column(name="volume_size") - private String volumeSize; - - @Column(name="round_robin_marker") - private int roundRobinMarker; - - public NetappVolumeVO(){ - - } - - public NetappVolumeVO(String ipAddress, String aggName, Long poolId, String volName, String volSize, String snapshotPolicy, int snapshotReservation, String username, String password, int roundRobinMarker, String poolName) { - this.ipAddress = ipAddress; - this.aggregateName = aggName; - this.poolId = poolId; - this.username = username; - this.password = password; - this.volumeName = volName; - this.volumeSize = volSize; - this.snapshotPolicy = snapshotPolicy; - this.snapshotReservation = snapshotReservation; - this.roundRobinMarker = roundRobinMarker; - this.poolName = poolName; - } - - - public String getPoolName() { - return poolName; - } - - public void setPoolName(String poolName) { - this.poolName = poolName; - } - - public int getRoundRobinMarker() { - return roundRobinMarker; - } - - public void setRoundRobinMarker(int roundRobinMarker) { - this.roundRobinMarker = roundRobinMarker; - } - - public String getVolumeName() { - return volumeName; - } - - public void setVolumeName(String volumeName) { - this.volumeName = volumeName; - } - - public String getSnapshotPolicy() { - return snapshotPolicy; - } - - public void setSnapshotPolicy(String snapshotPolicy) { - this.snapshotPolicy = snapshotPolicy; - } - - public Integer getSnapshotReservation() { - return snapshotReservation; - } - - public void setSnapshotReservation(Integer snapshotReservation) { - this.snapshotReservation = snapshotReservation; - } - - public String getVolumeSize() { - return volumeSize; - } - - public void setVolumeSize(String volumeSize) { - this.volumeSize = volumeSize; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getIpAddress() { - return ipAddress; - } - - public void setIpAddress(String ipAddress) { - this.ipAddress = ipAddress; - } - - public String getAggregateName() { - return aggregateName; - } - - public void setAggregateName(String aggregateName) { - this.aggregateName = aggregateName; - } - - public Long getPoolId() { - return poolId; - } - - public void setPoolId(Long poolId) { - this.poolId = poolId; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/PoolVO.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/PoolVO.java b/server/src/com/cloud/netapp/PoolVO.java deleted file mode 100644 index 713db46..0000000 --- a/server/src/com/cloud/netapp/PoolVO.java +++ /dev/null @@ -1,74 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name="netapp_pool") -public class PoolVO { - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getAlgorithm() { - return algorithm; - } - - public void setAlgorithm(String algorithm) { - this.algorithm = algorithm; - } - - @Id - @GeneratedValue(strategy=GenerationType.IDENTITY) - @Column(name="id") - private Long id; - - @Column(name="name") - private String name; - - @Column(name="algorithm") - private String algorithm; - - public PoolVO(){ - - } - - public PoolVO(String name, String algorithm) { - this.name = name; - this.algorithm = algorithm; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/dao/LunDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/dao/LunDao.java b/server/src/com/cloud/netapp/dao/LunDao.java deleted file mode 100644 index 24086ef..0000000 --- a/server/src/com/cloud/netapp/dao/LunDao.java +++ /dev/null @@ -1,31 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp.dao; - -import java.util.List; - -import com.cloud.netapp.LunVO; -import com.cloud.netapp.NetappVolumeVO; -import com.cloud.netapp.PoolVO; -import com.cloud.utils.db.GenericDao; - -public interface LunDao extends GenericDao { - - List listLunsByVolId(Long volId); - - LunVO findByName(String name); -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/dao/LunDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/dao/LunDaoImpl.java b/server/src/com/cloud/netapp/dao/LunDaoImpl.java deleted file mode 100644 index 9cc67b7..0000000 --- a/server/src/com/cloud/netapp/dao/LunDaoImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp.dao; - -import java.util.List; - -import javax.ejb.Local; - -import org.apache.log4j.Logger; - -import com.cloud.netapp.LunVO; -import com.cloud.netapp.NetappVolumeVO; -import com.cloud.netapp.PoolVO; -import com.cloud.utils.db.Filter; -import com.cloud.utils.db.GenericDaoBase; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; - -@Local(value={LunDao.class}) -public class LunDaoImpl extends GenericDaoBase implements LunDao { - private static final Logger s_logger = Logger.getLogger(PoolDaoImpl.class); - - protected final SearchBuilder LunSearch; - protected final SearchBuilder LunNameSearch; - - protected LunDaoImpl() { - - LunSearch = createSearchBuilder(); - LunSearch.and("volumeId", LunSearch.entity().getVolumeId(), SearchCriteria.Op.EQ); - LunSearch.done(); - - LunNameSearch = createSearchBuilder(); - LunNameSearch.and("name", LunNameSearch.entity().getLunName(), SearchCriteria.Op.EQ); - LunNameSearch.done(); - - } - - @Override - public List listLunsByVolId(Long volId) { - Filter searchFilter = new Filter(LunVO.class, "id", Boolean.TRUE, Long.valueOf(0), Long.valueOf(10000)); - - SearchCriteria sc = LunSearch.create(); - sc.setParameters("volumeId", volId); - List lunList = listBy(sc,searchFilter); - - return lunList; - } - - - @Override - public LunVO findByName(String name) { - SearchCriteria sc = LunNameSearch.create(); - sc.setParameters("name", name); - return findOneBy(sc); - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/dao/PoolDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/dao/PoolDao.java b/server/src/com/cloud/netapp/dao/PoolDao.java deleted file mode 100644 index 18cebe9..0000000 --- a/server/src/com/cloud/netapp/dao/PoolDao.java +++ /dev/null @@ -1,28 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp.dao; - -import java.util.List; - -import com.cloud.netapp.PoolVO; -import com.cloud.utils.db.GenericDao; - -public interface PoolDao extends GenericDao { - - PoolVO findPool(String poolName); - List listPools(); -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/dao/PoolDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/dao/PoolDaoImpl.java b/server/src/com/cloud/netapp/dao/PoolDaoImpl.java deleted file mode 100644 index 3e23644..0000000 --- a/server/src/com/cloud/netapp/dao/PoolDaoImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp.dao; - -import java.util.List; - -import javax.ejb.Local; - -import org.apache.log4j.Logger; - -import com.cloud.netapp.PoolVO; -import com.cloud.utils.db.GenericDaoBase; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; - -@Local(value={PoolDao.class}) -public class PoolDaoImpl extends GenericDaoBase implements PoolDao { - private static final Logger s_logger = Logger.getLogger(PoolDaoImpl.class); - - protected final SearchBuilder PoolSearch; - - protected PoolDaoImpl() { - - PoolSearch = createSearchBuilder(); - PoolSearch.and("name", PoolSearch.entity().getName(), SearchCriteria.Op.EQ); - PoolSearch.done(); - - } - - @Override - public PoolVO findPool(String poolName) { - SearchCriteria sc = PoolSearch.create(); - sc.setParameters("name", poolName); - List poolList = listBy(sc); - - return(poolList.size()>0?poolList.get(0):null); - } - - @Override - public List listPools() { - // TODO Auto-generated method stub - return null; - } - - -// @Override -// public List listVolumes(String poolName) { -// SearchCriteria sc = NetappListVolumeSearch.create(); -// sc.setParameters("poolName", poolName); -// return listBy(sc); -// } - -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8aa2b55d/server/src/com/cloud/netapp/dao/VolumeDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/netapp/dao/VolumeDao.java b/server/src/com/cloud/netapp/dao/VolumeDao.java deleted file mode 100644 index 7f92c3c..0000000 --- a/server/src/com/cloud/netapp/dao/VolumeDao.java +++ /dev/null @@ -1,30 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.netapp.dao; - -import java.util.List; - -import com.cloud.netapp.NetappVolumeVO; -import com.cloud.utils.db.GenericDao; - -public interface VolumeDao extends GenericDao { - - NetappVolumeVO findVolume(String ipAddress, String aggregateName, String volumeName); - List listVolumes(String poolName); - NetappVolumeVO returnRoundRobinMarkerInPool(String poolName,int roundRobinMarker); - List listVolumesAscending(String poolName); -}