View Javadoc

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