yuqi1129 commented on code in PR #3986:
URL: https://github.com/apache/gravitino/pull/3986#discussion_r1716645913


##########
core/src/main/java/org/apache/gravitino/storage/relational/JDBCBackend.java:
##########
@@ -210,32 +231,45 @@ public <E extends Entity & HasIdentifier> E get(
   }
 
   @Override
-  public boolean delete(NameIdentifier ident, Entity.EntityType entityType, 
boolean cascade)
-      throws IOException {
-    switch (entityType) {
-      case METALAKE:
-        return MetalakeMetaService.getInstance().deleteMetalake(ident, 
cascade);
-      case CATALOG:
-        return CatalogMetaService.getInstance().deleteCatalog(ident, cascade);
-      case SCHEMA:
-        return SchemaMetaService.getInstance().deleteSchema(ident, cascade);
-      case TABLE:
-        return TableMetaService.getInstance().deleteTable(ident);
-      case FILESET:
-        return FilesetMetaService.getInstance().deleteFileset(ident);
-      case TOPIC:
-        return TopicMetaService.getInstance().deleteTopic(ident);
-      case USER:
-        return UserMetaService.getInstance().deleteUser(ident);
-      case GROUP:
-        return GroupMetaService.getInstance().deleteGroup(ident);
-      case ROLE:
-        return RoleMetaService.getInstance().deleteRole(ident);
-      case TAG:
-        return TagMetaService.getInstance().deleteTag(ident);
-      default:
-        throw new UnsupportedEntityTypeException(
-            "Unsupported entity type: %s for delete operation", entityType);
+  public boolean delete(NameIdentifier ident, Entity.EntityType entityType, 
boolean cascade) {
+    // Invalidate the cache first
+    EntityIdentifier entityIdentifier = EntityIdentifier.of(ident, entityType);
+    NameIdMappingService.getInstance().invalidate(entityIdentifier);
+    if (cascade) {
+      // Remove all the children entities in the cache;
+      
NameIdMappingService.getInstance().invalidateWithPrefix(entityIdentifier);
+    }
+
+    try {
+      switch (entityType) {
+        case METALAKE:
+          return MetalakeMetaService.getInstance().deleteMetalake(ident, 
cascade);
+        case CATALOG:
+          return CatalogMetaService.getInstance().deleteCatalog(ident, 
cascade);
+        case SCHEMA:
+          return SchemaMetaService.getInstance().deleteSchema(ident, cascade);
+        case TABLE:
+          return TableMetaService.getInstance().deleteTable(ident);
+        case FILESET:
+          return FilesetMetaService.getInstance().deleteFileset(ident);
+        case TOPIC:
+          return TopicMetaService.getInstance().deleteTopic(ident);
+        case USER:
+          return UserMetaService.getInstance().deleteUser(ident);
+        case GROUP:
+          return GroupMetaService.getInstance().deleteGroup(ident);
+        case ROLE:
+          return RoleMetaService.getInstance().deleteRole(ident);
+        case TAG:
+          return TagMetaService.getInstance().deleteTag(ident);
+        default:
+          throw new UnsupportedEntityTypeException(
+              "Unsupported entity type: %s for delete operation", entityType);
+      }
+    } finally {
+      // Remove the entity from the cache again because we may add the cache 
during the deletion
+      // process
+      
NameIdMappingService.getInstance().invalidateWithPrefix(entityIdentifier);

Review Comment:
   Could you provide more details for the sentence `We write the slow storage 
first, then write the fast storage.`?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to