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.tso.client;
19  
20  import java.util.Set;
21  
22  
23  /**
24   * Defines the protocol used on the client side to abstract communication to the TSO server
25   */
26  public interface TSOProtocol {
27  
28      /**
29       * Returns the epoch of the current TSO server. Used in HA mode.
30       *
31       * @return the epoch.
32       */
33      long getEpoch();
34  
35      /**
36       * Returns a new timestamp assigned by on the server-side
37       * @return the newly assigned timestamp as a future. If an error was detected, the future will contain a
38       * corresponding protocol exception
39       * see org.apache.omid.tso.TimestampOracle
40       * see org.apache.omid.tso.TSOServer
41       */
42      TSOFuture<Long> getNewStartTimestamp();
43  
44      /**
45       * Returns the result of the conflict detection made on the server-side for the specified transaction
46       * @param transactionId
47       *          the transaction to check for conflicts
48       * @param writeSet
49       *          the writeSet of the transaction, which includes all the modified cells
50       * @return the commit timestamp as a future if the transaction was committed. If the transaction was aborted due
51       * to conflicts with a concurrent transaction, the future will include an AbortException. If an error was detected,
52       * the future will contain a corresponding protocol exception
53       * see org.apache.omid.tso.TimestampOracle
54       * see org.apache.omid.tso.TSOServer
55       */
56      TSOFuture<Long> commit(long transactionId, Set<? extends CellId> writeSet);
57  
58      /**
59       * Returns the result of the conflict detection made on the server-side for the specified transaction
60       * @param transactionId
61       *          the transaction to check for conflicts
62       * @param writeSet
63       *          the writeSet of the transaction, which includes all the modified cells
64       * @param conflictFreeWriteSet
65       *          the conflict free writeSet of the transaction, needed only for table access information.
66       * @return the commit timestamp as a future if the transaction was committed. If the transaction was aborted due
67       * to conflicts with a concurrent transaction, the future will include an AbortException. If an error was detected,
68       * the future will contain a corresponding protocol exception
69       * see org.apache.omid.tso.TimestampOracle
70       * see org.apache.omid.tso.TSOServer
71       */
72      TSOFuture<Long> commit(long transactionId, Set<? extends CellId> writeSet, Set<? extends CellId> conflictFreeWriteSet);
73  
74      /**
75       * Returns a new fence timestamp assigned by on the server-side
76       * @param tableId
77       *          the table to create fence for.
78       * @return the newly assigned timestamp as a future. If an error was detected, the future will contain a
79       * corresponding protocol exception
80       * see org.apache.omid.tso.TimestampOracle
81       * see org.apache.omid.tso.TSOServer
82       */
83      TSOFuture<Long> getFence(long tableId);
84  
85      /**
86       * Closes the communication with the TSO server
87       * @return nothing. If an error was detected, the future will contain a corresponding protocol exception
88       */
89      TSOFuture<Void> close();
90  
91      /**
92       * checks if tso is low latency protocol
93       * @return
94       */
95      boolean isLowLatency();
96  
97      void setConflictDetectionLevel(OmidClientConfiguration.ConflictDetectionLevel conflictDetectionLevel);
98  
99      OmidClientConfiguration.ConflictDetectionLevel getConflictDetectionLevel();
100 }