[BUG] Cluster master election scheduler can stop after one renewal exception

Open Beginner friendly
#6,495 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
78/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Quiet
Tech stack
java

Research direction

Start by reading shenyu-admin/src/main/java/org/apache/shenyu/admin/mode/cluster/service/ShenyuClusterService.java, focusing on startSelectMasterTask() and doSelectMaster(). Trace how the scheduled task handles renewal exceptions; done means errors are logged without terminating future scheduled election attempts.

Written by the indexing model from the issue text.

Description

Current Behavior

Cluster master election/renewal can stop permanently after one exception escapes the scheduled task.

ShenyuClusterService.startSelectMasterTask() schedules master selection with scheduleAtFixedRate(...):

executorService.scheduleAtFixedRate(() -> doSelectMaster(host, port, contextPath), ...);

doSelectMaster() catches exceptions, closes the check services, and then throws a new ShenyuException:

} catch (Exception e) {
    LOG.error("select master error", e);
    upstreamCheckService.close();
    instanceCheckService.close();
    throw new ShenyuException(...);
}

For ScheduledThreadPoolExecutor, an exception escaping a fixed-rate task suppresses later executions of that periodic task. A transient lock/renewal failure can therefore stop future master selection attempts in that process.

Expected Behavior

Master election/renewal errors should be logged and the next scheduled election attempt should still run. Exceptions should not escape the periodic scheduler task.

Impact

After a transient cluster backend failure, the admin node may stop participating in master election until it is restarted.

Code Location
  • shenyu-admin/src/main/java/org/apache/shenyu/admin/mode/cluster/service/ShenyuClusterService.java
    • startSelectMasterTask() schedules the periodic task.
    • doSelectMaster() rethrows from the catch block.
Dominant language
Java
Stars
8.8k
Forks
3.1k
Avg merge
4d 11h
Merged PRs (30d)
85

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/shenyu

All issues in apache/shenyu

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.