All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bazaarvoice.emodb.table.db.astyanax.MaintenanceOp Maven / Gradle / Ivy

package com.bazaarvoice.emodb.table.db.astyanax;

import com.google.common.base.Objects;
import org.joda.time.DateTime;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Describes a pending table maintenance operation.
 */
class MaintenanceOp implements Comparable {
    private final String _name;
    private final DateTime _when;
    private final MaintenanceType _type;
    private final String _dataCenter;
    private MaintenanceTask _task;

    static MaintenanceOp forMetadata(String name, DateTime when, MaintenanceTask task) {
        return new MaintenanceOp(name, when, MaintenanceType.METADATA, "", checkNotNull(task, "task"));
    }

    static MaintenanceOp forData(String name, DateTime when, String dataCenter, MaintenanceTask task) {
        return new MaintenanceOp(name, when, MaintenanceType.DATA, Objects.firstNonNull(dataCenter, ""), checkNotNull(task, "task"));
    }

    static MaintenanceOp reschedule(MaintenanceOp op, DateTime when) {
        return new MaintenanceOp(op.getName(), when, op.getType(), op.getDataCenter(), op.getTask());
    }

    private MaintenanceOp(String name, DateTime when, MaintenanceType type, String dataCenter, MaintenanceTask task) {
        _name = checkNotNull(name, "name");
        _when = checkNotNull(when, "when");
        _type = checkNotNull(type, "type");
        _dataCenter = dataCenter;
        _task = task;
    }

    String getName() {
        return _name;
    }

    /** Returns the earliest time this maintenance should occur. */
    DateTime getWhen() {
        return _when;
    }

    /** Returns whether this maintenance is on the table metadata or on the table data.  It may not be both. */
    MaintenanceType getType() {
        return _type;
    }

    /** Returns the data center the maintenance should be performed in, if this maintenance is on table data. */
    String getDataCenter() {
        return _dataCenter;
    }

    MaintenanceTask getTask() {
        return _task;
    }

    void clearTask() {
        _task = null;
    }

    @Override
    public int compareTo(MaintenanceOp o) {
        return _when.compareTo(o.getWhen());
    }

    @Override
    public String toString() {
        return _name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof MaintenanceOp)) {
            return false;
        }
        MaintenanceOp that = (MaintenanceOp) o;
        return _name.equals(that._name) &&
                _when.equals(that._when) &&
                _type == that._type &&
                Objects.equal(_dataCenter, that._dataCenter);
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(_name, _when, _type, _dataCenter);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy