44 lines
2.5 KiB
Ruby
44 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
|