package net.jxta.impl.cm; import java.io.IOException; import java.util.List; import net.jxta.peer.PeerID; /** * Interface for all storage backends of SrdiIndex. In addition to correctly implementing this interface, all * implementations should also provide a constructor with the same signature as {@link net.jxta.impl.cm.SrdiIndex#SrdiIndex(net.jxta.peergroup.PeerGroup, String)} and * a static method matching {@link net.jxta.impl.cm.SrdiIndex#clearSrdi(net.jxta.peergroup.PeerGroup)}. Classes not meeting these requirements cannot be used as * backends and SrdiIndex will default to using {@link net.jxta.impl.cm.XIndiceSrdiIndexBackend}. * <p> * All implementations are expected to pass the full test suite specified in {@link net.jxta.impl.cm.AbstractSrdiIndexBackendTest} and pass the concurrency tests * in {@link net.jxta.impl.cm.AbstractSrdiIndexBackendLoadTest}. Load testing can be conducted using {@link net.jxta.impl.cm.AbstractSrdiIndexBackendLoadTest}, * which is useful for comparative benchmarking with other implementations. * <p> * In order to specify an alternative SrdiIndexBackend from the default, change the system property {@link net.jxta.impl.cm.SrdiIndex#SRDI_INDEX_BACKEND_SYSPROP} to * the full class name of the required alternative, or construct SrdiIndex directly using {@link net.jxta.impl.cm.SrdiIndex#SrdiIndex(SrdiIndexBackend)}. */ public interface SrdiIndexBackend { /** * Add a peer to the index, such as queries matching the specified primary key, attribute and value will return * this peer as part of their result set. * * @param primaryKey primary key * @param attribute Attribute String to query on. * @param value value of the attribute string * @param pid peerid reference * @param expiration expiration associated with this entry relative time in milliseconds. * @throws IOException if there was a failure writing the entry to the index */ void add(String primaryKey, String attribute, String value, PeerID pid, long expiration) throws IOException; /** * retrieves all entries exactly matching the provided primary key, secondary key and value. * * @param pkey primary key * @param skey secondary key * @param value value * @return List of Entry objects */ List<SrdiIndex.Entry> getRecord(String pkey, String skey, String value) throws IOException; /** * Marks all records added to the index for the specified peer ID for garbage collection. If * add is subsequently called before garbage collection occurs, this removal request will be * canceled. */ void remove(PeerID pid) throws IOException; /** * Searches the index for all peers matching the specified primary key, attribute and value query * string. * * @param primaryKey the primary key for the search. * @param attribute the attribute for the search. If this is null, the search will return all peer * IDs who have records under the primary key that have not expired. * @param value the value for the search. This can include a wildcard at the start, end, or middle * of the string. e.g. "*match", "match*", "*match*", "match*match". * @param threshold the maximum number of results to return. * @return a list of peer IDs who have records matching the specified criteria of this query. */ List<PeerID> query(String primaryKey, String attribute, String value, int threshold) throws IOException; /** * Empties the index completely. */ void clear() throws IOException; /** * Triggers a clean-up of the index, removing all records whose expiry has passed. */ void garbageCollect() throws IOException; /** * Terminates this index, releasing any associated resources. */ void stop(); }