45 lines
2.5 KiB
Ruby
45 lines
2.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class CreateWorkspacesTable < Gitlab::Database::Migration[2.1]
|
||
|
def up
|
||
|
create_table :workspaces do |t|
|
||
|
t.timestamps_with_timezone null: false
|
||
|
# NOTE: All workspace foreign key references are currently `on_delete: :cascade`, because we have no support or
|
||
|
# testing around null values. However, in the future we may want to switch these to nullify, especially
|
||
|
# once we start introducing logging, metrics, billing, etc. around workspaces.
|
||
|
t.bigint :user_id, null: false, index: true
|
||
|
t.bigint :project_id, null: false, index: true
|
||
|
t.bigint :cluster_agent_id, null: false, index: true
|
||
|
t.datetime_with_timezone :desired_state_updated_at, null: false
|
||
|
t.datetime_with_timezone :responded_to_agent_at
|
||
|
t.integer :max_hours_before_termination, limit: 2, null: false
|
||
|
t.text :name, limit: 64, null: false, index: { unique: true }
|
||
|
t.text :namespace, limit: 64, null: false
|
||
|
t.text :desired_state, limit: 32, null: false
|
||
|
t.text :actual_state, limit: 32, null: false
|
||
|
t.text :editor, limit: 256, null: false
|
||
|
t.text :devfile_ref, limit: 256, null: false
|
||
|
t.text :devfile_path, limit: 2048, null: false
|
||
|
# NOTE: The limit on the devfile fields are arbitrary, and only added to avoid a rubocop
|
||
|
# Migration/AddLimitToTextColumns error. We expect the average devfile side to be small, perhaps ~0.5k for a
|
||
|
# devfile and ~2k for a processed_devfile, but to account for unexpected usage resulting in larger files,
|
||
|
# we have specified 65535, which allows for a YAML file with over 800 lines of an average 80-character
|
||
|
# length.
|
||
|
t.text :devfile, limit: 65535
|
||
|
t.text :processed_devfile, limit: 65535
|
||
|
t.text :url, limit: 1024, null: false
|
||
|
# NOTE: The resource version is currently backed by etcd's mod_revision.
|
||
|
# However, it's important to note that the application should not rely on the implementation details of
|
||
|
# the versioning system maintained by Kubernetes. We may change the implementation of resource version
|
||
|
# in the future, such as to change it to a timestamp or per-object counter.
|
||
|
# https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
|
||
|
# The limit of 64 is arbitrary.
|
||
|
t.text :deployment_resource_version, limit: 64
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
drop_table :workspaces
|
||
|
end
|
||
|
end
|