diff --git a/core/src/main/java/com/scalar/db/storage/dynamo/DynamoAdmin.java b/core/src/main/java/com/scalar/db/storage/dynamo/DynamoAdmin.java index 9cd1d1b87..252900f18 100644 --- a/core/src/main/java/com/scalar/db/storage/dynamo/DynamoAdmin.java +++ b/core/src/main/java/com/scalar/db/storage/dynamo/DynamoAdmin.java @@ -1142,7 +1142,7 @@ public boolean namespaceExists(String nonPrefixedNamespace) throws ExecutionExce List tableNames = listTablesResponse.tableNames(); Namespace namespace = Namespace.of(namespacePrefix, nonPrefixedNamespace); for (String tableName : tableNames) { - if (tableName.startsWith(namespace.prefixed())) { + if (tableName.startsWith(namespace.prefixed() + ".")) { namespaceExists = true; break; } diff --git a/core/src/test/java/com/scalar/db/storage/dynamo/DynamoAdminTestBase.java b/core/src/test/java/com/scalar/db/storage/dynamo/DynamoAdminTestBase.java index 858e83259..c2fd99711 100644 --- a/core/src/test/java/com/scalar/db/storage/dynamo/DynamoAdminTestBase.java +++ b/core/src/test/java/com/scalar/db/storage/dynamo/DynamoAdminTestBase.java @@ -198,6 +198,23 @@ public void getTableMetadata_ShouldReturnCorrectTableMetadata() throws Execution assertThat(actualRequest.consistentRead()).isTrue(); } + // https://github.com/scalar-labs/scalardb/issues/784 + @Test + public void namespaceExists_ShouldPerformExactMatch() throws ExecutionException { + // Arrange + ListTablesResponse listTablesResponse = mock(ListTablesResponse.class); + when(client.listTables(any(ListTablesRequest.class))).thenReturn(listTablesResponse); + when(listTablesResponse.lastEvaluatedTableName()).thenReturn(null); + when(listTablesResponse.tableNames()) + .thenReturn(ImmutableList.builder().add(getFullTableName()).build()); + + // Act + // Assert + assertThat(admin.namespaceExists(NAMESPACE)).isTrue(); + // compare with namespace prefix + assertThat(admin.namespaceExists(NAMESPACE.substring(0, NAMESPACE.length() - 1))).isFalse(); + } + @Test public void dropNamespace_ShouldDropAllTablesInNamespace() throws ExecutionException { // Arrange