package org.ovirt.engine.core.common.businessentities; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Transient; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.ovirt.engine.core.common.businessentities.mapping.GuidType; import org.ovirt.engine.core.common.validation.annotation.ValidName; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.common.validation.group.UpdateEntity; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.INotifyPropertyChanged; import org.ovirt.engine.core.compat.NGuid; import org.ovirt.engine.core.compat.Version; @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "VDSGroup", namespace = "http://service.engine.ovirt.org") @Entity @Table(name = "vds_groups") @TypeDef(name = "guid", typeClass = GuidType.class) @NamedQueries( value = { @NamedQuery( name = "vdsgroup_with_running_vms", query = "from VDSGroup g where g.id = :vds_group_id and :vds_group_id in (select s.vds_group_id from VmStatic s, VmDynamic d where d.status not in (0, 13, 14) and d.id = s.id)") }) public class VDSGroup extends IVdcQueryable implements INotifyPropertyChanged, Serializable { private static final long serialVersionUID = 5659359762655478095L; public static final Guid DEFAULT_VDS_GROUP_ID = new Guid("99408929-82CF-4DC7-A532-9D998063FA95"); @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "org.ovirt.engine.core.dao.GuidGenerator") @Column(name = "vds_group_id") @Type(type = "guid") private Guid id; @NotNull(message = "VALIDATION.VDS_GROUP.NAME.NOT_NULL", groups = { CreateEntity.class, UpdateEntity.class }) @Size(min = 1, max = BusinessEntitiesDefinitions.CLUSTER_NAME_SIZE, message = "VALIDATION.VDS_GROUP.NAME.MAX", groups = { CreateEntity.class, UpdateEntity.class }) @ValidName(message = "VALIDATION.VDS_GROUP.NAME.INVALID", groups = { CreateEntity.class, UpdateEntity.class }) @Column(name = "name") private String name = ""; // GREGM Prevents NPE @Size(max = BusinessEntitiesDefinitions.GENERAL_MAX_SIZE) @Column(name = "description") private String description; @Size(max = BusinessEntitiesDefinitions.CLUSTER_CPU_NAME_SIZE) @Column(name = "cpu_name") private String cpu_name; @XmlElement(name = "selection_algorithm") @Column(name = "selection_algorithm") private VdsSelectionAlgorithm selection_algorithm = VdsSelectionAlgorithm.None; @XmlElement(name = "high_utilization") @Column(name = "high_utilization") private int high_utilization = 0; @XmlElement(name = "low_utilization") @Column(name = "low_utilization") private int low_utilization = 0; @XmlElement(name = "cpu_over_commit_duration_minutes") @Column(name = "cpu_over_commit_duration_minutes") private int cpu_over_commit_duration_minutes = 0; @XmlElement(name = "hypervisor_type") @Column(name = "hypervisor_type") private HypervisorType hypervisor_type = HypervisorType.KVM; @XmlElement(name = "storage_pool_id") @Column(name = "storage_pool_id") @Type(type = "guid") private NGuid storagePool; @XmlElement(name = "max_vds_memory_over_commit") @Column(name = "max_vds_memory_over_commit") private int max_vds_memory_over_commit = 0; @Size(max = BusinessEntitiesDefinitions.GENERAL_VERSION_SIZE) @Column(name = "compatibility_version") private String compatibility_version; @Transient private Version compatVersion; @XmlElement(name = "TransparentHugepages") @Column(name = "transparent_hugepages") private boolean transparentHugepages; @NotNull(message = "VALIDATION.VDS_GROUP.MigrateOnError.NOT_NULL") @XmlElement(name = "MigrateOnError") @Column(name = "migrate_on_error") private MigrateOnErrorOptions migrateOnError; public VDSGroup() { selection_algorithm = VdsSelectionAlgorithm.None; high_utilization = -1; low_utilization = -1; cpu_over_commit_duration_minutes = -1; hypervisor_type = HypervisorType.KVM; migrateOnError = MigrateOnErrorOptions.YES; } public VDSGroup(String name, String description, String cpu_name) { this(); this.name = name; this.description = description; this.cpu_name = cpu_name; } @XmlElement public Guid getID() { return id; } public void setID(Guid value) { id = value; } public void setvds_group_id(Guid value) { setID(value); } @XmlElement public String getname() { return name; } public void setname(String value) { name = value; } @XmlElement public String getdescription() { return description; } public void setdescription(String value) { description = value; } @XmlElement public String getcpu_name() { return this.cpu_name; } public void setcpu_name(String value) { this.cpu_name = value; } public VdsSelectionAlgorithm getselection_algorithm() { return selection_algorithm; } public void setselection_algorithm(VdsSelectionAlgorithm value) { selection_algorithm = value; } public int gethigh_utilization() { return this.high_utilization; } public void sethigh_utilization(int value) { this.high_utilization = value; } public int getlow_utilization() { return this.low_utilization; } public void setlow_utilization(int value) { this.low_utilization = value; } public int getcpu_over_commit_duration_minutes() { return this.cpu_over_commit_duration_minutes; } public void setcpu_over_commit_duration_minutes(int value) { this.cpu_over_commit_duration_minutes = value; } public HypervisorType gethypervisor_type() { return this.hypervisor_type; } public void sethypervisor_type(HypervisorType value) { this.hypervisor_type = value; } public NGuid getstorage_pool_id() { return storagePool; } public void setstorage_pool_id(NGuid storagePool) { this.storagePool = storagePool; } public int getmax_vds_memory_over_commit() { return this.max_vds_memory_over_commit; } public void setmax_vds_memory_over_commit(int value) { this.max_vds_memory_over_commit = value; } @XmlElement(name = "compatibility_version") public Version getcompatibility_version() { return compatVersion; } public boolean getTransparentHugepages() { return this.transparentHugepages; } public void setTransparentHugepages(boolean value) { this.transparentHugepages = value; } public void setcompatibility_version(Version value) { compatibility_version = value.getValue(); compatVersion = value; } @Override public Object getQueryableId() { return getID(); } private static final java.util.ArrayList<String> _vmProperties = new java.util.ArrayList<String>( java.util.Arrays.asList(new String[] { "name", "description", "cpu_name", "cpu_over_commit_duration_minutes", "low_utilization", "high_utilization", "selection_algorithm", "max_vds_memory_over_commit", "storage_pool_id", "compatibility_version", "TransparentHugepages", "MigrateOnError" })); @Override public java.util.ArrayList<String> getChangeablePropertiesList() { return _vmProperties; } public void setMigrateOnError(MigrateOnErrorOptions migrateOnError) { this.migrateOnError = migrateOnError; } public MigrateOnErrorOptions getMigrateOnError() { return migrateOnError; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((compatVersion == null) ? 0 : compatVersion.hashCode()); result = prime * result + ((compatibility_version == null) ? 0 : compatibility_version.hashCode()); result = prime * result + ((cpu_name == null) ? 0 : cpu_name.hashCode()); result = prime * result + cpu_over_commit_duration_minutes; result = prime * result + ((description == null) ? 0 : description.hashCode()); result = prime * result + high_utilization; result = prime * result + ((hypervisor_type == null) ? 0 : hypervisor_type.hashCode()); result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + low_utilization; result = prime * result + max_vds_memory_over_commit; result = prime * result + ((migrateOnError == null) ? 0 : migrateOnError.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((selection_algorithm == null) ? 0 : selection_algorithm.hashCode()); result = prime * result + ((storagePool == null) ? 0 : storagePool.hashCode()); result = prime * result + (transparentHugepages ? 1231 : 1237); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; VDSGroup other = (VDSGroup) obj; if (compatVersion == null) { if (other.compatVersion != null) return false; } else if (!compatVersion.equals(other.compatVersion)) return false; if (compatibility_version == null) { if (other.compatibility_version != null) return false; } else if (!compatibility_version.equals(other.compatibility_version)) return false; if (cpu_name == null) { if (other.cpu_name != null) return false; } else if (!cpu_name.equals(other.cpu_name)) return false; if (cpu_over_commit_duration_minutes != other.cpu_over_commit_duration_minutes) return false; if (description == null) { if (other.description != null) return false; } else if (!description.equals(other.description)) if (high_utilization != other.high_utilization) return false; if (hypervisor_type == null) { if (other.hypervisor_type != null) return false; } else if (!hypervisor_type.equals(other.hypervisor_type)) return false; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (low_utilization != other.low_utilization) return false; if (max_vds_memory_over_commit != other.max_vds_memory_over_commit) return false; if (migrateOnError != other.migrateOnError) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (selection_algorithm == null) { if (other.selection_algorithm != null) return false; } else if (!selection_algorithm.equals(other.selection_algorithm)) return false; if (storagePool == null) { if (other.storagePool != null) return false; } else if (!storagePool.equals(other.storagePool)) return false; if (transparentHugepages != other.transparentHugepages) return false; return true; } }