| | |
| | | |
| | | |
| | | /** |
| | | * The database container holding this index database. |
| | | * The database entryContainer holding this index database. |
| | | */ |
| | | private Container container; |
| | | private EntryContainer entryContainer; |
| | | |
| | | /** |
| | | * The JE database configuration. |
| | |
| | | private DatabaseConfig dbConfig; |
| | | |
| | | /** |
| | | * The name of the database within the container. |
| | | * The name of the database within the entryContainer. |
| | | */ |
| | | private String name; |
| | | |
| | |
| | | |
| | | /** |
| | | * Create a new index object. |
| | | * @param container The database container holding this index. |
| | | * @param name The name of the index database within the container. |
| | | * @param entryContainer The database entryContainer holding this index. |
| | | * @param name The name of the index database within the entryContainer. |
| | | * @param indexer The indexer object to construct index keys from LDAP |
| | | * attribute values. |
| | | * @param indexEntryLimit The configured limit on the number of entry IDs |
| | |
| | | * @param cursorEntryLimit The configured limit on the number of entry IDs |
| | | * that may be retrieved by cursoring through an index. |
| | | */ |
| | | public Index(Container container, String name, Indexer indexer, |
| | | public Index(EntryContainer entryContainer, String name, Indexer indexer, |
| | | int indexEntryLimit, int cursorEntryLimit) |
| | | { |
| | | this.container = container; |
| | | this.entryContainer = entryContainer; |
| | | this.name = name; |
| | | this.indexer = indexer; |
| | | this.comparator = indexer.getComparator(); |
| | |
| | | |
| | | /** |
| | | * Get a handle to the database. It returns a per-thread handle to avoid |
| | | * any thread contention on the database handle. The container is |
| | | * any thread contention on the database handle. The entryContainer is |
| | | * responsible for closing all handles. |
| | | * |
| | | * @return A database handle. |
| | |
| | | Database database = threadLocalDatabase.get(); |
| | | if (database == null) |
| | | { |
| | | database = container.openDatabase(dbConfig, name); |
| | | database = entryContainer.openDatabase(dbConfig, name); |
| | | threadLocalDatabase.set(database); |
| | | } |
| | | return database; |
| | |
| | | DatabaseEntry entryIDData = entryID.getDatabaseEntry(); |
| | | DatabaseEntry data = new DatabaseEntry(); |
| | | |
| | | status = Container.read(getDatabase(), txn, key, data, lockMode); |
| | | status = EntryContainer.read(getDatabase(), txn, key, data, lockMode); |
| | | |
| | | if (status == OperationStatus.SUCCESS) |
| | | { |
| | |
| | | |
| | | byte[] after = entryIDList.toDatabase(); |
| | | data.setData(after); |
| | | Container.put(getDatabase(), txn, key, data); |
| | | EntryContainer.put(getDatabase(), txn, key, data); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Container.put(getDatabase(), txn, key, entryIDData); |
| | | EntryContainer.put(getDatabase(), txn, key, entryIDData); |
| | | } |
| | | } |
| | | |
| | |
| | | LockMode lockMode = LockMode.RMW; |
| | | DatabaseEntry data = new DatabaseEntry(); |
| | | |
| | | status = Container.read(getDatabase(), txn, key, data, lockMode); |
| | | status = EntryContainer.read(getDatabase(), txn, key, data, lockMode); |
| | | |
| | | if (status == OperationStatus.SUCCESS) |
| | | { |
| | |
| | | if (after == null) |
| | | { |
| | | // No more IDs, so remove the key |
| | | Container.delete(getDatabase(), txn, key); |
| | | EntryContainer.delete(getDatabase(), txn, key); |
| | | } |
| | | else |
| | | { |
| | | data.setData(after); |
| | | Container.put(getDatabase(), txn, key, data); |
| | | EntryContainer.put(getDatabase(), txn, key, data); |
| | | } |
| | | } |
| | | } |
| | |
| | | LockMode lockMode = LockMode.DEFAULT; |
| | | DatabaseEntry data = new DatabaseEntry(); |
| | | |
| | | status = Container.read(getDatabase(), txn, key, data, lockMode); |
| | | status = EntryContainer.read(getDatabase(), txn, key, data, lockMode); |
| | | if (status == OperationStatus.SUCCESS) |
| | | { |
| | | EntryIDSet entryIDList = |
| | |
| | | { |
| | | OperationStatus status; |
| | | DatabaseEntry data = new DatabaseEntry(); |
| | | status = Container.read(getDatabase(), txn, key, data, lockMode); |
| | | status = EntryContainer.read(getDatabase(), txn, key, data, lockMode); |
| | | if (status != OperationStatus.SUCCESS) |
| | | { |
| | | return new EntryIDSet(key.getData(), null); |
| | |
| | | if (after == null) |
| | | { |
| | | // No more IDs, so remove the key. |
| | | Container.delete(getDatabase(), txn, key); |
| | | EntryContainer.delete(getDatabase(), txn, key); |
| | | } |
| | | else |
| | | { |
| | |
| | | entryLimitExceededCount++; |
| | | } |
| | | data.setData(after); |
| | | Container.put(getDatabase(), txn, key, data); |
| | | EntryContainer.put(getDatabase(), txn, key, data); |
| | | } |
| | | } |
| | | |