blob: cecb0f32f082bd77fd8104d3fb490c44758b27d5 [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.giraph.ooc.persistence;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
/**
* Interface representing data accessor object (DAO) used as persistence layer
* in out-of-core mechanism.
* Note: any class implementing this interface should have one and only one
* constructor taking one and only one argument of type
* <code>ImmutableClassesGiraphConfiguration</code>
*/
public interface OutOfCoreDataAccessor {
/** Initialize the DAO */
void initialize();
/** Shut down the DAO */
void shutdown();
/**
* @return the number of threads involved in data persistence
*/
int getNumAccessorThreads();
/**
* Prepare a wrapper containing <code>DataInput</code> representation for a
* given thread involved in persistence for a given index chain for data.
*
* @param threadId id of the thread involved in persistence
* @param index index chain of the data to access the serialized data form
* @return the wrapper for <code>DataInput</code> representation of data
* @throws IOException
*/
DataInputWrapper prepareInput(int threadId, DataIndex index)
throws IOException;
/**
* Prepare a wrapper containing <code>DataOutput</code> representation for a
* given thread involved in persistence for a given index chain for data.
*
* @param threadId id of the thread involved in persistence
* @param index index chain of the data to access the serialized data form
* @param shouldAppend whether the <code>DataOutput</code> should be used for
* appending to already existing data for the given index
* or the <code>DataOutput</code> should create new
* instance to store serialized data
* @return the wrapper for <code>DataOutput</code> representation of data
* @throws IOException
*/
DataOutputWrapper prepareOutput(int threadId, DataIndex index,
boolean shouldAppend) throws IOException;
/**
* Whether the data for the given thread and index chain exists?
*
* @param threadId id of the thread involved in persistence
* @param index index chain used to access the data
* @return True if the data exists for the given index chain for the given
* thread, False otherwise
*/
boolean dataExist(int threadId, DataIndex index);
/** Interface to wrap <code>DataInput</code> */
interface DataInputWrapper {
/**
* @return the <code>DataInput</code>, should return the same instance
* every time it's called (not start from the beginning)
*/
DataInput getDataInput();
/**
* Finalize and close the <code>DataInput</code> used for persistence.
*
* @param deleteOnClose whether the source of <code>DataInput</code>
* should be deleted on closing/finalizing
* @return number of bytes read from <code>DataInput</code> since it was
* opened
*/
long finalizeInput(boolean deleteOnClose);
}
/** Interface to warp <code>DataOutput</code> */
interface DataOutputWrapper {
/**
* @return the <code>DataOutput</code>
*/
DataOutput getDataOutput();
/**
* Finalize and close the <code>DataOutput</code> used for persistence.
*
* @return number of bytes written to <code>DataOutput</code> since it was
* opened
*/
long finalizeOutput();
}
}