mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Matthew Swift
18.16.2014 ce1626b90b749055e28fdfa68ed3ae6de305a64f
OPENDJ-1602 (CR-5566) New pluggable storage based backend

Minor code cleanup of VLV indexing:

* remove unused code
* align IndexBuffer method and class naming.

2 files modified
77 ■■■■ changed files
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/IndexBuffer.java 14 ●●●● patch | view | raw | blame | history
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/VLVIndex.java 63 ●●●●● patch | view | raw | blame | history
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/IndexBuffer.java
@@ -57,8 +57,8 @@
      new LinkedHashMap<Index, TreeMap<ByteString, BufferedIndexValues>>();
  /** The buffered records stored as a set of buffered VLV values for each index. */
  private final LinkedHashMap<VLVIndex, BufferedVLVValues> bufferedVLVIndexes =
      new LinkedHashMap<VLVIndex, BufferedVLVValues>();
  private final LinkedHashMap<VLVIndex, BufferedVLVIndexValues> bufferedVLVIndexes =
      new LinkedHashMap<VLVIndex, BufferedVLVIndexValues>();
  /** A simple class representing a pair of added and deleted indexed IDs. */
  static class BufferedIndexValues
@@ -114,7 +114,7 @@
  }
  /** A simple class representing a pair of added and deleted VLV values. */
  static class BufferedVLVValues
  static class BufferedVLVIndexValues
  {
    private TreeSet<SortValues> addedValues;
    private TreeSet<SortValues> deletedValues;
@@ -182,12 +182,12 @@
   * @return The buffered VLV values or <code>null</code> if there are
   * no buffered VLV values for the specified VLV index.
   */
  public BufferedVLVValues getVLVIndex(VLVIndex vlvIndex)
  BufferedVLVIndexValues getBufferedVLVIndexValues(VLVIndex vlvIndex)
  {
    BufferedVLVValues bufferedValues = bufferedVLVIndexes.get(vlvIndex);
    BufferedVLVIndexValues bufferedValues = bufferedVLVIndexes.get(vlvIndex);
    if (bufferedValues == null)
    {
      bufferedValues = new BufferedVLVValues();
      bufferedValues = new BufferedVLVIndexValues();
      bufferedVLVIndexes.put(vlvIndex, bufferedValues);
    }
    return bufferedValues;
@@ -245,7 +245,7 @@
    for (VLVIndex vlvIndex : entryContainer.getVLVIndexes())
    {
      BufferedVLVValues bufferedVLVValues = bufferedVLVIndexes.remove(vlvIndex);
      BufferedVLVIndexValues bufferedVLVValues = bufferedVLVIndexes.remove(vlvIndex);
      if (bufferedVLVValues != null)
      {
        vlvIndex.updateIndex(txn, bufferedVLVValues.addedValues, bufferedVLVValues.deletedValues);
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/VLVIndex.java
@@ -255,24 +255,6 @@
  /**
   * Update the vlvIndex for a new entry.
   *
   * @param txn A database transaction, or null if none is required.
   * @param entryID     The entry ID.
   * @param entry       The entry to be indexed.
   * @return True if the entry ID for the entry are added. False if
   *         the entry ID already exists.
   * @throws StorageRuntimeException If an error occurs in the JE database.
   * @throws DirectoryException If a Directory Server error occurs.
   */
  public boolean addEntry(WriteableStorage txn, EntryID entryID, Entry entry)
      throws StorageRuntimeException, DirectoryException
  {
    return shouldInclude(entry)
        && insertValues(txn, entryID.longValue(), entry);
  }
  /**
   * Update the vlvIndex for a new entry.
   *
   * @param buffer      The index buffer to buffer the changes.
   * @param entryID     The entry ID.
   * @param entry       The entry to be indexed.
@@ -287,7 +269,7 @@
    if (shouldInclude(entry))
    {
      final SortValues sortValues = new SortValues(entryID, entry, sortOrder);
      buffer.getVLVIndex(this).addValues(sortValues);
      buffer.getBufferedVLVIndexValues(this).addValues(sortValues);
      return true;
    }
    return false;
@@ -309,7 +291,7 @@
    if (shouldInclude(entry))
    {
      final SortValues sortValues = new SortValues(entryID, entry, sortOrder);
      buffer.getVLVIndex(this).deleteValues(sortValues);
      buffer.getBufferedVLVIndexValues(this).deleteValues(sortValues);
      return true;
    }
    return false;
@@ -476,47 +458,6 @@
    return pos >= 0;
  }
  private boolean insertValues(WriteableStorage txn, long entryID, Entry entry)
      throws StorageRuntimeException, DirectoryException
  {
    ByteString[] values = getSortValues(entry);
    AttributeType[] types = getSortTypes();
    ByteString key = encodeKey(entryID, values, types);
    SortValuesSet sortValuesSet = getSortValuesSet(txn, key, true);
    boolean success = sortValuesSet.add(entryID, values, types);
    int newSize = sortValuesSet.size();
    if(newSize >= sortedSetCapacity)
    {
      SortValuesSet splitSortValuesSet = sortValuesSet.split(newSize / 2);
      put(txn, splitSortValuesSet); // splitAfter
      put(txn, sortValuesSet); // after
      if(logger.isTraceEnabled())
      {
        logger.trace("SortValuesSet with key %s has reached" +
            " the entry size of %d. Spliting into two sets with " +
            " keys %s and %s.", splitSortValuesSet.getKeySortValues(),
                                newSize, sortValuesSet.getKeySortValues(),
                                splitSortValuesSet.getKeySortValues());
      }
    }
    else
    {
      ByteString after = sortValuesSet.toByteString();
      put(txn, key, after);
      // TODO: What about phantoms?
    }
    if(success)
    {
      count.getAndIncrement();
    }
    return success;
  }
  private void put(WriteableStorage txn, SortValuesSet set) throws DirectoryException
  {
    put(txn, set.getKeyBytes(), set.toByteString());