You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Sercan Tekin (Jira)" <ji...@apache.org> on 2026/08/25 15:08:00 UTC

[jira] [Created] (HBASE-30340) CatalogJanitor can run concurrent scans due to incorrect alreadyRunning lock handling

Sercan Tekin created HBASE-30340:
------------------------------------

             Summary: CatalogJanitor can run concurrent scans due to incorrect alreadyRunning lock handling
                 Key: HBASE-30340
                 URL: https://issues.apache.org/jira/browse/HBASE-30340
             Project: HBase
          Issue Type: Bug
          Components: master
    Affects Versions: 0.90.5
            Reporter: Sercan Tekin


`CatalogJanitor.scan()` can allow concurrent scans due to incorrect handling of the
`alreadyRunning` lock.

Currently, the lock acquisition is performed inside the `try` block:

    try {
      if (!alreadyRunning.compareAndSet(false, true)) {
        return -1;
      }
      ...
    } finally {
      alreadyRunning.set(false);
    }

When a scan is already running, a concurrent scan fails the `compareAndSet()` and
returns immediately. However, because the lock acquisition is inside the `try` block,
the `finally` block is still executed and resets `alreadyRunning` to false.

This allows another scan to acquire the lock while the original scan is still running.

The lock acquisition should be moved before the `try` block:

    if (!alreadyRunning.compareAndSet(false, true)) {
      return -1;
    }
    try {
      ...
    } finally {
      alreadyRunning.set(false);
    }

This prevents another scan from starting until the current scan has completed.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)