Class LocallyCachedBlob

    • Field Detail

      • NOT_DOWNLOADED_VERSION

        public static final long NOT_DOWNLOADED_VERSION
        See Also:
        Constant Field Values
      • localUpdateTime

        protected long localUpdateTime
    • Constructor Detail

      • LocallyCachedBlob

        protected LocallyCachedBlob​(String blobDescription,
                                    String blobKey,
                                    StormMetricsRegistry metricsRegistry)
        Create a new LocallyCachedBlob.
        Parameters:
        blobDescription - a description of the blob this represents. Typically it should at least be the blob key, but ideally also include if it is an archive or not, what user or topology it is for, or if it is a storm.jar etc.
    • Method Detail

      • getLocalVersion

        public abstract long getLocalVersion()
        Get the version of the blob cached locally. If the version is unknown or it has not been downloaded NOT_DOWNLOADED_VERSION should be returned. PRECONDITION: this can only be called with a lock on this instance held.
      • commitNewVersion

        protected abstract void commitNewVersion​(long version)
                                          throws IOException
        Commit the new version and make it available for the end user. PRECONDITION: uncompressToTempLocationIfNeeded will have been called. PRECONDITION: this can only be called with a lock on this instance held.
        Parameters:
        version - the version of the blob to commit.
        Throws:
        IOException
      • cleanupOrphanedData

        public abstract void cleanupOrphanedData()
                                          throws IOException
        Clean up any temporary files. This will be called after updating a blob, either successfully or if an error has occured. The goal is to find any files that may be left over and remove them so space is not leaked. PRECONDITION: this can only be called with a lock on this instance held.
        Throws:
        IOException
      • completelyRemove

        public abstract void completelyRemove()
                                       throws IOException
        Completely remove anything that is cached locally for this blob and all tracking files also stored for it. This will be called after the blob was determined to no longer be needed in the cache. PRECONDITION: this can only be called with a lock on this instance held.
        Throws:
        IOException
      • getSizeOnDisk

        public abstract long getSizeOnDisk()
        Get the amount of disk space that is used by this blob. If the blob is uncompressed it should be the sum of the space used by all of the uncompressed files. In general this will not be called with any locks held so it is a good idea to cache it and updated it when committing a new version.
      • getSizeOnDisk

        protected static long getSizeOnDisk​(Path p)
                                     throws IOException
        Get the size of p in bytes.
        Parameters:
        p - the path to read.
        Returns:
        the size of p in bytes.
        Throws:
        IOException
      • touch

        protected void touch()
        Updates the last updated time. This should be called when references are added or removed.
      • getLastUsed

        public long getLastUsed()
        Get the last time that this used for LRU calculations.
      • isUsed

        public boolean isUsed()
        Return true if this blob is actively being used, else false (meaning it can be deleted, but might not be).
      • addReference

        public void addReference​(PortAndAssignment pna,
                                 BlobChangingCallback cb)
        Mark that a given port and assignment are using this.
        Parameters:
        pna - the slot and assignment that are using this blob.
        cb - an optional callback indicating that they want to know/synchronize when a blob is updated.
      • removeReference

        public boolean removeReference​(PortAndAssignment pna)
        Removes a reservation for this blob from a given slot and assignemnt.
        Parameters:
        pna - the slot + assignment that no longer needs this blob.
        Returns:
        false if a reference was failed to be removed
      • informReferencesAndCommitNewVersion

        public void informReferencesAndCommitNewVersion​(long newVersion)
                                                 throws IOException
        Inform all of the callbacks that a change is going to happen and then wait for them to all get back that it is OK to make that change. Commit the new version once all callbacks are ready. Finally inform all callbacks that the commit is complete.
        Throws:
        IOException
      • getKey

        public String getKey()
        Get the key for this blob.
      • isFullyDownloaded

        public abstract boolean isFullyDownloaded()