| // 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 org.apache.cloudstack.storage.datastore.db; |
| |
| import com.cloud.hypervisor.Hypervisor.HypervisorType; |
| import com.cloud.storage.ScopeType; |
| import com.cloud.storage.Storage.StoragePoolType; |
| import com.cloud.storage.StoragePool; |
| import com.cloud.storage.StoragePoolStatus; |
| import com.cloud.utils.UriUtils; |
| import com.cloud.utils.db.Encrypt; |
| import com.cloud.utils.db.GenericDao; |
| |
| import javax.persistence.Column; |
| import javax.persistence.Entity; |
| import javax.persistence.EnumType; |
| import javax.persistence.Enumerated; |
| import javax.persistence.Id; |
| import javax.persistence.Table; |
| import javax.persistence.TableGenerator; |
| import javax.persistence.Temporal; |
| import javax.persistence.TemporalType; |
| import java.util.Date; |
| import java.util.UUID; |
| |
| @Entity |
| @Table(name = "storage_pool") |
| public class StoragePoolVO implements StoragePool { |
| @Id |
| @TableGenerator(name = "storage_pool_sq", |
| table = "sequence", |
| pkColumnName = "name", |
| valueColumnName = "value", |
| pkColumnValue = "storage_pool_seq", |
| allocationSize = 1) |
| @Column(name = "id", updatable = false, nullable = false) |
| private long id; |
| |
| @Column(name = "name", updatable = false, nullable = false, length = 255) |
| private String name = null; |
| |
| @Column(name = "uuid", length = 255) |
| private String uuid = null; |
| |
| @Column(name = "pool_type", updatable = false, nullable = false, length = 32) |
| @Enumerated(value = EnumType.STRING) |
| private StoragePoolType poolType; |
| |
| @Column(name = GenericDao.CREATED_COLUMN) |
| Date created; |
| |
| @Column(name = GenericDao.REMOVED_COLUMN) |
| private Date removed; |
| |
| @Column(name = "update_time", updatable = true) |
| @Temporal(value = TemporalType.TIMESTAMP) |
| private Date updateTime; |
| |
| @Column(name = "data_center_id", updatable = true, nullable = false) |
| private long dataCenterId; |
| |
| @Column(name = "pod_id", updatable = true) |
| private Long podId; |
| |
| @Column(name = "used_bytes", updatable = true, nullable = true) |
| private long usedBytes; |
| |
| @Column(name = "capacity_bytes", updatable = true, nullable = true) |
| private long capacityBytes; |
| |
| @Column(name = "status", updatable = true, nullable = false) |
| @Enumerated(value = EnumType.STRING) |
| private StoragePoolStatus status; |
| |
| @Column(name = "storage_provider_name", updatable = true, nullable = false) |
| private String storageProviderName; |
| |
| @Column(name = "host_address") |
| private String hostAddress; |
| |
| @Column(name = "path") |
| private String path; |
| |
| @Column(name = "port") |
| private int port; |
| |
| @Encrypt |
| @Column(name = "user_info") |
| private String userInfo; |
| |
| @Column(name = "cluster_id") |
| private Long clusterId; |
| |
| @Column(name = "scope") |
| @Enumerated(value = EnumType.STRING) |
| private ScopeType scope; |
| |
| @Column(name = "managed") |
| private boolean managed; |
| |
| @Column(name = "capacity_iops", updatable = true, nullable = true) |
| private Long capacityIops; |
| |
| @Column(name = "hypervisor") |
| @Enumerated(value = EnumType.STRING) |
| private HypervisorType hypervisor; |
| |
| @Override |
| public long getId() { |
| return id; |
| } |
| |
| @Override |
| public StoragePoolStatus getStatus() { |
| return status; |
| } |
| |
| public StoragePoolVO() { |
| status = StoragePoolStatus.Initial; |
| } |
| |
| public StoragePoolVO(long poolId, String name, String uuid, StoragePoolType type, long dataCenterId, Long podId, long availableBytes, long capacityBytes, |
| String hostAddress, int port, String hostPath) { |
| this.name = name; |
| id = poolId; |
| this.uuid = uuid; |
| poolType = type; |
| this.dataCenterId = dataCenterId; |
| usedBytes = availableBytes; |
| this.capacityBytes = capacityBytes; |
| this.hostAddress = hostAddress; |
| this.port = port; |
| this.podId = podId; |
| setStatus(StoragePoolStatus.Initial); |
| setPath(hostPath); |
| } |
| |
| public StoragePoolVO(StoragePoolVO that) { |
| this(that.id, that.name, that.uuid, that.poolType, that.dataCenterId, that.podId, that.usedBytes, that.capacityBytes, that.hostAddress, that.port, that.path); |
| } |
| |
| public StoragePoolVO(StoragePoolType type, String hostAddress, int port, String path) { |
| poolType = type; |
| this.hostAddress = hostAddress; |
| this.port = port; |
| setStatus(StoragePoolStatus.Initial); |
| uuid = UUID.randomUUID().toString(); |
| setPath(path); |
| } |
| |
| @Override |
| public String getName() { |
| return name; |
| } |
| |
| @Override |
| public String getUuid() { |
| return uuid; |
| } |
| |
| @Override |
| public StoragePoolType getPoolType() { |
| return poolType; |
| } |
| |
| public void setPoolType(StoragePoolType protocol) { |
| poolType = protocol; |
| } |
| |
| @Override |
| public Date getCreated() { |
| return created; |
| } |
| |
| public Date getRemoved() { |
| return removed; |
| } |
| |
| @Override |
| public Date getUpdateTime() { |
| return updateTime; |
| } |
| |
| @Override |
| public long getDataCenterId() { |
| return dataCenterId; |
| } |
| |
| @Override |
| public long getUsedBytes() { |
| return usedBytes; |
| } |
| |
| @Override |
| public String getStorageProviderName() { |
| return storageProviderName; |
| } |
| |
| public void setStorageProviderName(String providerName) { |
| storageProviderName = providerName; |
| } |
| |
| @Override |
| public long getCapacityBytes() { |
| return capacityBytes; |
| } |
| |
| public void setUsedBytes(long usedBytes) { |
| this.usedBytes = usedBytes; |
| } |
| |
| public void setCapacityBytes(long capacityBytes) { |
| this.capacityBytes = capacityBytes; |
| } |
| |
| public void setManaged(boolean managed) { |
| this.managed = managed; |
| } |
| |
| @Override |
| public boolean isManaged() { |
| return managed; |
| } |
| |
| public void setCapacityIops(Long capacityIops) { |
| this.capacityIops = capacityIops; |
| } |
| |
| @Override |
| public Long getCapacityIops() { |
| return capacityIops; |
| } |
| |
| @Override |
| public Long getClusterId() { |
| return clusterId; |
| } |
| |
| public void setClusterId(Long clusterId) { |
| this.clusterId = clusterId; |
| } |
| |
| @Override |
| public String getHostAddress() { |
| return hostAddress; |
| } |
| |
| public void setHostAddress(String host) { |
| hostAddress = host; |
| } |
| |
| @Override |
| public String getPath() { |
| String updatedPath = path; |
| if (poolType == StoragePoolType.SMB) { |
| updatedPath = UriUtils.getUpdateUri(updatedPath, false); |
| if (updatedPath.contains("password") && updatedPath.contains("?")) { |
| updatedPath = updatedPath.substring(0, updatedPath.indexOf('?')); |
| } |
| } |
| |
| return updatedPath; |
| } |
| |
| @Override |
| public String getUserInfo() { |
| return userInfo; |
| } |
| |
| public void setStatus(StoragePoolStatus status) { |
| this.status = status; |
| } |
| |
| public void setId(long id) { |
| this.id = id; |
| } |
| |
| public void setDataCenterId(long dcId) { |
| dataCenterId = dcId; |
| } |
| |
| public void setPodId(Long podId) { |
| this.podId = podId; |
| } |
| |
| public void setUuid(String uuid) { |
| this.uuid = uuid; |
| } |
| |
| public void setPath(String path) { |
| this.path = path; |
| } |
| |
| public void setUserInfo(String userInfo) { |
| this.userInfo = userInfo; |
| } |
| |
| @Override |
| public int getPort() { |
| return port; |
| } |
| |
| public void setPort(int port) { |
| this.port = port; |
| } |
| |
| @Override |
| public Long getPodId() { |
| return podId; |
| } |
| |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| public void setScope(ScopeType scope) { |
| this.scope = scope; |
| } |
| |
| public ScopeType getScope() { |
| return scope; |
| } |
| |
| @Override |
| public HypervisorType getHypervisor() { |
| return hypervisor; |
| } |
| |
| public void setHypervisor(HypervisorType hypervisor) { |
| this.hypervisor = hypervisor; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (!(obj instanceof StoragePoolVO) || obj == null) { |
| return false; |
| } |
| StoragePoolVO that = (StoragePoolVO)obj; |
| return id == that.id; |
| } |
| |
| @Override |
| public int hashCode() { |
| return new Long(id).hashCode(); |
| } |
| |
| @Override |
| public String toString() { |
| return new StringBuilder("Pool[").append(id).append("|").append(poolType).append("]").toString(); |
| } |
| |
| @Override |
| public boolean isShared() { |
| return scope == ScopeType.HOST ? false : true; |
| } |
| |
| @Override |
| public boolean isLocal() { |
| return !isShared(); |
| } |
| |
| @Override |
| public boolean isInMaintenance() { |
| return status == StoragePoolStatus.PrepareForMaintenance || status == StoragePoolStatus.Maintenance || status == StoragePoolStatus.ErrorInMaintenance || |
| removed != null; |
| } |
| } |