Haiwen Xu

23 papers B 1Journal 11Unranked 11
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Sci. Comput.
Yanmei Li, Haiwen Xu, Wenxing Zhang
2025 J jnl
Paladyn J. Behav. Robotics
Xijun Ke, Jiajun Wen, Haiwen Xu, Bing Zhang
2025 J jnl
J. Sci. Comput.
Zengyun Shan, Haiwen Xu, Junfeng Yang
2025 J jnl
Sci. China Inf. Sci.
Xiao Yu, Ni Zhong, Yan Cheng, Tianjiao Xin, Qing Luo, Tiancheng Gong, Jiezhi Chen, Jixuan Wu, Ran Cheng, Zhiyuan Fu, Kechao Tang, Jin Luo, Tianling Ren, Fei Xue, Lin Chen, Tianyu Wang, Xueqing Li, Xiuyan Li, Ping Wang, Xinqiang Wang, Jie Sun, Anquan Jiang, Peiyuan Du, Bing Chen, Chengji Jin, Jiajia Chen, Haoji Qian, Wei Mao, Siying Zheng, Huan Liu, Haiwen Xu, Can Liu, Zhihao Shen, Xiaoxi Li, Bochang Li, Zheng-Dong Luo, Jiuren Zhou, Yan Liu, Yue Hao, Genquan Han
2025 J jnl
IEEE Trans. Netw. Sci. Eng.
Xian Zhang, Xiaolin Qin, Haiwen Xu, Lin Li
2024 conf
WWW (Companion Volume)
Feihu Huang, Peiyu Yi, Shan Li, Haiwen Xu
2024 conf
VLSI Technology and Circuits
Gerui Zheng, Enze Zhang, Rami Khazaka, Kaizhen Han, Haiwen Xu, Yuxuan Wang, Hyunsoo Yang, Xiao Gong
2024 conf
ICAICE
Tangxu Lu, Haiwen Xu, Yunxiang Zhao
2024 J jnl
Ann. Oper. Res.
Lili Wang, Min Li, Guanbin Kong, Haiwen Xu
2024 J jnl
Asia Pac. J. Oper. Res.
Danqing Zhou, Haiwen Xu, Jun-Feng Yang
2024 J jnl
Knowl. Based Syst.
Rui Li, Yaowen Hu, Lin Li, Renxiang Guan, Ruoli Yang, Jialei Zhan, Weiwei Cai, Yanfeng Wang, Haiwen Xu, Liujun Li
2023 conf
ICBAR
Yanbin Pan, Haiwen Xu, Hao Yan, Yue Wang, Jide Qian
2023 J jnl
IEEE Internet Things J.
Liangji Zhang, Chao Lu, Haiwen Xu, Aibin Chen, Liujun Li, Guoxiong Zhou
2023 conf
VLSI Technology and Circuits
Gerui Zheng, Yuxuan Wang, Haiwen Xu, Rami Khazaka, Lutz Muehlenbein, Sheng Luo, Xuanqi Chen, Rui Shao, Zijie Zheng, Gengchiau Liang, Xiao Gong
2022 conf
VLSI Technology and Circuits
Haiwen Xu, Rami Khazaka, Jishen Zhang, Zijie Zheng, Yue Chen, Xiao Gong
2022 conf
VLSI Technology and Circuits
Chengkuan Wang, Annie Kumar, Kaizhen Han, Chen Sun, Haiwen Xu, Jishen Zhang, Yuye Kang, Qiwen Kong, Zijie Zheng, Yuxuan Wang, Xiao Gong
2022 conf
VLSI Technology and Circuits
Jishen Zhang, Haiwen Xu, Kian Hua Tan, Satrio Wicaksono, Qiwen Kong, Gong Zhang, Yue Chen, Chen Sun, Haibo Wang, Chao Wang, Zijie Zheng, Leming Jiao, Zuopu Zhou, Charles Ci Wen Lim, Soon-Fatt Yoon, Xiao Gong
2022 conf
ICICDT
Xuanqi Chen, Jishen Zhang, Haiwen Xu, Rui Shao, Yuxuan Wang, Gerui Zheng, Xiao Gong
2021 conf
VLSI Circuits
Jishen Zhang, Haiwen Xu, Gong Zhang, Yue Chen, Haibo Wang, Kian Hua Tan, Satrio Wicaksono, Chao Wang, Chen Sun, Qiwen Kong, Charles Ci Wen Lim, Soon-Fatt Yoon, Xiao Gong
2015 B conf
SMC
Haiwen Xu, Songchen Han, Yong Zhang, Jianguang Li
2014 J jnl
Optim. Lett.
Haiwen Xu, Min Li
2013 J jnl
J. Appl. Math.
Qingshan You, Qun Wan, Haiwen Xu
2009 conf
CSO (2)
Yanqiang Wu, Haiwen Xu
redb/s3_utils.py
← Index redb/s3_utils.py python
"""
S3 and file utility functions for REDB.

Contains MinIO/S3 client creation, S3 key generation,
file download, and archive extraction helpers.
"""
import os
import tempfile
from typing import Optional, List

from minio import Minio
from minio.error import S3Error


def get_minio_client():
    """Create and return a Minio client using credentials from .env file"""
    return Minio(
        endpoint=os.getenv("S3_ENDPOINT"),
        access_key=os.getenv("S3_ACCESS_KEY"),
        secret_key=os.getenv("S3_SECRET_KEY"),
        secure=os.getenv("S3_SECURE", "false").lower() == "true"
    )


def generate_s3_key_from_hash(sample_hash: str) -> str:
    """
    Generate S3 key from hash using sharding structure.
    Example: 09f7d02a3c2382199458c98a62b045145ee54ab6aba86166aecf3d10c3c1444c
    becomes: 09/f7/09f7d02a3c2382199458c98a62b045145ee54ab6aba86166aecf3d10c3c1444c.zip
    """
    if len(sample_hash) < 4:
        raise ValueError(f"Hash too short for sharding: {sample_hash}")

    # Create sharded path: first 2 chars / next 2 chars / full_hash.zip
    return f"{sample_hash[:2]}/{sample_hash[2:4]}/{sample_hash}.zip"


def download_s3_object(s3_bucket: str, s3_key: str, temp_dir: str, logger=None) -> Optional[str]:
    """
    Download an object from S3 to a local temporary directory and return the local path.
    If the .zip file is not found, automatically tries .7z as a fallback for legacy uploads.
    """
    try:
        minio_client = get_minio_client()
        local_path = os.path.join(temp_dir, os.path.basename(s3_key))

        # Download the file
        minio_client.fget_object(s3_bucket, s3_key, local_path)

        return local_path
    except S3Error as e:
        # If .zip not found and error is NoSuchKey, try .7z fallback
        if e.code == 'NoSuchKey' and s3_key.endswith('.zip'):
            s3_key_7z = s3_key[:-4] + '.7z'  # Replace .zip with .7z
            if logger:
                logger.info(f".zip not found, trying .7z fallback: {s3_key_7z}")
            try:
                local_path_7z = os.path.join(temp_dir, os.path.basename(s3_key_7z))
                minio_client.fget_object(s3_bucket, s3_key_7z, local_path_7z)
                if logger:
                    logger.info(f"Successfully downloaded .7z fallback: {s3_key_7z}")
                return local_path_7z
            except S3Error as e2:
                if logger:
                    logger.error(f"Failed to download S3 object {s3_key} (tried both .zip and .7z): {e2}")
                else:
                    print(f"[ERROR] Failed to download S3 object {s3_key} (tried both .zip and .7z): {e2}")
                return None
        else:
            if logger:
                logger.error(f"Failed to download S3 object {s3_key}: {e}")
            else:
                print(f"[ERROR] Failed to download S3 object {s3_key}: {e}")
            return None


def extract_fat_slices(macho, output_dir: str, logger) -> List[tuple]:
    """
    Extract slices from FAT Mach-O binary using machofile's dump_slices() API.

    Args:
        macho: Parsed machofile.UniversalMachO object
        output_dir: Directory to write slice files
        logger: Logger instance

    Returns:
        List of (arch_name, slice_path, slice_sha256, slice_md5, slice_sha1) tuples
    """
    result = []
    try:
        # Use machofile's dump_slices API (v2026.2.5+)
        slices = macho.dump_slices(output_dir=output_dir)
        logger.debug(f"Extracted {len(slices)} slices from FAT binary")

        for arch_name, slice_path in slices:
            # Get hash info for this slice from machofile
            general_info = macho.get_general_info(arch=arch_name)
            slice_sha256 = general_info.get('SHA256')
            slice_md5 = general_info.get('MD5')
            slice_sha1 = general_info.get('SHA1')
            result.append((arch_name, slice_path, slice_sha256, slice_md5, slice_sha1))
            logger.debug(f"Slice {arch_name}: {slice_sha256}")

    except Exception as e:
        logger.error(f"Error extracting FAT slices: {e}")

    return result