Package hudson.model

Class FingerprintMap

java.lang.Object
hudson.util.KeyedDataStorage<Fingerprint,hudson.model.FingerprintMap.FingerprintParams>
hudson.model.FingerprintMap

public final class FingerprintMap extends KeyedDataStorage<Fingerprint,hudson.model.FingerprintMap.FingerprintParams>
Cache of Fingerprints.

This implementation makes sure that no two Fingerprint objects lie around for the same hash code, and that unused Fingerprint will be adequately GC-ed to prevent memory leak.

Author:
Kohsuke Kawaguchi
See Also:
  • Constructor Details

    • FingerprintMap

      public FingerprintMap()
  • Method Details

    • isReady

      public boolean isReady()
      Returns true if there's some data in the fingerprint database.
    • getOrCreate

      @NonNull public Fingerprint getOrCreate(@CheckForNull AbstractBuild build, @NonNull String fileName, @NonNull byte[] md5sum) throws IOException
      Parameters:
      build - set to non-null if Fingerprint to be created (if so) will have this build as the owner. Otherwise null, to indicate an owner-less build.
      Throws:
      IOException - Loading error
    • getOrCreate

      @NonNull public Fingerprint getOrCreate(@CheckForNull AbstractBuild build, @NonNull String fileName, @NonNull String md5sum) throws IOException
      Throws:
      IOException
    • getOrCreate

      @NonNull public Fingerprint getOrCreate(@CheckForNull Run build, @NonNull String fileName, @NonNull String md5sum) throws IOException
      Throws:
      IOException
    • get

      protected Fingerprint get(String md5sum, boolean createIfNotExist, hudson.model.FingerprintMap.FingerprintParams createParams) throws IOException
      Description copied from class: KeyedDataStorage
      Implementation of get/getOrCreate.
      Overrides:
      get in class KeyedDataStorage<Fingerprint,hudson.model.FingerprintMap.FingerprintParams>
      Returns:
      Item with the specified key
      Throws:
      IOException - Loading error
    • create

      @NonNull protected Fingerprint create(@NonNull String md5sum, @NonNull hudson.model.FingerprintMap.FingerprintParams createParams) throws IOException
      Description copied from class: KeyedDataStorage
      Creates a new data object.

      This method is called by KeyedDataStorage.getOrCreate(String,Object) if the data that matches the specified key does not exist.

      Because of concurrency, another thread might call KeyedDataStorage.get(String) as soon as a new data object is created, so it's important that this method returns a properly initialized "valid" object.

      Specified by:
      create in class KeyedDataStorage<Fingerprint,hudson.model.FingerprintMap.FingerprintParams>
      Returns:
      Created item. If construction fails, abort with an exception.
      Throws:
      IOException - if the method fails to create a new data object, it can throw IOException (or any other exception) and that will be propagated to the caller.
    • load

      @CheckForNull protected Fingerprint load(@NonNull String key) throws IOException
      Description copied from class: KeyedDataStorage
      Attempts to load an existing data object from disk.

      KeyedDataStorage class serializes the requests so that no two threads call the KeyedDataStorage.load(String) method with the same parameter concurrently. This ensures that there's only up to one data object for any key.

      Specified by:
      load in class KeyedDataStorage<Fingerprint,hudson.model.FingerprintMap.FingerprintParams>
      Returns:
      null if no such data exists.
      Throws:
      IOException - if load operation fails. This exception will be propagated to the caller.