Skip to content

Commit

Permalink
Spanner: Use details from gRPC exception on datatbase create failure (#…
Browse files Browse the repository at this point in the history
…4557)

Closes #4071.

Also adds a system test to verify this.
  • Loading branch information
chemelnucfin authored and dhermes committed Dec 20, 2017
1 parent 1bbc457 commit d8317b5
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 13 deletions.
16 changes: 5 additions & 11 deletions spanner/google/cloud/spanner_v1/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,20 @@
import re
import threading

from google.api_core import exceptions
import google.auth.credentials
from google.cloud.exceptions import Conflict
from google.cloud.exceptions import NotFound
from google.gax.errors import GaxError
from google.gax.grpc import exc_to_code
from google.cloud.spanner_v1.gapic.spanner_client import SpannerClient
from grpc import StatusCode
import six

# pylint: disable=ungrouped-imports
from google.cloud.exceptions import Conflict
from google.cloud.exceptions import NotFound
from google.cloud.spanner_v1 import __version__
from google.cloud.spanner_v1._helpers import _options_with_prefix
from google.cloud.spanner_v1.batch import Batch
from google.cloud.spanner_v1.gapic.spanner_client import SpannerClient
from google.cloud.spanner_v1.pool import BurstyPool
from google.cloud.spanner_v1.pool import SessionCheckout
from google.cloud.spanner_v1.session import Session
Expand Down Expand Up @@ -208,14 +209,7 @@ def create(self):
options=options,
)
except GaxError as exc:
if exc_to_code(exc.cause) == StatusCode.ALREADY_EXISTS:
raise Conflict(self.name)
elif exc_to_code(exc.cause) == StatusCode.NOT_FOUND:
raise NotFound('Instance not found: {name}'.format(
name=self._instance.name,
))
raise

raise exceptions.from_grpc_error(exc.cause)
return future

def exists(self):
Expand Down
29 changes: 29 additions & 0 deletions spanner/tests/system/test_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@

from google.cloud._helpers import UTC
from google.cloud.exceptions import GrpcRendezvous
from google.cloud.exceptions import NotFound
from google.cloud.spanner_v1._helpers import TimestampWithNanoseconds
from google.cloud.spanner import Client
from google.cloud.spanner import KeyRange
Expand Down Expand Up @@ -282,6 +283,34 @@ def test_create_database(self):
for database in Config.INSTANCE.list_databases()]
self.assertIn(temp_db_id, database_ids)

def test_table_not_found(self):
temp_db_id = 'temp_db' + unique_resource_id('_')

correct_table = 'MyTable'
incorrect_table = 'NotMyTable'
self.assertNotEqual(correct_table, incorrect_table)

create_table = (
'CREATE TABLE {} (\n'
' Id STRING(36) NOT NULL,\n'
' Field1 STRING(36) NOT NULL\n'
') PRIMARY KEY (Id)').format(correct_table)
index = 'CREATE INDEX IDX ON {} (Field1)'.format(incorrect_table)

temp_db = Config.INSTANCE.database(
temp_db_id,
ddl_statements=[
create_table,
index,
],
)
self.to_delete.append(temp_db)
with self.assertRaises(NotFound) as exc_info:
temp_db.create()

expected = 'Table not found: {0}'.format(incorrect_table)
self.assertEqual(exc_info.exception.args, (expected,))

def test_update_database_ddl(self):
pool = BurstyPool()
temp_db_id = 'temp_db' + unique_resource_id('_')
Expand Down
4 changes: 2 additions & 2 deletions spanner/tests/unit/test_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ def test___ne__(self):
self.assertNotEqual(database1, database2)

def test_create_grpc_error(self):
from google.gax.errors import GaxError
from google.api_core.exceptions import GoogleAPICallError

client = _Client()
api = client.database_admin_api = _FauxDatabaseAdminAPI(
Expand All @@ -293,7 +293,7 @@ def test_create_grpc_error(self):
pool = _Pool()
database = self._make_one(self.DATABASE_ID, instance, pool=pool)

with self.assertRaises(GaxError):
with self.assertRaises(GoogleAPICallError):
database.create()

(parent, create_statement, extra_statements,
Expand Down

0 comments on commit d8317b5

Please sign in to comment.