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