blob: 95e0027060e15d3bf60142a8babf6347106c0172 [file] [log] [blame]
package net.onrc.onos.core.datastore;
/**
* Interface for a class to represent a Table in a Key-Value store
*/
public interface IKVTable {
/**
* Version number which represents that the object does not exist, or has
* never been read the DB before.
*/
public long VERSION_NONEXISTENT();
/**
* Interface for a class to represent an entry in Table.
*/
public static interface IKVEntry {
public byte[] getKey();
public byte[] getValue();
public long getVersion();
}
/**
* @return ID to identify this table.
*/
public IKVTableID getTableId();
/**
* Create a Key-Value entry on table.
*
* @param key
* @param value
* @return version of the created entry
* @throws ObjectExistsException
*/
public long create(byte[] key, byte[] value) throws ObjectExistsException;
/**
* Create a Key-Value entry on table, without existence checking.
*
* @param key
* @param value
* @return version of the created entry
*/
public long forceCreate(byte[] key, byte[] value);
/**
* Read a Key-Value entry from table.
*
* @param key
* @return Corresponding {@link IKVEntry}
* @throws ObjectDoesntExistException
*/
public IKVEntry read(byte[] key) throws ObjectDoesntExistException;
/**
* Update an existing Key-Value entry in table.
*
* @param key
* @param value
* @param version expected version in the data store
* @return version after update
* @throws ObjectDoesntExistException
* @throws WrongVersionException
*/
public long update(byte[] key, byte[] value, long version)
throws ObjectDoesntExistException, WrongVersionException;
/**
* Update an existing Key-Value entry in table, without checking version.
*
* @param key
* @param value
* @return version after update
* @throws ObjectDoesntExistException
*/
public long update(byte[] key, byte[] value)
throws ObjectDoesntExistException;
/**
* Remove an existing Key-Value entry in table
*
* @param key
* @param version expected version in the data store
* @return version of removed object
* @throws ObjectDoesntExistException
* @throws WrongVersionException
*/
public long delete(byte[] key, long version)
throws ObjectDoesntExistException, WrongVersionException;
/**
* Remove a Key-Value entry in table
*
* @param key
* @return version of removed object or VERSION_NONEXISTENT, if it did not exist.
*/
public long forceDelete(byte[] key);
/**
* Get all the entries in table.
*
* @return entries in this table.
*/
public Iterable<IKVEntry> getAllEntries();
}