googleapis / ruby-spanner-activerecord

Spanner<->ActiveRecord adapter for Ruby
MIT License
87 stars 30 forks source link

Can't compose db:drop db:create db:migrate in single call against Spanner Cloud #272

Open abachman opened 11 months ago

abachman commented 11 months ago

When trying to do a database reset in a multi-database Rails app with bin/rails db:drop:spanner db:create:spanner db:schema:load:spanner, drop and create succeed but schema:load fails with Database not found from Spanner.

The problem is consistent when connected to Cloud Spanner projects, but does not occur when connected to the Spanner local emulator.

Environment details

Steps to reproduce

Have a cloud spanner project + instance set up.

development: 
  primary: 
    adapter: sqlite
    database: db/development.sqlite3
    pool: 5
    timeout: 5000

  spanner:
    adapter: spanner
    pool: 2
    project: dev-project
    instance: ourapp
    database: myapp_dev
    credentials: config/credentials/shared-service-account.json
    migrations_paths: db/spanner/migrate
  1. Run bin/rails db:drop:spanner db:create:spanner db:migrate:spanner against the project + instance.

Full trace

Dropped database 'myapp_test'
Created database 'myapp_test'
rails aborted!
Google::Cloud::NotFoundError: 5:Database not found: projects/dev-project/instances/ourapp/databases/myapp_test. debug_error_string:{UNKNOWN:Error received from peer ipv4:172.111.11.11:443 {grpc_message:"Database not found: projects/dev-project/instances/ourapp/databases/myapp_test", grpc_status:5, created_time:"2023-11-06T20:09:22.197355469+00:00"}}

Caused by:
GRPC::NotFound: 5:Database not found: projects/dev-project/instances/ourapp/databases/myapp_test. debug_error_string:{UNKNOWN:Error received from peer ipv4:172.111.11.11:443 {grpc_message:"Database not found: projects/dev-project/instances/ourapp/databases/myapp_test", grpc_status:5, created_time:"2023-11-06T20:09:22.197355469+00:00"}}

Expected outcome

Drop, create, load schema on Cloud Spanner without errors in one shot like in MySQL, Postgres, or Sqlite.