diff --git a/java/google/registry/tools/server/DeleteEntityAction.java b/java/google/registry/tools/server/DeleteEntityAction.java index 2491f951f..cdcca8276 100644 --- a/java/google/registry/tools/server/DeleteEntityAction.java +++ b/java/google/registry/tools/server/DeleteEntityAction.java @@ -99,8 +99,15 @@ public class DeleteEntityAction implements Runnable { } private Optional loadOfyEntity(Key rawKey) { - EntityMetadata metadata = ofy().factory().getMetadata(rawKey.getKind()); - return Optional.ofNullable(metadata == null ? null : ofy().load().key(create(rawKey)).now()); + try { + EntityMetadata metadata = ofy().factory().getMetadata(rawKey.getKind()); + return Optional.ofNullable(metadata == null ? null : ofy().load().key(create(rawKey)).now()); + } catch (Throwable e) { + logger.atWarning().withCause(e).log( + "Could not load entity with key %s using Objectify; falling back to raw Datastore.", + rawKey); + return Optional.empty(); + } } private Optional loadRawEntity(Key rawKey) { diff --git a/javatests/google/registry/tools/server/DeleteEntityActionTest.java b/javatests/google/registry/tools/server/DeleteEntityActionTest.java index a1626a600..ac53ff4ab 100644 --- a/javatests/google/registry/tools/server/DeleteEntityActionTest.java +++ b/javatests/google/registry/tools/server/DeleteEntityActionTest.java @@ -66,6 +66,17 @@ public class DeleteEntityActionTest { .isEqualTo("Deleted 0 raw entities and 1 registered entities"); } + @Test + public void test_deletePolymorphicEntity_fallbackSucceedsForUnregisteredType() { + Entity entity = new Entity("single", "raw"); + entity.setIndexedProperty("^d", "UnregType"); + getDatastoreService().put(entity); + action.rawKeys = KeyFactory.keyToString(entity.getKey()); + action.run(); + assertThat(response.getPayload()) + .isEqualTo("Deleted 1 raw entities and 0 registered entities"); + } + @Test public void test_deleteOneRawEntityAndOneRegisteredEntitySuccessfully() { Entity entity = new Entity("first", "raw");