This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new fe378678467 Revert "branch-2.1:[fix](hudi) Fix Memory Leak in 
BitCaskDiskMap Due to Circular Reference" (#48974)
fe378678467 is described below

commit fe378678467ae720d6e83c9dd77bc1fcb49fa12c
Author: Mingyu Chen (Rayner) <morning...@163.com>
AuthorDate: Wed Mar 12 19:07:49 2025 +0800

    Revert "branch-2.1:[fix](hudi) Fix Memory Leak in BitCaskDiskMap Due to 
Circular Reference" (#48974)
    
    Reverts apache/doris#48916
    This is under verification, revert it now
---
 fe/check/checkstyle/suppressions.xml               |   3 -
 .../hudi/common/util/collection/DiskMap.java       | 169 ---------------------
 2 files changed, 172 deletions(-)

diff --git a/fe/check/checkstyle/suppressions.xml 
b/fe/check/checkstyle/suppressions.xml
index bcd034531c6..436b598b594 100644
--- a/fe/check/checkstyle/suppressions.xml
+++ b/fe/check/checkstyle/suppressions.xml
@@ -65,7 +65,4 @@ under the License.
     <suppress files="[\\/]com[\\/]amazonaws[\\/]glue[\\/]catalog[\\/]" 
checks="[a-zA-Z0-9]*"/>
     <suppress 
files="[\\/]com[\\/]aliyun[\\/]datalake[\\/]metastore[\\/]hive2[\\/]" 
checks="[a-zA-Z0-9]*"/>
     <suppress files="FSDataInputStreamWrapper\.java" checks="[a-zA-Z0-9]*"/>
-
-    <!-- ignore hudi disk map copied from 
hudi/common/util/collection/DiskMap.java -->
-    <suppress 
files="org[\\/]apache[\\/]hudi[\\/]common[\\/]util[\\/]collection[\\/]DiskMap\.java"
 checks="[a-zA-Z0-9]*"/>
 </suppressions>
diff --git 
a/fe/fe-core/src/main/java/org/apache/hudi/common/util/collection/DiskMap.java 
b/fe/fe-core/src/main/java/org/apache/hudi/common/util/collection/DiskMap.java
deleted file mode 100644
index 24dc07bcc81..00000000000
--- 
a/fe/fe-core/src/main/java/org/apache/hudi/common/util/collection/DiskMap.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hudi.common.util.collection;
-
-import org.apache.hudi.common.util.FileIOUtils;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.stream.Stream;
-
-/* Copied From
- * 
https://github.com/apache/hudi/blob/master/hudi-common/src/main/java/org/apache/hudi/common/util/collection/DiskMap.java
- * Doris Modification.
- * Use Static cleaner class to avoid circular references in shutdown hooks
- */
-
-/**
- * This interface provides the map interface for storing records in disk after
- * they
- * spill over from memory. Used by {@link ExternalSpillableMap}.
- *
- * @param <T> The generic type of the keys
- * @param <R> The generic type of the values
- */
-public abstract class DiskMap<T extends Serializable, R extends Serializable> 
implements Map<T, R>, Iterable<R> {
-
-  private static final Logger LOG = LoggerFactory.getLogger(DiskMap.class);
-  private static final String SUBFOLDER_PREFIX = "hudi";
-  private final File diskMapPathFile;
-  private transient Thread shutdownThread = null;
-
-  // Base path for the write file
-  protected final String diskMapPath;
-
-  public DiskMap(String basePath, String prefix) throws IOException {
-    this.diskMapPath = String.format("%s/%s-%s-%s", basePath, 
SUBFOLDER_PREFIX, prefix, UUID.randomUUID().toString());
-    diskMapPathFile = new File(diskMapPath);
-    FileIOUtils.deleteDirectory(diskMapPathFile);
-    FileIOUtils.mkdir(diskMapPathFile);
-    // Make sure the folder is deleted when JVM exits
-    diskMapPathFile.deleteOnExit();
-    addShutDownHook();
-  }
-
-  /**
-   * Register shutdown hook to force flush contents of the data written to
-   * FileOutputStream from OS page cache
-   * (typically 4 KB) to disk.
-   */
-  private void addShutDownHook() {
-    // Register this disk map path with the static cleaner instead of using an
-    // instance-specific hook
-    DiskMapCleaner.registerForCleanup(diskMapPath);
-  }
-
-  /**
-   * @returns a stream of the values stored in the disk.
-   */
-  abstract Stream<R> valueStream();
-
-  /**
-   * Number of bytes spilled to disk.
-   */
-  abstract long sizeOfFileOnDiskInBytes();
-
-  /**
-   * Close and cleanup the Map.
-   */
-  public void close() {
-    cleanup(false);
-  }
-
-  /**
-   * Cleanup all resources, files and folders
-   * triggered by shutdownhook.
-   */
-  private void cleanup() {
-    cleanup(true);
-  }
-
-  /**
-   * Cleanup all resources, files and folders.
-   */
-  private void cleanup(boolean isTriggeredFromShutdownHook) {
-    // Reuse the static cleaner method to clean the directory
-    DiskMapCleaner.cleanupDirectory(diskMapPath);
-
-    // Deregister from the static cleaner
-    if (!isTriggeredFromShutdownHook) {
-      DiskMapCleaner.deregisterFromCleanup(diskMapPath);
-    }
-  }
-
-  /**
-   * Static cleaner class to avoid circular references in shutdown hooks
-   */
-  private static class DiskMapCleaner {
-    private static final Logger CLEANER_LOG = 
LoggerFactory.getLogger(DiskMapCleaner.class);
-    private static final Set<String> PATHS_TO_CLEAN = 
Collections.synchronizedSet(new HashSet<>());
-    private static final Thread SHUTDOWN_HOOK;
-
-    static {
-      // Register a single JVM-wide shutdown hook that handles all paths
-      SHUTDOWN_HOOK = new Thread(() -> {
-        synchronized (PATHS_TO_CLEAN) {
-          PATHS_TO_CLEAN.forEach(DiskMapCleaner::cleanupDirectory);
-          PATHS_TO_CLEAN.clear();
-        }
-      });
-      Runtime.getRuntime().addShutdownHook(SHUTDOWN_HOOK);
-    }
-
-    /**
-     * Register a path to be cleaned up when JVM exits
-     * 
-     * @param directoryPath Path to register for cleanup
-     */
-    public static void registerForCleanup(String directoryPath) {
-      PATHS_TO_CLEAN.add(directoryPath);
-    }
-
-    /**
-     * Deregister a path from cleanup when it's manually cleaned
-     * 
-     * @param directoryPath Path to deregister from cleanup
-     */
-    public static void deregisterFromCleanup(String directoryPath) {
-      PATHS_TO_CLEAN.remove(directoryPath);
-    }
-
-    /**
-     * Static cleanup method that doesn't hold references to DiskMap instances
-     * 
-     * @param directoryPath Path to the directory that needs to be cleaned up
-     */
-    public static void cleanupDirectory(String directoryPath) {
-      try {
-        FileIOUtils.deleteDirectory(new File(directoryPath));
-      } catch (IOException exception) {
-        CLEANER_LOG.warn("Error while deleting the disk map directory=" + 
directoryPath, exception);
-      }
-    }
-  }
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to