18F/identity-idp

View on GitHub
config/database.yml

Summary

Maintainability
Test Coverage
postgresql: &postgresql
  adapter: postgresql
  encoding: utf8
  database: identity_idp_<%= Rails.env %>
  port: 5432
  username: <%= ENV['DOCKER_DB_USER'] %>

defaults: &defaults
  host: <%= ENV['DOCKER_DB_HOST'] || 'localhost' %>
  pool: 5
  <<: *postgresql
  # timeout settings
  timeout: <%= IdentityConfig.store.database_timeout %>
  reconnect: true
  connect_timeout: 2
  keepalives_idle: 10
  keepalives_interval: 10
  keepalives_count: 2
  checkout_timeout: 5
  reaping_frequency: 10
  variables:
    statement_timeout: <%= IdentityConfig.store.database_statement_timeout %>

development:
  primary:
    <<: *defaults
    adapter: postgresql
    migrations_paths: db/primary_migrate
  read_replica:
    <<: *defaults
    adapter: postgresql
    replica: true
  worker_jobs:
    <<: *defaults
    database: identity_idp_worker_jobs_<%= Rails.env %>
    migrations_paths: db/worker_jobs_migrate

test:
  primary: &test
    <<: *defaults
    adapter: postgresql
    pool: 10
    checkout_timeout: 10
    database: <%= ENV['POSTGRES_DB'] || "identity_idp_test#{ENV['TEST_ENV_NUMBER']}" %>
    user: <%= ENV['POSTGRES_USER'] %>
    password: <%= ENV['POSTGRES_PASSWORD'] %>
    migrations_paths: db/primary_migrate
  read_replica:
    <<: *test
    adapter: postgresql
    replica: true
  worker_jobs:
    <<: *test
    database: <%= "identity_idp_worker_jobs_test#{ENV['TEST_ENV_NUMBER']}" %>
    migrations_paths: db/worker_jobs_migrate

<%
  worker_pool = if Identity::Hostdata.instance_role == 'worker'
    GoodJobConnectionPoolSize.calculate_worker_pool_size(
      queues: IdentityConfig.store.good_job_queues,
      cron_enabled: true,
      max_threads: IdentityConfig.store.good_job_max_threads,
    )
  else
    IdentityConfig.store.database_pool_idp
  end
%>

<%
  primary_pool = if Identity::Hostdata.instance_role == 'worker'
    GoodJobConnectionPoolSize.calculate_primary_pool_size(
      queues: IdentityConfig.store.good_job_queues,
      max_threads: IdentityConfig.store.good_job_max_threads,
    )
  else
    IdentityConfig.store.database_pool_idp
  end
%>

production:
  primary:
    <<: *defaults
    adapter: postgresql
    database: <%= IdentityConfig.store.database_name %>
    username: <%= IdentityConfig.store.database_username %>
    host: <%= IdentityConfig.store.database_socket.present? ?  IdentityConfig.store.database_socket : IdentityConfig.store.database_host %>
    password: <%= IdentityConfig.store.database_password %>
    pool: <%= primary_pool %>
    advisory_locks: <%= IdentityConfig.store.database_advisory_locks_enabled %>
    prepared_statements: <%= IdentityConfig.store.database_prepared_statements_enabled %>
    sslmode: <%= IdentityConfig.store.database_sslmode %>
    sslrootcert: '/usr/local/share/aws/rds-combined-ca-bundle.pem'
    migrations_paths: db/primary_migrate
  read_replica:
    <<: *defaults
    adapter: postgresql
    database: <%= IdentityConfig.store.database_name %>
    username: <%= IdentityConfig.store.database_readonly_username %>
    host: <%= IdentityConfig.store.database_read_replica_host %>
    password: <%= IdentityConfig.store.database_readonly_password %>
    pool: <%= primary_pool %>
    sslmode: <%= IdentityConfig.store.database_sslmode %>
    sslrootcert: '/usr/local/share/aws/rds-combined-ca-bundle.pem'
    replica: true
  worker_jobs:
    <<: *defaults
    database: <%= IdentityConfig.store.database_worker_jobs_name %>
    username: <%= IdentityConfig.store.database_worker_jobs_username %>
    host: <%= IdentityConfig.store.database_worker_jobs_host %>
    password: <%= IdentityConfig.store.database_worker_jobs_password %>
    pool: <%= worker_pool %>
    sslmode: <%= IdentityConfig.store.database_worker_jobs_sslmode %>
    sslrootcert: '/usr/local/share/aws/rds-combined-ca-bundle.pem'
    migrations_paths: db/worker_jobs_migrate