Class: Dor::CleanupResetService

Inherits:
Object
  • Object
show all
Defined in:
lib/dor/services/cleanup_reset_service.rb

Overview

Remove all traces of the object’s data files from the workspace and export areas

Class Method Summary collapse

Class Method Details

.cleanup_assembly_content(druid, base) ⇒ void

This method returns an undefined value.

Returns remove the object’s data files from the assembly area.

Parameters:

  • druid (String)

    The identifier for the object whose data is to be removed

  • base (String)

    The base directory to delete from



99
100
101
# File 'lib/dor/services/cleanup_reset_service.rb', line 99

def self.cleanup_assembly_content(druid, base)
  DruidTools::Druid.new(druid, base).prune!
end

.cleanup_by_reset_druid(druid) ⇒ void

This method returns an undefined value.

Returns remove copy of the reset data that was exported to preservation core.

Parameters:

  • druid (String)

    The identifier for the object whose reset data is to be removed



10
11
12
13
14
15
# File 'lib/dor/services/cleanup_reset_service.rb', line 10

def self.cleanup_by_reset_druid(druid)
  last_version = get_druid_last_version(druid)
  cleanup_reset_workspace_content(druid, last_version, Config.cleanup.local_workspace_root)
  cleanup_assembly_content(druid, Config.cleanup.local_assembly_root)
  cleanup_reset_export(druid, last_version)
end

.cleanup_reset_export(druid, last_version) ⇒ void

This method returns an undefined value.

Returns remove copy of the reset data that was exported to preservation core.

Parameters:

  • druid (String)

    The identifier for the object whose reset bags data is to be removed



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/dor/services/cleanup_reset_service.rb', line 57

def self.cleanup_reset_export(druid, last_version)
  id = druid.split(':').last
  base_bag_directory = File.join(Config.cleanup.local_export_home, id)

  bag_dir_list = get_reset_bag_dir_list(last_version, base_bag_directory)
  bag_dir_list.each do |bag_dir|
    Pathname(bag_dir).rmtree
  end

  bag_tar_list = get_reset_bag_tar_list(last_version, base_bag_directory)
  bag_tar_list.each do |bag_tar|
    Pathname(bag_tar).rmtree
  end
end

.cleanup_reset_workspace_content(druid, last_version, base) ⇒ void

This method returns an undefined value.

Returns remove all the object’s reset data files from the workspace area equal to less than the last_version.

Parameters:

  • druid (String)

    The identifier for the object whose reset data is to be removed

  • base (String)

    The base directory to delete from

  • last_version (Integer)

    The last version that the data should be removed until version 1



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/dor/services/cleanup_reset_service.rb', line 30

def self.cleanup_reset_workspace_content(druid, last_version, base)
  base_druid = DruidTools::Druid.new(druid, base)
  base_druid_tree = base_druid.pathname.to_s
  # if it is truncated tree /aa/111/aaa/1111/content,
  # we should follow the regular cleanup technique

  reset_directories = get_reset_dir_list(last_version, base_druid_tree)
  reset_directories.each do |path|
    FileUtils.rm_rf(path)
  end
  base_druid.prune_ancestors(base_druid.pathname.parent)
end

.get_druid_last_version(druid) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/dor/services/cleanup_reset_service.rb', line 17

def self.get_druid_last_version(druid)
  druid_obj = Dor.find(druid)
  last_version = druid_obj.current_version.to_i

  # if the current version is still open, avoid this versioned directory
  last_version -= 1 if Dor::Config.workflow.client.get_lifecycle('dor', druid, 'accessioned').nil?
  last_version
end

.get_reset_bag_dir_list(last_version, base_bag_directory) ⇒ void

This method returns an undefined value.

Returns prepares a list of reset bag directories that should be removed.

Parameters:

  • last_version (Integer)

    The last version that the data should be removed until version 1

  • base_bag_directory (String)

    The base bag directory including the export home and druid id



75
76
77
78
79
80
81
82
# File 'lib/dor/services/cleanup_reset_service.rb', line 75

def self.get_reset_bag_dir_list(last_version, base_bag_directory)
  reset_bags = []
  (1..last_version).each do |i|
    reset_path = "#{base_bag_directory}_v#{i}"
    reset_bags.append(reset_path) if File.exist?(reset_path)
  end
  reset_bags
end

.get_reset_bag_tar_list(last_version, base_bag_directory) ⇒ void

This method returns an undefined value.

Returns prepares a list of reset bag tars that should be removed.

Parameters:

  • base_bag_directory (String)

    The base bag directory including the export home and druid id

  • last_version (Integer)

    The last version that the data should be removed until version 1



87
88
89
90
91
92
93
94
# File 'lib/dor/services/cleanup_reset_service.rb', line 87

def self.get_reset_bag_tar_list(last_version, base_bag_directory)
  reset_bags = []
  (1..last_version).each do |i|
    reset_path = "#{base_bag_directory}_v#{i}.tar"
    reset_bags.append(reset_path) if File.exist?(reset_path)
  end
  reset_bags
end

.get_reset_dir_list(last_version, base_druid_tree) ⇒ void

This method returns an undefined value.

Returns prepares a list of reset directories that should be removed.

Parameters:

  • base_druid_tree (String)

    The base directory to delete from

  • last_version (Integer)

    The last version that the data should be removed until version 1



46
47
48
49
50
51
52
53
# File 'lib/dor/services/cleanup_reset_service.rb', line 46

def self.get_reset_dir_list(last_version, base_druid_tree)
  reset_directories = []
  (1..last_version).each do |i|
    reset_path = "#{base_druid_tree}_v#{i}"
    reset_directories.append(reset_path) if File.exist?(reset_path)
  end
  reset_directories
end