Class Repository

java.lang.Object
com.netscape.cmscore.dbs.Repository
All Implemented Interfaces:
IRepository
Direct Known Subclasses:
CertificateRepository, ReplicaIDRepository, RequestRepository

public abstract class Repository extends Object implements IRepository
A class represents a generic repository. It maintains unique serial number within repository.

To build domain specific repository, subclass should be created.

Version:
$Revision: 1.4 $, $Date$
Author:
galperin, thomask
  • Field Details

    • logger

      public static org.slf4j.Logger logger
    • LEGACY

      public static final int LEGACY
      See Also:
    • RANDOM

      public static final int RANDOM
      See Also:
    • minSerialName

      protected String minSerialName
    • mMinSerialNo

      protected BigInteger mMinSerialNo
    • maxSerialName

      protected String maxSerialName
    • mMaxSerialNo

      protected BigInteger mMaxSerialNo
    • nextMinSerialName

      protected String nextMinSerialName
    • mNextMinSerialNo

      protected BigInteger mNextMinSerialNo
    • nextMaxSerialName

      protected String nextMaxSerialName
    • mNextMaxSerialNo

      protected BigInteger mNextMaxSerialNo
    • mCounter

      protected BigInteger mCounter
    • mIncrementNo

      protected BigInteger mIncrementNo
    • mLowWaterMarkNo

      protected BigInteger mLowWaterMarkNo
    • dbSubsystem

      protected DBSubsystem dbSubsystem
    • mBaseDN

      protected String mBaseDN
    • rangeDN

      protected String rangeDN
    • mRadix

      protected int mRadix
    • repositoryConfig

      protected Hashtable<String,String> repositoryConfig
    • idGenerator

      protected int idGenerator
    • idLength

      protected int idLength
    • secureRandom

      protected SecureRandom secureRandom
  • Constructor Details

    • Repository

      public Repository(DBSubsystem dbSubsystem, int radix)
      Constructs a repository.

  • Method Details

    • init

      public void init() throws Exception
      Throws:
      Exception
    • getBaseDN

      public String getBaseDN()
      Get the LDAP base DN for this repository. This value can be used by the request queue to create the name for the request records themselves.
      Returns:
      the LDAP base DN.
    • getRadix

      public int getRadix()
    • getMaxSerial

      public BigInteger getMaxSerial()
      Get the maximum serial number.
      Returns:
      maximum serial number
    • setMaxSerial

      public void setMaxSerial(BigInteger serial) throws EBaseException
      Set the maximum serial number.
      Specified by:
      setMaxSerial in interface IRepository
      Parameters:
      serial - maximum number
      Throws:
      EBaseException - failed to set maximum serial number
    • getNextMaxSerial

      public BigInteger getNextMaxSerial()
      Get the maximum serial number in next range.
      Returns:
      maximum serial number in next range
    • setNextMaxSerial

      public void setNextMaxSerial(BigInteger serial) throws EBaseException
      Set the maximum serial number in next range
      Specified by:
      setNextMaxSerial in interface IRepository
      Parameters:
      serial - maximum number in next range
      Throws:
      EBaseException - failed to set maximum serial number in next range
    • getMinSerial

      public BigInteger getMinSerial()
      Get the minimum serial number.
      Returns:
      minimum serial number
    • setLastSerialNo

      protected void setLastSerialNo(BigInteger lastSN)
    • getIDGenerator

      public int getIDGenerator() throws Exception
      Throws:
      Exception
    • setIDGenerator

      protected void setIDGenerator(String generator) throws Exception
      Throws:
      Exception
    • initCache

      protected void initCache() throws EBaseException
      init serial number cache
      Throws:
      EBaseException
    • peekNextSerialNumber

      public BigInteger peekNextSerialNumber() throws EBaseException
      Peek at the next serial number in cache (does not consume the number). The returned number is not necessarily the previously emitted serial number plus one, i.e. if we are going to roll into the next range. This method does not actually switch the range. Returns null if the next number exceeds the current range and there is not a next range.
      Specified by:
      peekNextSerialNumber in interface IRepository
      Returns:
      serial number
      Throws:
      EBaseException - failed to retrieve next serial number
    • setTheSerialNumber

      public void setTheSerialNumber(BigInteger num) throws EBaseException
      Updates the serial number to the specified in db and cache.

      Parameters:
      num - serial number
      Throws:
      EBaseException
    • getNextSerialNumber

      public BigInteger getNextSerialNumber() throws EBaseException
      Retrieves the next serial number, and also increase the serial number by one.

      Specified by:
      getNextSerialNumber in interface IRepository
      Returns:
      serial number
      Throws:
      EBaseException - failed to retrieve next serial number
    • getRangeLength

      public BigInteger getRangeLength()
    • getRandomLimit

      public BigInteger getRandomLimit(BigInteger rangeLength)
    • checkRange

      protected void checkRange() throws EBaseException
      Checks if the given number is in the current range. If it does not exceed the current range, return cleanly. If it exceeds the given range, and there is a next range, switch the range. If it exceeds the given range, and there is not a next range, throw EDBException. Precondition: the serial number should already have been advanced. This method will detect that and switch to the next range, including resetting mLastSerialNo to the start of the new (now current) range. Postcondition: the caller should again read mLastSerialNo after calling checkRange(), in case checkRange switched the range and the new range is not adjacent to the current range.
      Throws:
      EDBException - thrown when range switch is needed but next range is not allocated
      EBaseException
    • setMinSerialConfig

      public void setMinSerialConfig() throws EBaseException
      Sets minimum serial number limit in config file
      Throws:
      EBaseException - failed to set
    • setMaxSerialConfig

      public void setMaxSerialConfig() throws EBaseException
      Sets maximum serial number limit in config file
      Throws:
      EBaseException - failed to set
    • setNextMinSerialConfig

      public void setNextMinSerialConfig() throws EBaseException
      Sets minimum serial number limit for next range in config file
      Throws:
      EBaseException - failed to set
    • setNextMaxSerialConfig

      public void setNextMaxSerialConfig() throws EBaseException
      Sets maximum serial number limit for next range in config file
      Throws:
      EBaseException - failed to set
    • getNextRange

      public String getNextRange() throws EBaseException
      Gets start of next range from database. Increments the nextRange attribute and allocates this range to the current instance by creating a pkiRange object.
      Returns:
      start of next range
      Throws:
      EBaseException
    • hasRangeConflict

      public boolean hasRangeConflict() throws EBaseException
      Determines if a range conflict has been observed in database. If so, delete the conflicting entries and remove the next range. When the next number is requested, if the number of certs is still below the low water mark, then a new range will be requested.
      Returns:
      true if range conflict, false otherwise
      Throws:
      EBaseException
    • getNumbersInRange

      public BigInteger getNumbersInRange()
    • checkRanges

      public void checkRanges() throws EBaseException
      Checks to see if a new range is needed, or if we have reached the end of the current range, or if a range conflict has occurred.
      Specified by:
      checkRanges in interface IRepository
      Throws:
      EBaseException - failed to check next range for conflicts
    • setEnableSerialMgmt

      public void setEnableSerialMgmt(boolean value) throws EBaseException
      Sets whether serial number management is enabled for certs and requests.
      Specified by:
      setEnableSerialMgmt in interface IRepository
      Parameters:
      value - true/false
      Throws:
      EBaseException - failed to set
    • getLastSerialNumberInRange

      public abstract BigInteger getLastSerialNumberInRange(BigInteger serial_low_bound, BigInteger serial_upper_bound) throws EBaseException
      Throws:
      EBaseException