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

com.sleepycat.je.CommitToken Maven / Gradle / Ivy

The newest version!
/*-
 * Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle Berkeley
 * DB Java Edition made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle Berkeley DB Java Edition for a copy of the
 * license and additional information.
 */

package com.sleepycat.je;

import java.io.Serializable;
import java.util.UUID;

import com.sleepycat.je.utilint.VLSN;

/**
 * Defines an opaque token that can be used to identify a specific transaction
 * commit in a replicated environment. It's unique relative to its environment.
 * 

* Since CommitTokens identify a point in the serialized transaction schedule * created on the master, it's meaningful to compare commit tokens, * as described in the {@link #compareTo(CommitToken)} method below. * CommitTokens are obtained from {@link Transaction#getCommitToken()} * * @see com.sleepycat.je.rep.CommitPointConsistencyPolicy */ public class CommitToken implements Serializable, Comparable { private static final long serialVersionUID = 1L; private final UUID repenvUUID; private final long vlsn; /** * @hidden * For internal use only. * Creates a CommitToken suitable for use in a consistency policy. * * @param repenvUUID identifies the replicated environment associated with * the vlsn * @param vlsn the vlsn representing the state of the database. */ public CommitToken(UUID repenvUUID, long vlsn) { if (repenvUUID == null) { throw EnvironmentFailureException.unexpectedState ("The UUID must not be null"); } if (vlsn == VLSN.NULL_VLSN_SEQUENCE) { throw EnvironmentFailureException.unexpectedState ("The vlsn must not be null"); } this.repenvUUID = repenvUUID; this.vlsn = vlsn; } public UUID getRepenvUUID() { return repenvUUID; } public long getVLSN() { return vlsn; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((repenvUUID == null) ? 0 : repenvUUID.hashCode()); result = prime * result + (int) (vlsn ^ (vlsn >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof CommitToken)) { return false; } CommitToken other = (CommitToken) obj; if (repenvUUID == null) { if (other.repenvUUID != null) { return false; } } else if (!repenvUUID.equals(other.repenvUUID)) { return false; } if (vlsn != other.vlsn) { return false; } return true; } /** * Implements the Comparable interface. Note that it's not meaningful to * compare commit tokens across environments, since they represent * states in unrelated serialized transaction streams. *

* CommitToken(1) < CommitToken(2) implies that CommitToken(1) represents * a state of the database that preceded the state defined by * CommitToken(2). * @throws IllegalArgumentException if two tokens from different * environments are compared. */ public int compareTo(CommitToken other) { if (! repenvUUID.equals(other.repenvUUID)) { throw new IllegalArgumentException ("Comparisons across environments are not meaningful. " + "This environment: " + repenvUUID + " other environment: " + other.getRepenvUUID()); } final long compare = vlsn - other.vlsn; return (compare < 0) ? -1 : ((compare == 0) ? 0 : 1); } @Override public String toString() { return "UUID: " + repenvUUID + " VLSN: " + vlsn; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy