com.bigdata.journal.IDistributedTransactionService Maven / Gradle / Ivy
/**
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
[email protected]
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.bigdata.journal;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.BrokenBarrierException;
import com.bigdata.service.IBigdataFederation;
import com.bigdata.service.IDataService;
import com.bigdata.service.ITxCommitProtocol;
/**
* Extended interface for distributed 2-phase transactions for an
* {@link IBigdataFederation}.
*
* @author Bryan Thompson
*/
public interface IDistributedTransactionService extends ITransactionService {
/**
* An {@link IDataService} MUST invoke this method before permitting an
* operation isolated by a read-write transaction to execute with access to
* the named resources (this applies only to distributed databases). The
* declared resources are used in the commit phase of the read-write tx to
* impose a partial order on commits. That partial order guarantees that
* commits do not deadlock in contention for the same resources.
*
* @param tx
* The transaction identifier.
* @param dataService
* The {@link UUID} an {@link IDataService} on which the
* transaction will write.
* @param resource
* An array of the named resources which the transaction will use
* on that {@link IDataService} (this may be different for each
* operation submitted by that transaction to the
* {@link IDataService}).
*
* @return {@link IllegalStateException} if the transaction is not an active
* read-write transaction.
*/
public void declareResources(long tx, UUID dataService, String[] resource)
throws IOException;
/**
* Callback by an {@link IDataService} participating in a two phase commit
* for a distributed transaction. The {@link ITransactionService} will wait
* until all {@link IDataService}s have prepared. It will then choose a
* commitTime for the transaction and return that value to each
* {@link IDataService}.
*
* Note: If this method throws ANY exception then the task MUST cancel the
* commit, discard the local write set of the transaction, and note that the
* transaction is aborted in its local state.
*
* @param tx
* The transaction identifier.
* @param dataService
* The {@link UUID} of the {@link IDataService} which sent the
* message.
*
* @return The assigned commit time.
*
* @throws InterruptedException
* @throws BrokenBarrierException
* @throws IOException
* if there is an RMI problem.
*/
public long prepared(long tx, UUID dataService) throws IOException,
InterruptedException, BrokenBarrierException;
/**
* Sent by a task participating in a distributed commit of a transaction
* when the task has successfully committed the write set of the transaction
* on the live journal of the local {@link IDataService}. If this method
* returns false
then the distributed commit has failed and
* the task MUST rollback the live journal to the previous commit point. If
* the return is true
then the distributed commit was
* successful and the task should halt permitting the {@link IDataService}
* to return from the {@link ITxCommitProtocol#prepare(long, long)} method.
*
* @param tx
* The transaction identifier.
* @param dataService
* The {@link UUID} of the {@link IDataService} which sent the
* message.
*
* @return true
if the distributed commit was successfull and
* false
if there was a problem.
*
* @throws IOException
*/
public boolean committed(long tx, UUID dataService) throws IOException,
InterruptedException, BrokenBarrierException;
}