Class: Moab::StorageServices
- Inherits:
-
Object
- Object
- Moab::StorageServices
- Defined in:
- lib/moab/storage_services.rb
Overview
Copyright © 2012 by The Board of Trustees of the Leland Stanford Junior University. All rights reserved. See LICENSE for details.
An interface class to support access to SDR storage via a RESTful server
Data Model
-
StorageRepository = represents a digital object repository storage node
-
StorageServices = supports application layer access to the repository’s objects, data, and metadata
-
StorageObject = represents a digital object’s repository storage location and ingest/dissemination methods
-
StorageObjectVersion [1..*] = represents a version subdirectory within an object’s home directory
-
Bagger [1] = utility for creating bagit packages for ingest or dissemination
-
-
-
Direct Known Subclasses
Constant Summary collapse
- @@repository =
Note:
After some discussion, consensus was that this is a thread safe use of a
class variable, as 1) it’s never mutated after the class is initialized, and 2) the value of the StorageRepository instance is determined from configuration that rarely changes and is loaded once at app start time (at least in Stanford’s consumers; see Moab::Config.configure calls in preservation_robots, preservation_catalog, and technical-metadata-service). Sidekiq requires thread safe code, so please preserve thread safety for multiple concurrent callers of this service if refactoring, so Sidekiq remains an option for ActiveJob backend for moab-versioning consumers.
Moab::StorageRepository.new
Class Method Summary collapse
-
.current_version(object_id) ⇒ Integer
The version number of the currently highest version.
-
.deposit_branch(object_id) ⇒ Pathname
The branch segment of the object deposit path.
-
.deposit_trunk ⇒ String
The trunk segment of the object deposit path.
-
.find_storage_object(object_id, include_deposit = false) ⇒ StorageObject
The representation of a digitial object’s storage directory, which might not exist yet.
-
.object_path(object_id) ⇒ String
The location of the storage object.
-
.object_size(object_id, include_deposit = false) ⇒ Integer
The size occupied on disk by the storage object, in bytes.
-
.object_version_path(object_id, version_id = nil) ⇒ String
The location of the storage object version.
-
.repository ⇒ StorageRepository
An instance of the interface to SDR storage.
-
.retrieve_file(file_category, file_id, object_id, version_id = nil) ⇒ Pathname
Pathname object containing the full path for the specified file.
-
.retrieve_file_group(file_category, object_id, version_id = nil) ⇒ FileInventory
The file inventory for the specified object version.
-
.retrieve_file_signature(file_category, file_id, object_id, version_id = nil) ⇒ FileSignature
The signature of the file.
-
.retrieve_file_using_signature(file_category, file_signature, object_id, version_id = nil) ⇒ Pathname
Pathname object containing the full path for the specified file.
-
.storage_object(object_id, create = false) ⇒ StorageObject
The representation of a digitial object’s storage directory, which must exist.
-
.storage_roots ⇒ Array<Pathname>
A list of the filesystems currently used for storage.
-
.version_differences(object_id, base_version_id, compare_version_id) ⇒ FileInventoryDifference
The report of the version differences.
Class Method Details
.current_version(object_id) ⇒ Integer
Returns The version number of the currently highest version.
84 85 86 |
# File 'lib/moab/storage_services.rb', line 84 def self.current_version(object_id) repository.storage_object(object_id).current_version_id end |
.deposit_branch(object_id) ⇒ Pathname
Returns The branch segment of the object deposit path.
44 45 46 |
# File 'lib/moab/storage_services.rb', line 44 def self.deposit_branch(object_id) repository.deposit_branch(object_id) end |
.deposit_trunk ⇒ String
Returns The trunk segment of the object deposit path.
38 39 40 |
# File 'lib/moab/storage_services.rb', line 38 def self.deposit_trunk repository.deposit_trunk end |
.find_storage_object(object_id, include_deposit = false) ⇒ StorageObject
Returns The representation of a digitial object’s storage directory, which might not exist yet.
51 52 53 |
# File 'lib/moab/storage_services.rb', line 51 def self.find_storage_object(object_id, include_deposit = false) repository.find_storage_object(object_id, include_deposit) end |
.object_path(object_id) ⇒ String
Returns the location of the storage object.
71 72 73 |
# File 'lib/moab/storage_services.rb', line 71 def self.object_path(object_id) repository.storage_object(object_id).object_pathname.to_s end |
.object_size(object_id, include_deposit = false) ⇒ Integer
Returns the size occupied on disk by the storage object, in bytes. this is the entire moab (all versions).
58 59 60 |
# File 'lib/moab/storage_services.rb', line 58 def self.object_size(object_id, include_deposit = false) repository.object_size(object_id, include_deposit) end |
.object_version_path(object_id, version_id = nil) ⇒ String
Returns the location of the storage object version.
78 79 80 |
# File 'lib/moab/storage_services.rb', line 78 def self.object_version_path(object_id, version_id = nil) repository.storage_object(object_id).find_object_version(version_id).version_pathname.to_s end |
.repository ⇒ StorageRepository
Returns an instance of the interface to SDR storage.
28 29 30 |
# File 'lib/moab/storage_services.rb', line 28 def self.repository @@repository end |
.retrieve_file(file_category, file_id, object_id, version_id = nil) ⇒ Pathname
Returns Pathname object containing the full path for the specified file.
107 108 109 110 |
# File 'lib/moab/storage_services.rb', line 107 def self.retrieve_file(file_category, file_id, object_id, version_id = nil) storage_object_version = repository.storage_object(object_id).find_object_version(version_id) storage_object_version.find_filepath(file_category, file_id) end |
.retrieve_file_group(file_category, object_id, version_id = nil) ⇒ FileInventory
Returns the file inventory for the specified object version.
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/moab/storage_services.rb', line 91 def self.retrieve_file_group(file_category, object_id, version_id = nil) storage_object_version = repository.storage_object(object_id).find_object_version(version_id) inventory_type = if file_category =~ /manifest/ file_category = 'manifests' else 'version' end inventory = storage_object_version.file_inventory(inventory_type) inventory.group(file_category) end |
.retrieve_file_signature(file_category, file_id, object_id, version_id = nil) ⇒ FileSignature
Returns The signature of the file.
127 128 129 130 |
# File 'lib/moab/storage_services.rb', line 127 def self.retrieve_file_signature(file_category, file_id, object_id, version_id = nil) storage_object_version = repository.storage_object(object_id).find_object_version(version_id) storage_object_version.find_signature(file_category, file_id) end |
.retrieve_file_using_signature(file_category, file_signature, object_id, version_id = nil) ⇒ Pathname
Returns Pathname object containing the full path for the specified file.
117 118 119 120 |
# File 'lib/moab/storage_services.rb', line 117 def self.retrieve_file_using_signature(file_category, file_signature, object_id, version_id = nil) storage_object_version = repository.storage_object(object_id).find_object_version(version_id) storage_object_version.find_filepath_using_signature(file_category, file_signature) end |
.storage_object(object_id, create = false) ⇒ StorageObject
Returns The representation of a digitial object’s storage directory, which must exist.
65 66 67 |
# File 'lib/moab/storage_services.rb', line 65 def self.storage_object(object_id, create = false) repository.storage_object(object_id, create) end |
.storage_roots ⇒ Array<Pathname>
Returns A list of the filesystems currently used for storage.
33 34 35 |
# File 'lib/moab/storage_services.rb', line 33 def self.storage_roots repository.storage_roots end |
.version_differences(object_id, base_version_id, compare_version_id) ⇒ FileInventoryDifference
Returns The report of the version differences.
136 137 138 139 140 141 142 |
# File 'lib/moab/storage_services.rb', line 136 def self.version_differences(object_id, base_version_id, compare_version_id) base_version = repository.storage_object(object_id).storage_object_version(base_version_id) compare_version = repository.storage_object(object_id).storage_object_version(compare_version_id) base_inventory = base_version.file_inventory('version') compare_inventory = compare_version.file_inventory('version') FileInventoryDifference.new.compare(base_inventory, compare_inventory) end |