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   * Defines the protocol used on the client side to abstract communication to the TSO server
24   */
25  public interface TSOProtocol {
26  
27      /**
28       * Returns the epoch of the current TSO server. Used in HA mode.
29       *
30       * @return the epoch.
31       */
32      long getEpoch();
33  
34      /**
35       * Returns a new timestamp assigned by on the server-side
36       * @return the newly assigned timestamp as a future. If an error was detected, the future will contain a
37       * corresponding protocol exception
38       * see org.apache.omid.tso.TimestampOracle
39       * see org.apache.omid.tso.TSOServer
40       */
41      TSOFuture<Long> getNewStartTimestamp();
42  
43      /**
44       * Returns the result of the conflict detection made on the server-side for the specified transaction
45       * @param transactionId
46       *          the transaction to check for conflicts
47       * @param writeSet
48       *          the writeSet of the transaction, which includes all the modified cells
49       * @return the commit timestamp as a future if the transaction was committed. If the transaction was aborted due
50       * to conflicts with a concurrent transaction, the future will include an AbortException. If an error was detected,
51       * the future will contain a corresponding protocol exception
52       * see org.apache.omid.tso.TimestampOracle
53       * see org.apache.omid.tso.TSOServer
54       */
55      TSOFuture<Long> commit(long transactionId, Set<? extends CellId> writeSet);
56  
57      /**
58       * Closes the communication with the TSO server
59       * @return nothing. If an error was detected, the future will contain a corresponding protocol exception
60       */
61      TSOFuture<Void> close();
62  
63  }