-class CollectionUseRegularUuids < ActiveRecord::Migration
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+class CollectionUseRegularUuids < ActiveRecord::Migration[4.2]
def up
add_column :collections, :name, :string
add_column :collections, :description, :string
add_column :collections, :properties, :text
- add_column :collections, :expire_time, :date
+ add_column :collections, :expires_at, :date
remove_column :collections, :locator
say_with_time "Step 1. Move manifest hashes into portable_data_hash field" do
}
links = ActiveRecord::Base.connection.select_all %{
select links.uuid, head_uuid, tail_uuid, links.name,
-manifest_text, links.created_at, links.updated_at
+manifest_text, links.created_at, links.modified_at, links.modified_by_client_uuid, links.modified_by_user_uuid
#{from_clause}
}
links.each do |d|
ActiveRecord::Base.connection.execute %{
-insert into collections (uuid, portable_data_hash, owner_uuid, name, manifest_text, created_at, updated_at)
+insert into collections (uuid, portable_data_hash, owner_uuid, name, manifest_text, created_at, modified_at, modified_by_client_uuid, modified_by_user_uuid, updated_at)
values (#{ActiveRecord::Base.connection.quote Collection.generate_uuid},
#{ActiveRecord::Base.connection.quote d['head_uuid']},
#{ActiveRecord::Base.connection.quote d['tail_uuid']},
#{ActiveRecord::Base.connection.quote d['name']},
#{ActiveRecord::Base.connection.quote d['manifest_text']},
#{ActiveRecord::Base.connection.quote d['created_at']},
-#{ActiveRecord::Base.connection.quote d['updated_at']})
+#{ActiveRecord::Base.connection.quote d['modified_at']},
+#{ActiveRecord::Base.connection.quote d['modified_by_client_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_by_user_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_at']})
}
end
ActiveRecord::Base.connection.execute "delete from links where links.uuid in (select links.uuid #{from_clause})"
where link_class='permission' and links.name='can_read' and collections.uuid is null
}
links = ActiveRecord::Base.connection.select_all %{
-select links.uuid, head_uuid, tail_uuid, manifest_text, links.created_at, links.updated_at
+select links.uuid, head_uuid, tail_uuid, manifest_text, links.created_at, links.modified_at
#{from_clause}
}
links.each do |d|
ActiveRecord::Base.connection.execute %{
-insert into collections (uuid, portable_data_hash, owner_uuid, manifest_text, created_at, updated_at)
+insert into collections (uuid, portable_data_hash, owner_uuid, manifest_text, created_at, modified_at, modified_by_client_uuid, modified_by_user_uuid, updated_at)
values (#{ActiveRecord::Base.connection.quote Collection.generate_uuid},
#{ActiveRecord::Base.connection.quote d['head_uuid']},
#{ActiveRecord::Base.connection.quote d['tail_uuid']},
#{ActiveRecord::Base.connection.quote d['manifest_text']},
#{ActiveRecord::Base.connection.quote d['created_at']},
-#{ActiveRecord::Base.connection.quote d['updated_at']})
+#{ActiveRecord::Base.connection.quote d['modified_at']},
+#{ActiveRecord::Base.connection.quote d['modified_by_client_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_by_user_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_at']})
}
end
ActiveRecord::Base.connection.execute "delete from links where links.uuid in (select links.uuid #{from_clause})"
say_with_time "Step 4. Migrate remaining orphan collection objects" do
links = ActiveRecord::Base.connection.select_all %{
-select portable_data_hash, owner_uuid, manifest_text, created_at, updated_at
+select portable_data_hash, owner_uuid, manifest_text, created_at, modified_at
from collections
where uuid is null and portable_data_hash not in (select portable_data_hash from collections where uuid is not null)
}
links.each do |d|
ActiveRecord::Base.connection.execute %{
-insert into collections (uuid, portable_data_hash, owner_uuid, manifest_text, created_at, updated_at)
+insert into collections (uuid, portable_data_hash, owner_uuid, manifest_text, created_at, modified_at, modified_by_client_uuid, modified_by_user_uuid, updated_at)
values (#{ActiveRecord::Base.connection.quote Collection.generate_uuid},
#{ActiveRecord::Base.connection.quote d['portable_data_hash']},
#{ActiveRecord::Base.connection.quote d['owner_uuid']},
#{ActiveRecord::Base.connection.quote d['manifest_text']},
#{ActiveRecord::Base.connection.quote d['created_at']},
-#{ActiveRecord::Base.connection.quote d['updated_at']})
+#{ActiveRecord::Base.connection.quote d['modified_at']},
+#{ActiveRecord::Base.connection.quote d['modified_by_client_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_by_user_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_at']})
}
end
end
where head_uuid like '________________________________+%' and tail_uuid like '________________________________+%' and links.link_class = 'provenance'
}
links = ActiveRecord::Base.connection.select_all %{
-select links.uuid, head_uuid, tail_uuid, links.created_at, links.updated_at, links.owner_uuid
+select links.uuid, head_uuid, tail_uuid, links.created_at, links.modified_at, links.modified_by_client_uuid, links.modified_by_user_uuid, links.owner_uuid
#{from_clause}
}
links.each do |d|
newuuid = Job.generate_uuid
ActiveRecord::Base.connection.execute %{
-insert into jobs (uuid, script_parameters, output, running, success, created_at, updated_at, owner_uuid)
+insert into jobs (uuid, script_parameters, output, running, success, created_at, modified_at, modified_by_client_uuid, modified_by_user_uuid, owner_uuid, updated_at)
values (#{ActiveRecord::Base.connection.quote newuuid},
#{ActiveRecord::Base.connection.quote "---\ninput: "+d['tail_uuid']},
#{ActiveRecord::Base.connection.quote d['head_uuid']},
#{ActiveRecord::Base.connection.quote false},
#{ActiveRecord::Base.connection.quote true},
#{ActiveRecord::Base.connection.quote d['created_at']},
-#{ActiveRecord::Base.connection.quote d['updated_at']},
-#{ActiveRecord::Base.connection.quote d['owner_uuid']})
+#{ActiveRecord::Base.connection.quote d['modified_at']},
+#{ActiveRecord::Base.connection.quote d['modified_by_client_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_by_user_uuid']},
+#{ActiveRecord::Base.connection.quote d['owner_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_at']})
}
end
ActiveRecord::Base.connection.execute "delete from links where links.uuid in (select links.uuid #{from_clause})"
}
links = ActiveRecord::Base.connection.select_all %{
select links.uuid, collections.uuid as collectionuuid, tail_uuid, link_class, links.properties,
-links.name, links.created_at, links.updated_at, links.owner_uuid
+links.name, links.created_at, links.modified_at, links.modified_by_client_uuid, links.modified_by_user_uuid, links.owner_uuid
#{from_clause}
}
links.each do |d|
ActiveRecord::Base.connection.execute %{
-insert into links (uuid, head_uuid, tail_uuid, link_class, name, properties, created_at, updated_at, owner_uuid)
+insert into links (uuid, head_uuid, tail_uuid, link_class, name, properties, created_at, modified_at, modified_by_client_uuid, modified_by_user_uuid, owner_uuid, updated_at)
values (#{ActiveRecord::Base.connection.quote Link.generate_uuid},
#{ActiveRecord::Base.connection.quote d['collectionuuid']},
#{ActiveRecord::Base.connection.quote d['tail_uuid']},
#{ActiveRecord::Base.connection.quote d['name']},
#{ActiveRecord::Base.connection.quote d['properties']},
#{ActiveRecord::Base.connection.quote d['created_at']},
-#{ActiveRecord::Base.connection.quote d['updated_at']},
-#{ActiveRecord::Base.connection.quote d['owner_uuid']})
+#{ActiveRecord::Base.connection.quote d['modified_at']},
+#{ActiveRecord::Base.connection.quote d['modified_by_client_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_by_user_uuid']},
+#{ActiveRecord::Base.connection.quote d['owner_uuid']},
+#{ActiveRecord::Base.connection.quote d['modified_at']})
}
end
ActiveRecord::Base.connection.execute "delete from links where links.uuid in (select links.uuid #{from_clause})"
end
def down
- # Not gonna happen.
+ raise ActiveRecord::IrreversibleMigration, "Can't downmigrate changes to collections and links without potentially losing data."
end
end