All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.journal.IConcurrencyManager 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

 */
/*
 * Created on Feb 19, 2008
 */

package com.bigdata.journal;

import java.util.Collection;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;

import com.bigdata.counters.ICounterSetAccess;
import com.bigdata.service.IServiceShutdown;

/**
 * Interface for managing concurrent access to resources (indices).
 * 
 * @see AbstractTask, Base class for tasks to be executed with concurrency
 *      control.
 * 
 * @author Bryan Thompson
 */
public interface IConcurrencyManager extends IServiceShutdown, ICounterSetAccess {

    /**
     * The client side of the transaction manager.
     */
    public ILocalTransactionManager getTransactionManager();
    
//    /**
//     * The server side of the transaction manager.
//     */
//    public ITransactionManager getTransactionService();
    
    /**
     * The object used to manage local resources.
     */
    public IResourceManager getResourceManager();
    
    /**
     * Normal shutdown - running tasks will run to completion, but no new tasks
     * will start.
     * 
     * @see #shutdownNow()
     */
    @Override
    public void shutdown();

    /**
     * Immediate shutdown - running tasks are cancelled rather than being
     * permitted to complete.
     * 
     * @see #shutdown()
     */
    @Override
    public void shutdownNow();

    /**
     * Submit a task (asynchronous). Tasks will execute asynchronously in the
     * appropriate thread pool with as much concurrency as possible.
     * 

* Note: Unisolated write tasks will NOT return before the next group commit * (exceptions may be thrown if the task fails or the commit fails). The * purpose of group commits is to provide higher throughput for writes on * the store by only syncing the data to disk periodically rather than after * every write. Group commits are scheduled by the {@link #commitService}. * The trigger conditions for group commits may be configured using * {@link ConcurrencyManager.Options}. If you are using the store in a * single threaded context then you may set * {@link Options#WRITE_SERVICE_CORE_POOL_SIZE} to ONE (1) which has the * effect of triggering commit immediately after each unisolated write. * However, note that you can not sync a disk more than ~ 30-40 times per * second so your throughput in write operations per second will never * exceed that for a single-threaded application writing on a hard disk. * (Your mileage can vary if you are writing on a transient store or using a * durable medium other than disk). *

* Note: The isolated indices used by a read-write transaction are NOT * thread-safe. Therefore a partial order is imposed over concurrent tasks * for the same transaction that seek to read or write on * the same index(s). Full concurrency is allowed when different * transactions access the same index(s), but write-write conflicts MAY be * detected during commit processing. *

* Note: The following exceptions MAY be wrapped by {@link Future#get()} for * tasks submitted via this method: *

*
{@link ValidationError}
*
An unisolated write task was attempting to commit the write set for * a transaction but validation failed. You may retry the entire * transaction.
*
{@link InterruptedException}
*
A task was interrupted during execution and before the task had * completed normally. You MAY retry the task, but note that this exception * is also generated when tasks are cancelled when the journal is being * {@link #shutdown()} after the timeout has expired or * {@link #shutdownNow()}. In either of these cases the task will not be * accepted by the journal.
*
*
*
* * @param task * The task. * * @return The {@link Future} that may be used to resolve the outcome of the * task. * * @exception RejectedExecutionException * if task cannot be scheduled for execution (typically the * queue has a limited capacity and is full) * @exception NullPointerException * if task is null */ public FutureTask submit(AbstractTask task); /** * Executes the given tasks, returning a list of Futures holding their * status and results when all complete. Note that a completed task could * have terminated either normally or by throwing an exception. The results * of this method are undefined if the given collection is modified while * this operation is in progress. *

* Note: Contract is per {@link ExecutorService#invokeAll(Collection)} * * @param tasks * The tasks. * * @return Their {@link Future}s. * * @exception InterruptedException * if interrupted while waiting, in which case unfinished * tasks are cancelled. * @exception NullPointerException * if tasks or any of its elements are null * @exception RejectedExecutionException * if any task cannot be scheduled for execution */ public List> invokeAll(Collection> tasks) throws InterruptedException; /** * Executes the given tasks, returning a list of Futures holding their * status and results when all complete or the timeout expires, whichever * happens first. Note that a completed task could have terminated either * normally or by throwing an exception. The results of this method are * undefined if the given collection is modified while this operation is in * progress. *

* Note: Contract is based on * {@link ExecutorService#invokeAll(Collection, long, TimeUnit)} but only * the {@link Future}s of the submitted tasks are returned. * * @param tasks * The tasks. * * @return The {@link Future}s of all tasks that were * {@link #submit(AbstractTask) submitted} prior to the expiration * of the timeout. * * @exception InterruptedException * if interrupted while waiting, in which case unfinished * tasks are cancelled. * @exception NullPointerException * if tasks or any of its elements are null * @exception RejectedExecutionException * if any task cannot be scheduled for execution */ public List> invokeAll( Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException; /** * The service on which read-write tasks are executed. */ public WriteExecutorService getWriteService(); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy