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 com.google.common.base.Optional;
21  
22  /**
23   * This interface defines the transaction state & 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       * Forces the transaction to rollback, even when there's an intention
51       * to commit it.
52       */
53      void setRollbackOnly();
54  
55      /**
56       * Returns whether the transaction was marked for rollback or not
57       * @return whether the transaction is marked for rollback or not
58       */
59      boolean isRollbackOnly();
60  
61  
62      /**
63       * Set of methods to attach some metadata to a transaction object. One example
64       * of such metadata are notifications
65       *
66       *
67       * Expects they metadata stored under key "key" to be of the "Set" type,
68       * append "value" to the existing set or creates a new one
69       */
70      void appendMetadata(String key, Object value);
71  
72      void setMetadata(String key, Object value);
73  
74      Optional<Object> getMetadata(String key);
75  }
76