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
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
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
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
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
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
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
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
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
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
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
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
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
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>
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
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 |