From c14cbbac10eb3e455dce3db4e52a472634d78de9 Mon Sep 17 00:00:00 2001 From: Sophie Guo Date: Tue, 14 Jan 2025 10:51:20 -0800 Subject: [PATCH] When rename a deleted dataset version, return not found --- .../account/MySqlAccountServiceIntegrationTest.java | 11 +++++++++++ .../com/github/ambry/account/mysql/DatasetDao.java | 6 ++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ambry-account/src/integration-test/java/com/github/ambry/account/MySqlAccountServiceIntegrationTest.java b/ambry-account/src/integration-test/java/com/github/ambry/account/MySqlAccountServiceIntegrationTest.java index 3a785ba245..3f600f8253 100644 --- a/ambry-account/src/integration-test/java/com/github/ambry/account/MySqlAccountServiceIntegrationTest.java +++ b/ambry-account/src/integration-test/java/com/github/ambry/account/MySqlAccountServiceIntegrationTest.java @@ -959,6 +959,17 @@ public void testRenameDatasetVersion() throws Exception { mySqlAccountStore.getDatasetVersion(testAccount.getId(), testContainer.getId(), testAccount.getName(), testContainer.getName(), DATASET_NAME_RENAME, sourceVersion); assertNull("Rename from should be null", datasetVersionRecord.getRenameFrom()); + + //rename a deleted version should return not found + mySqlAccountStore.deleteDatasetVersion(testAccount.getId(), testContainer.getId(), DATASET_NAME_RENAME, sourceVersion); + targetVersion = "5.5.5.5"; + try { + mySqlAccountStore.renameDatasetVersion(testAccount.getId(), testContainer.getId(), testAccount.getName(), + testContainer.getName(), DATASET_NAME_RENAME, renamedSourceVersion, targetVersion); + fail(); + } catch (AccountServiceException e) { + assertEquals("Mismatch on error code", AccountServiceErrorCode.NotFound, e.getErrorCode()); + } } @Test diff --git a/ambry-account/src/main/java/com/github/ambry/account/mysql/DatasetDao.java b/ambry-account/src/main/java/com/github/ambry/account/mysql/DatasetDao.java index ed19d0ccbf..865a123842 100644 --- a/ambry-account/src/main/java/com/github/ambry/account/mysql/DatasetDao.java +++ b/ambry-account/src/main/java/com/github/ambry/account/mysql/DatasetDao.java @@ -158,8 +158,10 @@ public DatasetDao(MySqlDataAccessor dataAccessor, MySqlAccountServiceConfig mySq //copy a dataset version from a source version. //We need to update the modify time so counter based purge policy won't delete it. copyToNewDatasetVersionSql = String.format( - "INSERT INTO %1$s (%2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s) SELECT %2$s, %3$s, %4$s, ?, " - + "%6$s, NOW(3), %8$s, %9$s, ? FROM %1$s WHERE %2$s = ? AND %3$s = ? AND %4$s = ? AND %5$s = ? AND %9$s = ?", + "INSERT INTO %1$s (%2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s) " + + "SELECT %2$s, %3$s, %4$s, ?, %6$s, NOW(3), %8$s, %9$s, ? " + + "FROM %1$s WHERE %2$s = ? AND %3$s = ? AND %4$s = ? AND %5$s = ? AND %9$s = ? " + + "AND (%8$s IS NULL OR %8$s > NOW(3))", DATASET_VERSION_TABLE, ACCOUNT_ID, CONTAINER_ID, DATASET_NAME, VERSION, CREATION_TIME, LAST_MODIFIED_TIME, DELETED_TS, DATASET_VERSION_STATE, RENAME_FROM); //dataset version has in_progress and ready states.