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

gfphoenix78 pushed a commit to branch sync-with-upstream
in repository https://gitbox.apache.org/repos/asf/cloudberry-gpbackup.git


The following commit(s) were added to refs/heads/sync-with-upstream by this 
push:
     new 2bc6f7aa fix(backup): Use standard LOCK TABLE syntax for Cloudberry 
(#28)
2bc6f7aa is described below

commit 2bc6f7aadb71435e0fe61ad973ad3dcca54b9bb3
Author: Robert Mu <db...@hotmail.com>
AuthorDate: Thu Aug 28 20:40:09 2025 +0800

    fix(backup): Use standard LOCK TABLE syntax for Cloudberry (#28)
    
    Temporarily modifies the table locking logic to use a standard
    `LOCK TABLE ... IN ACCESS SHARE MODE` command when running against
    Cloudberry.
    
    This change is necessary because Cloudberry, which is based on
    PostgreSQL 14, does not support the `COORDINATOR ONLY` clause that was
    introduced in GPDB 7 as a performance optimization. The use of this
    unsupported syntax was causing `gpbackup` to panic during the initial
    table locking phase.
    
    A TODO comment has been added to both modified functions (`LockTables`
    and `LockTableNoWait`) to indicate that this is a workaround. The logic
    should be reverted to use the `COORDINATOR ONLY` optimization once
    Cloudberry implements this feature for feature and performance parity
    with GPDB 7.
    
    See https://github.com/apache/cloudberry/issues/1265
---
 backup/data.go              | 8 +++++++-
 backup/queries_relations.go | 8 +++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/backup/data.go b/backup/data.go
index be6d9ba2..bcd4c786 100644
--- a/backup/data.go
+++ b/backup/data.go
@@ -371,7 +371,13 @@ func GetBackupDataSet(tables []Table) ([]Table, int64) {
 // the lock, the call will fail instead of block. Return the failure for 
handling.
 func LockTableNoWait(dataTable Table, connNum int) error {
        var lockMode string
-       if (connectionPool.Version.IsGPDB() && 
connectionPool.Version.AtLeast("7")) || connectionPool.Version.IsCBDB() {
+       // TODO: This is a temporary workaround. Cloudberry should support the
+       // COORDINATOR ONLY syntax to align with GPDB 7+ for performance 
optimization
+       // during the table locking phase. Revert this to the combined GPDB 7+ 
condition
+       // once Cloudberry adds this feature.
+       if connectionPool.Version.IsCBDB() {
+               lockMode = `IN ACCESS SHARE MODE NOWAIT`
+       } else if connectionPool.Version.IsGPDB() && 
connectionPool.Version.AtLeast("7") {
                lockMode = `IN ACCESS SHARE MODE NOWAIT COORDINATOR ONLY`
        } else if connectionPool.Version.AtLeast("6.21.0") {
                lockMode = `IN ACCESS SHARE MODE NOWAIT MASTER ONLY`
diff --git a/backup/queries_relations.go b/backup/queries_relations.go
index 0b1e37cc..b7a1474e 100644
--- a/backup/queries_relations.go
+++ b/backup/queries_relations.go
@@ -486,7 +486,13 @@ func LockTables(connectionPool *dbconn.DBConn, tables 
[]Relation) {
        lastBatchSize := len(tables) % batchSize
        tableBatches := GenerateTableBatches(tables, batchSize)
        currentBatchSize := batchSize
-       if (connectionPool.Version.IsGPDB() && 
connectionPool.Version.AtLeast("7")) || connectionPool.Version.IsCBDB() {
+       // TODO: This is a temporary workaround. Cloudberry should support the
+       // COORDINATOR ONLY syntax to align with GPDB 7+ for performance 
optimization
+       // during the table locking phase. Revert this to the combined GPDB 7+ 
condition
+       // once Cloudberry adds this feature.
+       if connectionPool.Version.IsCBDB() {
+               lockMode = `IN ACCESS SHARE MODE`
+       } else if connectionPool.Version.IsGPDB() && 
connectionPool.Version.AtLeast("7") {
                lockMode = `IN ACCESS SHARE MODE COORDINATOR ONLY`
        } else if connectionPool.Version.IsGPDB() && 
connectionPool.Version.AtLeast("6.21.0") {
                lockMode = `IN ACCESS SHARE MODE MASTER ONLY`


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

Reply via email to