| // 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.ha; | |
| import java.util.Date; | |
| import javax.persistence.Column; | |
| import javax.persistence.Entity; | |
| import javax.persistence.EnumType; | |
| import javax.persistence.Enumerated; | |
| import javax.persistence.GeneratedValue; | |
| import javax.persistence.GenerationType; | |
| import javax.persistence.Id; | |
| import javax.persistence.Table; | |
| import javax.persistence.Temporal; | |
| import javax.persistence.TemporalType; | |
| import org.apache.cloudstack.api.InternalIdentity; | |
| import com.cloud.ha.HighAvailabilityManager.Step; | |
| import com.cloud.ha.HighAvailabilityManager.WorkType; | |
| import com.cloud.utils.db.GenericDao; | |
| import com.cloud.vm.VirtualMachine; | |
| import com.cloud.vm.VirtualMachine.State; | |
| @Entity | |
| @Table(name = "op_ha_work") | |
| public class HaWorkVO implements InternalIdentity { | |
| @Id | |
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |
| @Column(name = "id") | |
| private Long id; | |
| @Column(name = "instance_id", updatable = false, nullable = false) | |
| private long instanceId; // vm_instance id | |
| @Column(name = "mgmt_server_id", nullable = true) | |
| private Long serverId; | |
| @Column(name = GenericDao.CREATED_COLUMN) | |
| private Date created; | |
| @Column(name = "state", nullable = false) | |
| @Enumerated(value = EnumType.STRING) | |
| private State previousState; | |
| @Column(name = "host_id", nullable = false) | |
| private long hostId; | |
| @Column(name = "taken", nullable = true) | |
| @Temporal(value = TemporalType.TIMESTAMP) | |
| private Date dateTaken; | |
| @Column(name = "time_to_try", nullable = true) | |
| private long timeToTry; | |
| @Column(name = "type", updatable = false, nullable = false) | |
| @Enumerated(value = EnumType.STRING) | |
| private WorkType workType; | |
| @Column(name = "updated") | |
| private long updateTime; | |
| @Column(name = "step", nullable = false) | |
| @Enumerated(value = EnumType.STRING) | |
| private HighAvailabilityManager.Step step; | |
| @Column(name = "vm_type", updatable = false, nullable = false) | |
| @Enumerated(value = EnumType.STRING) | |
| private VirtualMachine.Type type; | |
| @Column(name = "tried") | |
| int timesTried; | |
| @Column(name = "reason") | |
| @Enumerated(value = EnumType.STRING) | |
| private HighAvailabilityManager.ReasonType reasonType; | |
| protected HaWorkVO() { | |
| } | |
| @Override | |
| public long getId() { | |
| return id; | |
| } | |
| public long getInstanceId() { | |
| return instanceId; | |
| } | |
| public WorkType getWorkType() { | |
| return workType; | |
| } | |
| public void setStep(final HighAvailabilityManager.Step step) { | |
| this.step = step; | |
| } | |
| public Long getServerId() { | |
| return serverId; | |
| } | |
| public VirtualMachine.Type getType() { | |
| return type; | |
| } | |
| public void setServerId(final Long serverId) { | |
| this.serverId = serverId; | |
| } | |
| public Date getCreated() { | |
| return created; | |
| } | |
| public void setHostId(final long hostId) { | |
| this.hostId = hostId; | |
| } | |
| public HighAvailabilityManager.Step getStep() { | |
| return step; | |
| } | |
| public State getPreviousState() { | |
| return previousState; | |
| } | |
| public Date getDateTaken() { | |
| return dateTaken; | |
| } | |
| public long getHostId() { | |
| return hostId; | |
| } | |
| public void setDateTaken(final Date taken) { | |
| this.dateTaken = taken; | |
| } | |
| public void setTimesTried(final int time) { | |
| timesTried = time; | |
| } | |
| public boolean canScheduleNew(final long interval) { | |
| return (timeToTry + interval) < (System.currentTimeMillis() >> 10); | |
| } | |
| public int getTimesTried() { | |
| return timesTried; | |
| } | |
| public long getUpdateTime() { | |
| return updateTime; | |
| } | |
| public void setUpdateTime(long time) { | |
| updateTime = time; | |
| } | |
| public long getTimeToTry() { | |
| return timeToTry; | |
| } | |
| public void setTimeToTry(final long timeToTry) { | |
| this.timeToTry = timeToTry; | |
| } | |
| public void setPreviousState(State state) { | |
| this.previousState = state; | |
| } | |
| public HaWorkVO(final long instanceId, final VirtualMachine.Type type, final WorkType workType, final Step step, final long hostId, final State previousState, | |
| final int timesTried, final long updated, HighAvailabilityManager.ReasonType reasonType) { | |
| this.workType = workType; | |
| this.type = type; | |
| this.instanceId = instanceId; | |
| this.serverId = null; | |
| this.hostId = hostId; | |
| this.previousState = previousState; | |
| this.dateTaken = null; | |
| this.timesTried = timesTried; | |
| this.step = step; | |
| this.timeToTry = System.currentTimeMillis() >> 10; | |
| this.updateTime = updated; | |
| this.reasonType = reasonType; | |
| } | |
| @Override | |
| public String toString() { | |
| return new StringBuilder("HAWork[").append(id) | |
| .append("-") | |
| .append(workType) | |
| .append("-") | |
| .append(instanceId) | |
| .append("-") | |
| .append(previousState) | |
| .append("-") | |
| .append(step) | |
| .append("]") | |
| .toString(); | |
| } | |
| public HighAvailabilityManager.ReasonType getReasonType() { | |
| return reasonType; | |
| } | |
| public void setReasonType(HighAvailabilityManager.ReasonType reasonType) { | |
| this.reasonType = reasonType; | |
| } | |
| } |