/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Portions Copyright 2006-2007 Sun Microsystems, Inc.
*/
package org.opends.server.api;
import java.util.List;
import java.util.concurrent.locks.Lock;
import org.opends.server.config.ConfigException;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
import org.opends.server.types.InitializationException;
import org.opends.server.types.LockType;
import org.opends.server.admin.std.server.EntryCacheCfg;
/**
* This class defines the set of methods that must be implemented by a
* Directory Server entry cache. Note that components accessing the
* entry cache must not depend on any particular behavior. For
* example, if a call is made to putEntry to store an
* entry in the cache, there is no guarantee that immediately calling
* getEntry will be able to retrieve it. There are
* several potential reasons for this, including:
*
putEntry and getEntry
* calls.putEntry and getEntry calls.true if the entry cache currently contains
* the entry with the specified DN, or false
* if not.
*/
public abstract boolean containsEntry(DN entryDN);
/**
* Retrieves the entry with the specified DN from the cache. The
* caller should have already acquired a read or write lock for the
* entry if such protection is needed.
*
* @param entryDN The DN of the entry to retrieve.
*
* @return The requested entry if it is present in the cache, or
* null if it is not present.
*/
public abstract Entry getEntry(DN entryDN);
/**
* Retrieves the entry ID for the entry with the specified DN from
* the cache. The caller should have already acquired a read or
* write lock for the entry if such protection is needed.
*
* @param entryDN The DN of the entry for which to retrieve the
* entry ID.
*
* @return The entry ID for the requested entry, or -1 if it is not
* present in the cache.
*/
public abstract long getEntryID(DN entryDN);
/**
* Retrieves the entry with the specified DN from the cache,
* obtaining a lock on the entry before it is returned. If the
* entry is present in the cache, then a lock will be obtained for
* that entry and appended to the provided list before the entry is
* returned. If the entry is not present, then no lock will be
* obtained.
*
* @param entryDN The DN of the entry to retrieve.
* @param lockType The type of lock to obtain (it may be
* NONE).
* @param lockList The list to which the obtained lock will be
* added (note that no lock will be added if the
* lock type was NONE).
*
* @return The requested entry if it is present in the cache, or
* null if it is not present.
*/
public abstract Entry getEntry(DN entryDN, LockType lockType,
ListNONE).
* @param lockList The list to which the obtained lock will be
* added (note that no lock will be added if the
* lock type was NONE).
*
* @return The requested entry if it is present in the cache, or
* null if it is not present.
*/
public abstract Entry getEntry(Backend backend, long entryID,
LockType lockType,
Listfalse if an existing entry or some other
* problem prevented the method from completing
* successfully, or true if there was no
* conflict and the entry was either stored or the cache
* determined that this entry should never be cached for
* some reason.
*/
public abstract boolean putEntryIfAbsent(Entry entry,
Backend backend,
long entryID);
/**
* Removes the specified entry from the cache.
*
* @param entryDN The DN of the entry to remove from the cache.
*/
public abstract void removeEntry(DN entryDN);
/**
* Removes all entries from the cache. The cache should still be
* available for future use.
*/
public abstract void clear();
/**
* Removes all entries from the cache that are associated with the
* provided backend.
*
* @param backend The backend for which to flush the associated
* entries.
*/
public abstract void clearBackend(Backend backend);
/**
* Removes all entries from the cache that are below the provided
* DN.
*
* @param baseDN The base DN below which all entries should be
* flushed.
*/
public abstract void clearSubtree(DN baseDN);
/**
* Attempts to react to a scenario in which it is determined that
* the system is running low on available memory. In this case, the
* entry cache should attempt to free some memory if possible to try
* to avoid out of memory errors.
*/
public abstract void handleLowMemory();
}