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

boli
27.58.2007 ffb9044301d1c169f934e0adf4f473e99da39a47
opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java
@@ -257,9 +257,32 @@
              if (index.read(txn, dbKey, dbData, LockMode.RMW) ==
                   OperationStatus.SUCCESS)
              {
                if (dbData.getSize() == 0)
                if (dbData.getSize() == 8 &&
                    (dbData.getData()[0] & 0x80) == 0x80)
                {
                  // Entry limit already exceeded.
                  // Entry limit already exceeded. Just update the
                  // undefined size assuming no overlap will occur between
                  // the add values and the longs in the DB.
                  long undefinedSize =
                   JebFormat.entryIDUndefinedSizeFromDatabase(dbData.getData());
                  for(Longs l : addValues)
                  {
                    undefinedSize += l.size();
                  }
                  if(replaceExisting)
                  {
                    for(Longs l : delValues)
                    {
                      undefinedSize -= l.size();
                    }
                  }
                  byte[] undefinedSizeBytes =
                      JebFormat.entryIDUndefinedSizeToDatabase(undefinedSize);
                  dbData.setData(undefinedSizeBytes);
                  index.put(txn, dbKey, dbData);
                  break writeMergedValue;
                }
                merged.decode(dbData.getData());
@@ -281,7 +304,10 @@
            if (merged.size() > entryLimit)
            {
              index.writeKey(txn, dbKey, new EntryIDSet());
              byte[] undefinedSizeBytes =
                  JebFormat.entryIDUndefinedSizeToDatabase(merged.size());
              dbData.setData(undefinedSizeBytes);
              index.put(txn, dbKey, dbData);
            }
            else
            {