doris icon indicating copy to clipboard operation
doris copied to clipboard

3.1.3 Release Notes

Open morrySnow opened this issue 1 month ago • 5 comments

3.1.3 Release Notes

🚀 New Features

🗄️ Storage & Filesystem

  • Support Azure Blob Storage (#57219)
  • Upgrade libhdfs to 3.4.2 (#57638)
  • Add TotalGetRequestTime profile metric to S3 reader (#57636)

📚 Catalog

  • Support MaxCompute catalog (project-schema-table) (#57286)
  • Refactor HDFS dependency management (move jars to FE) (#57498)

☁️ Cloud Mode

  • Support balance sync warm-up (#57666)
  • Support peer BE cache read in same cluster (#57672)

🧮 SQL Engine & Planner

  • Check SQL regex block rule before plan phase (#57706)

🔢 Functions

  • Enhance EXPLODE function with struct-type support (#57827)

🌐 Web & Platform

  • Adapt Web service to Spring Boot 3 and Jetty 12 (#57822)

⚙️ Optimizations

🧠 Query Execution & Planner

  • Optimize variant cast when only NULL values (#57161)
  • Optimize FROM_UNIXTIME performance (#57573)
  • Improve graceful shutdown behavior and query retry (#57805)

💾 Storage & Compaction

  • Make read slice size configurable (MergeIO) (#57159)
  • Add score threshold for cold data compaction (#57217)
  • Add configurable threshold for small memory task protection (#56994)
  • Improve jemalloc configuration to reduce page faults (#57152)

☁️ Cloud Mode

  • Expose cloud balance metrics (#57352)
  • Optimize create warm-up job logic (#57865)
  • Enhance warm-up job and peer read efficiency (#57554 #57807)

🔍 Index & Search

  • Add custom analyzer support (char_filter, basic & ICU tokenizer) (#57137)
  • Support builtin analyzer names in custom analyzer (#57727)

🧩 Bug Fixes

💽 Storage & File I/O

  • Fix segcompaction coredump when adding key column (#57212)
  • Fix Parquet RLE_DICTIONARY decode performance issue (#57614)
  • Fix schema change expr cache misuse (#57517)
  • Replace tablet report with ForkJoinPool (#57927)

☁️ Cloud Mode

  • Fix cloud pipeline task number calculation (#57261)
  • Fix rebalance residual metrics cleanup (#57438)
  • Skip tablet report when rebalance not inited (#57393)
  • Fix domain user default cluster report error (#57555)
  • Fix wrong private endpoint config (#57675)
  • Fix peer read bugs and thread handling (#57910 #57807)
  • Fix filecache metrics and microbench issues (#57535 #57536)

📚 Catalog

  • Fix MaxCompute predicate pushdown null pointer (#57567)
  • Fix Iceberg client.region and REST credentials issues (#57539)
  • Fix Iceberg catalog NPE and query error (#57796 #57790)
  • Fix Paimon S3 prefix unification and configuration (#57526)
  • Fix JDBC catalog compatibility for zeroDateTimeBehavior (#57731)
  • Fix Parquet schema analysis error (#57500)
  • Fix Parquet all row groups filtered issue (#57646)
  • Fix CSV reader wrong result when escape equals enclose (#57762)
  • Prevent removing catalog from refresh queue (#57671)
  • Fix max_meta_object_cache_num must > 0 config (#57793)

🧮 SQL Engine & Planner

  • Fix constant folding of FROM_UNIXTIME with decimal literal (#57606)
  • Fix MV rewrite fail with group sets and filter (#57674)
  • Fix prepare statement stage only explain SQL (#57504)
  • Release physical plan in Profile.releaseMemory() (#57316)
  • Fix aggregation elimination error when group sets exist (#57885)
  • Fix LargeInt overflow on max_value+1 (#57351)
  • Fix decimal256 overflow when casting to float (#57503)

🔌 Networking & Platform

  • Fix MySQL SSL unwrap infinite loop (#57599)
  • Disable TLS renegotiation in MySQL (#57748)
  • Fix unaligned uint128 constructor (#57430)
  • Fix JNI local/global ref leak (#57597)
  • Make Scanner.close() thread-safe (#57644)
  • Fix exchange coredump due to nullptr (#57698)

🧱 Chores & Infrastructure

  • Deprecated LakeSoul external catalog (#57163)

✅ Summary

Apache Doris 3.1.3 brings major improvements in:

  • Storage compatibility (Azure Blob, Hadoop 3.4.2, S3 metric support)
  • Cloud performance and reliability (warm-up, rebalance, peer cache)
  • SQL planner stability
  • Dependency modernization and security hardening

This release greatly enhances stability, performance, and cloud-native integration across hybrid data environments.


Full Changelog: [apache/[email protected]](https://github.com/apache/doris/compare/3.1.2-rc01...3.1.3-rc01)


Contributors

@0AyanamiRei @BiteTheDDDDt @CalvinKirs @Gabriel39 @HappenLee @JNSimba @Jibing-Li @TangSiyang2001 @Yukang-Lian @bobhan1 @cambyzju @csun5285 @dataroaring @deardeng @englefly @felixwluo @freemandealer @gavinchou @hubgeter @jacktengg @kaka11chen @liaoxin01 @linrrzqqq @liutang123 @luwei16 @morningman @morrySnow @mrhhsg @mymeiyi @qzsee @seawinde @sollhui @starocean999 @suxiaogang223 @wenzhenghu @wyxxxcat @zclllyybb @zhangstar333 @zy-kkk @zzzxl1993

morrySnow avatar Nov 13 '25 07:11 morrySnow

Hello @morrySnow,

Could you please show an example on how to use an Azure Storage vault? Does this doc still hold - https://doris.apache.org/docs/dev/sql-manual/sql-statements/cluster-management/storage-management/CREATE-STORAGE-VAULT#8-create-azure-storage-vault?

I just tried to run Doris 4.0.1 on Azure Kubernetes Service with Azure Vault as a storage in storage computed decoupled mode.

CREATE STORAGE VAULT IF NOT EXISTS azure_vault
PROPERTIES (
    "type" = "S3",
    "s3.endpoint" = "mystorageaccount.blob.core.windows.net",
    "s3.access_key" = "mystorageaccount",
    "s3.secret_key" = "myaccountkey", 
    "s3.root.path" = "doris",
    "s3.region" = "eu-west-1",  
    "s3.bucket" = "mystorageaccount",
    "provider" = "azure"
);

After, I added azure vault, the compute group crashes with the following error log :

F20251118 10:19:04.645164 209 s3_util.cpp:255] BE is not compiled with azure support, export BUILD_AZURE=ON before building
I20251118 10:19:05.449136 209 daemon.cpp:231] sys physical memory 3.00 GB. process memory used 1.11 GB(= 1.11 GB[vm/rss] + 0[reserved] + 0B[waiting_refresh]), limit 2.70 GB, soft limit 2.43 GB. sys available memory 2.16 GB(= 2.16 GB[proc/available] - 0[reserved] - 0B[waiting_refresh]), low water mark 153.60 MB,

Nj-kol avatar Nov 18 '25 10:11 Nj-kol

@Nj-kol I just stood up a disagragated storage cluster using azure blob and had to make a few changes.

Your provider needs to be AZURE seems the case matters

The docs say this

CREATE STORAGE VAULT IF NOT EXISTS azure_demo_vault
PROPERTIES (
    "type" = "S3",                                       -- required
    "s3.endpoint" = "blob.core.windows.net",             -- required
    "s3.access_key" = "xxxxxx",                          -- required,  Your Azure AccountName
    "s3.secret_key" = "xxxxxx",                          -- required,  Your Azure AccountKey
    "s3.region" = "us-east-1",                           -- required
    "s3.root.path" = "azure_demo_vault_prefix",          -- required
    "s3.bucket" = "xxxxxx",                              -- required,  Your Azure StorageAccount
    "provider" = "AZURE"                                 -- required
);

My example looks like this, the major change was that you MUST put the storage account name in the endpoint

              CREATE STORAGE VAULT IF NOT EXISTS azure_vault
              PROPERTIES (
                  "type" = "S3",
                  "s3.endpoint" = "${STORAGE_ACCOUNT}.blob.core.windows.net",
                  "s3.access_key" = "${STORAGE_ACCOUNT}",
                  "s3.secret_key" = "${AZURE_STORAGE_ACCOUNT_KEY}",
                  "s3.region" = "us-east-1",
                  "s3.bucket" = "${AZURE_CONTAINER}",
                  "s3.root.path" = "doris-${PROFILE}-${REGION}",
                  "provider" = "AZURE"
              );

These are the definitions of my variables

STORAGE_ACCOUNT = dorisstoragebucket
AZURE_STORAGE_ACCOUNT_KEY = xxxxxxxxxxxxxx
AZURE_CONTAINER = blob_container
PROFILE = dev, qa, prod, etc
REGION = eastus, eastus2, etc

AZURE_STORAGE_ACCOUNT_KEY is the secret in the vault mounted with eso PROFILE and REGION are specific to my deployment these can be what ever.

I also had to set specific configuration to make this work in fe and be, i set it in ms just to be safe. Without the below setting configured the fe and be both balked trying to connect to the wrong endpoints or the the http endpoints.

force_azure_blob_global_endpoint = true

Also based on this

F20251118 10:19:04.645164 209 s3_util.cpp:255] BE is not compiled with azure support, export BUILD_AZURE=ON before building

I would bet you are running on ARM, i was not able to make this run on ARM using azure blob, you will need to use x86.

plastikman avatar Dec 10 '25 16:12 plastikman

I also just ran into this (upgrade to 4.0.1), seems that the 4.0.1 branch was released after this, and the code made it into 4.0.1 but the images were not built with BUILD_AZURE=ON :(

plastikman avatar Dec 10 '25 18:12 plastikman

@Nj-kol I just stood up a disagragated storage cluster using azure blob and had to make a few changes.

Your provider needs to be AZURE seems the case matters

The docs say this

CREATE STORAGE VAULT IF NOT EXISTS azure_demo_vault
PROPERTIES (
    "type" = "S3",                                       -- required
    "s3.endpoint" = "blob.core.windows.net",             -- required
    "s3.access_key" = "xxxxxx",                          -- required,  Your Azure AccountName
    "s3.secret_key" = "xxxxxx",                          -- required,  Your Azure AccountKey
    "s3.region" = "us-east-1",                           -- required
    "s3.root.path" = "azure_demo_vault_prefix",          -- required
    "s3.bucket" = "xxxxxx",                              -- required,  Your Azure StorageAccount
    "provider" = "AZURE"                                 -- required
);

My example looks like this, the major change was that you MUST put the storage account name in the endpoint

              CREATE STORAGE VAULT IF NOT EXISTS azure_vault
              PROPERTIES (
                  "type" = "S3",
                  "s3.endpoint" = "${STORAGE_ACCOUNT}.blob.core.windows.net",
                  "s3.access_key" = "${STORAGE_ACCOUNT}",
                  "s3.secret_key" = "${AZURE_STORAGE_ACCOUNT_KEY}",
                  "s3.region" = "us-east-1",
                  "s3.bucket" = "${AZURE_CONTAINER}",
                  "s3.root.path" = "doris-${PROFILE}-${REGION}",
                  "provider" = "AZURE"
              );

These are the definitions of my variables

STORAGE_ACCOUNT = dorisstoragebucket
AZURE_STORAGE_ACCOUNT_KEY = xxxxxxxxxxxxxx
AZURE_CONTAINER = blob_container
PROFILE = dev, qa, prod, etc
REGION = eastus, eastus2, etc

AZURE_STORAGE_ACCOUNT_KEY is the secret in the vault mounted with eso PROFILE and REGION are specific to my deployment these can be what ever.

I also had to set specific configuration to make this work in fe and be, i set it in ms just to be safe. Without the below setting configured the fe and be both balked trying to connect to the wrong endpoints or the the http endpoints.

force_azure_blob_global_endpoint = true

Also based on this

F20251118 10:19:04.645164 209 s3_util.cpp:255] BE is not compiled with azure support, export BUILD_AZURE=ON before building

I would bet you are running on ARM, i was not able to make this run on ARM using azure blob, you will need to use x86.

Hi @plastikman thank you so much for your detailed reply on this. I had got this working fortuntelty from this blog - https://ai.feishu.cn/docx/ULT8dYXKtoP1MrxSeNwcEYgVn0d

I just wish the official doc had this level of clarity. For me, it has worked even without force_azure_blob_global_endpoint=true.

Also, for doris 4.x, I struggled to make it work and ultimatelty downgraded to 3.x

Nj-kol avatar Dec 11 '25 08:12 Nj-kol

I ended up building the be and ms for 4.0.1 with BUILD_AZURE=ON and it worked. I will hope that in 4.0.2 the BUILD_AZURE=ON will be set :)

plastikman avatar Dec 11 '25 20:12 plastikman