Class: Webhookdb::Organization::DatabaseMigration
- Inherits:
-
Object
- Object
- Webhookdb::Organization::DatabaseMigration
show all
- Includes:
- Dbutil
- Defined in:
- lib/webhookdb/organization/database_migration.rb
Defined Under Namespace
Classes: MigrationAlreadyFinished, MigrationInProgress
Constant Summary
Constants included
from Dbutil
Dbutil::MOCK_CONN
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Dbutil
borrow_conn, configured_connection_options, conn_opts, displaysafe_url, reduce_expr, take_conn
Class Method Details
.enqueue(admin_connection_url_raw:, readonly_connection_url_raw:, public_host:, started_by:, organization:) ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/webhookdb/organization/database_migration.rb', line 31
def self.enqueue(admin_connection_url_raw:, readonly_connection_url_raw:, public_host:, started_by:, organization:)
self.guard_ongoing!(organization)
self.db.transaction do
dbm = self.create(
started_by:,
organization:,
organization_schema: organization.replication_schema,
source_admin_connection_url: organization.admin_connection_url_raw,
destination_admin_connection_url: admin_connection_url_raw,
)
organization.update(
public_host:,
admin_connection_url_raw:,
readonly_connection_url_raw:,
)
return dbm
end
end
|
.guard_ongoing!(org) ⇒ Object
24
25
26
27
28
29
|
# File 'lib/webhookdb/organization/database_migration.rb', line 24
def self.guard_ongoing!(org)
dbm = self.where(organization: org).ongoing.first
return if dbm.nil?
raise MigrationInProgress, "Organization #{org.name} has an ongoing database host migration so " \
"cannot be modified. We'll let admins know when it's done. Try again soon."
end
|
Instance Method Details
#displaysafe_destination_url ⇒ Object
54
55
56
|
# File 'lib/webhookdb/organization/database_migration.rb', line 54
def displaysafe_destination_url
return displaysafe_url(self.destination_admin_connection_url)
end
|
#displaysafe_source_url ⇒ Object
50
51
52
|
# File 'lib/webhookdb/organization/database_migration.rb', line 50
def displaysafe_source_url
return displaysafe_url(self.source_admin_connection_url)
end
|
#finish(now: Time.now) ⇒ Object
119
120
121
122
123
124
125
126
|
# File 'lib/webhookdb/organization/database_migration.rb', line 119
def finish(now: Time.now)
self.update(
finished_at: now,
source_admin_connection_url: displaysafe_source_url,
destination_admin_connection_url: displaysafe_destination_url,
)
return self
end
|
#finished? ⇒ Boolean
64
65
66
|
# File 'lib/webhookdb/organization/database_migration.rb', line 64
def finished?
return !!self.finished_at
end
|
#migrate ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/webhookdb/organization/database_migration.rb', line 68
def migrate
raise MigrationAlreadyFinished if self.finished?
self.update(started_at: Time.now) if self.started_at.nil?
borrow_conn(self.source_admin_connection_url) do |srcdb|
borrow_conn(self.destination_admin_connection_url) do |dstdb|
self.organization.service_integrations.sort_by(&:id).each do |sint|
next if sint.id <= self.last_migrated_service_integration_id
self.migrate_service_integration(sint, srcdb, dstdb)
self.update(last_migrated_service_integration_id: sint.id, last_migrated_timestamp: nil)
end
end
end
self.update(finished_at: Time.now)
end
|
#status ⇒ Object
58
59
60
61
62
|
# File 'lib/webhookdb/organization/database_migration.rb', line 58
def status
return "finished" if self.finished_at.present?
return "in_progress" if self.started_at.present?
return "enqueued"
end
|