Class: Moab::StorageServices

Inherits:
Object
  • Object
show all
Defined in:
lib/moab/storage_services.rb

Overview

Note:

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

Stanford::StorageServices

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

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_trunkString



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

.repositoryStorageRepository



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