blob: 574091c2a58fb26dd0ce067d2c650aab76072713 [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.pig.backend.datastorage;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Map;
/**
* DataStorageElementDescriptor provides methods necessary to manage an
* element in a DataStorage.
*
*/
public interface ElementDescriptor extends
Comparable<ElementDescriptor> {
/** Available from getConfiguration as a String and getStatistics as a Long. */
public static final String BLOCK_SIZE_KEY = "pig.path.block.size";
/** Available from getConfiguration as a String and getStatistics as a Short. */
public static final String BLOCK_REPLICATION_KEY = "pig.path.block.replication";
/** Available from getStatistics as a Long. */
public static final String LENGTH_KEY = "pig.path.length";
/** Available from getStatistics as a Long. */
public static final String MODIFICATION_TIME_KEY = "pig.path.modification.time";
//
// TODO: more keys
//
public DataStorage getDataStorage();
/**
* Opens a stream onto which an entity can be written to.
*
* @param configuration information at the object level
* @return stream where to write
* @throws DataStorageException
*/
public OutputStream create(Properties configuration)
throws IOException;
public OutputStream create()
throws IOException;
/**
* Copy entity from an existing one, possibly residing in a
* different Data Storage.
*
* @param dstName name of entity to create
* @param dstConfiguration configuration for the new entity
* @param removeSrc if src entity needs to be removed after copying it
* @throws DataStorageException for instance, configuration
* information for new entity is not compatible with
* configuration information at the Data
* Storage level, user does not have privileges to read from
* source entity or write to destination storage...
*/
public void copy(ElementDescriptor dstName,
Properties dstConfiguration,
boolean removeSrc)
throws IOException;
public void copy(ElementDescriptor dstName,
boolean removeSrc)
throws IOException;
/**
* Open for read a given entity
*
* @param configuration
* @return entity to read from
* @throws DataStorageExecption e.g. entity does not exist...
*/
public InputStream open(Properties configuration) throws IOException;
public InputStream open() throws IOException;
/**
* Open an element in the Data Storage with support for random access
* (seek operations).
*
* @param configuration
* @return a seekable input stream
* @throws DataStorageException
*/
public SeekableInputStream sopen(Properties configuration)
throws IOException;
public SeekableInputStream sopen() throws IOException;
/**
* Checks whether the entity exists or not
*
* @param name of entity
* @return true if entity exists, false otherwise.
*/
public boolean exists() throws IOException;
/**
* Changes the name of an entity in the Data Storage
*
* @param newName new name of entity
* @throws DataStorageException
*/
public void rename(ElementDescriptor newName)
throws IOException;
/**
* Remove entity from the Data Storage.
*
* @throws DataStorageException
*/
public void delete() throws IOException;
/**
* Retrieve configuration information for entity
* @return configuration
*/
public Properties getConfiguration() throws IOException;
/**
* Update configuration information for this entity
*
* @param newConfig configuration
* @throws DataStorageException
*/
public void updateConfiguration(Properties newConfig)
throws IOException;
/**
* Defines whether the element is visible to users or
* contains system's metadata
* @return true if this is system file; false otherwise
*/
public boolean systemElement();
/**
* List entity statistics
* @return DataStorageProperties
*/
public Map<String, Object> getStatistics() throws IOException;
}