blob: 089559186213ba4972b5b2d8974966b9cc3871f8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.fluo.api.client;
import org.apache.fluo.api.data.Bytes;
import org.apache.fluo.api.data.Column;
import org.apache.fluo.api.exceptions.AlreadySetException;
/**
* Enables users to read and write to a Fluo table at certain point in time. TransactionBase extends
* {@link SnapshotBase} to include methods for writing to Fluo.
*
* @since 1.0.0
* @see AbstractTransactionBase
*/
public interface TransactionBase extends SnapshotBase {
/**
* Deletes the value at the given row and {@link Column}
*/
void delete(Bytes row, Column col);
/**
* Wrapper for {@link #delete(Bytes, Column)} that uses Strings. All String are encoded using
* UTF-8.
*/
void delete(CharSequence row, Column col);
/**
* Sets a value (in {@link Bytes}) at the given row and {@link Column}
*/
void set(Bytes row, Column col, Bytes value) throws AlreadySetException;
/**
* Wrapper for {@link #set(Bytes, Column, Bytes)} that uses Strings. All String are encoded using
* UTF-8.
*/
void set(CharSequence row, Column col, CharSequence value) throws AlreadySetException;
/**
* Sets a weak notification at the given row and {@link Column}
*/
void setWeakNotification(Bytes row, Column col);
/**
* Wrapper for {@link #setWeakNotification(Bytes, Column)} that uses Strings. All String are
* encoded using UTF-8.
*/
void setWeakNotification(CharSequence row, Column col);
/**
* Normally when a Fluo transaction reads data and does not write to it, it will not collide with
* other transactions making concurrent writes. When this method is called, all reads will acquire
* a read lock. These read locks cause collisions with transactions doing concurrent writes.
* However, multiple transactions can get concurrent read locks on the same row+col without
* colliding.
*
* <p>
* Scanning with read locks is not supported. Attempting to call {@code withReadLock().scanner()}
* will throw an {@link UnsupportedOperationException}. This is because there are an infinite
* amount of keys within a range and read locks can not be obtained on them all.
*
* <p>
* A transaction that only acquires read locks will do nothing at commit time. In this case no
* read locks are actually written and no collisions will ever occur.
*
* @since 1.2.0
*/
default SnapshotBase withReadLock() {
throw new UnsupportedOperationException("Read locks not supported by this implementation");
}
}