1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 package org.apache.omid.transaction; 19 20 import org.apache.phoenix.thirdparty.com.google.common.base.Optional; 21 22 /** 23 * This interface defines the transaction state and behavior exposed to users. 24 */ 25 public interface Transaction { 26 27 enum Status { 28 RUNNING, COMMITTED, ROLLEDBACK, COMMITTED_RO 29 } 30 31 /** 32 * Returns the transaction identifier 33 * @return the transaction identifier 34 */ 35 long getTransactionId(); 36 37 /** 38 * Returns the epoch given by the TSOServer 39 * @return the transaction's TSOServer epoch 40 */ 41 long getEpoch(); 42 43 /** 44 * Returns the current transaction {@link Status} 45 * @return transaction status 46 */ 47 Status getStatus(); 48 49 /** 50 * Returns the read timestamp for this transaction. 51 * @return read timestamp 52 */ 53 long getReadTimestamp(); 54 55 /** 56 * Returns the write timestamp for this transaction. 57 * @return write timestamp 58 */ 59 60 long getWriteTimestamp(); 61 62 /** 63 * Forces the transaction to rollback, even when there's an intention 64 * to commit it. 65 */ 66 void setRollbackOnly(); 67 68 /** 69 * Returns whether the transaction was marked for rollback or not 70 * @return whether the transaction is marked for rollback or not 71 */ 72 boolean isRollbackOnly(); 73 74 75 /** 76 * Set of methods to attach some metadata to a transaction object. One example 77 * of such metadata are notifications 78 * 79 * 80 * Expects they metadata stored under key "key" to be of the "Set" type, 81 * append "value" to the existing set or creates a new one 82 * @param key a key, like in hashtable 83 * @param value a value to associate with the given key 84 */ 85 void appendMetadata(String key, Object value); 86 87 88 void setMetadata(String key, Object value); 89 90 Optional<Object> getMetadata(String key); 91 92 /** 93 * Returns whether the transaction was created by a lowLatency TransactionalManager 94 * @return whether the transaction was created by a lowLatency TransactionalManager 95 */ 96 boolean isLowLatency(); 97 } 98