Skip to content

Conversation

@bootjp
Copy link
Owner

@bootjp bootjp commented Dec 13, 2025

No description provided.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @bootjp, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refines the createNode utility function used in tests, focusing on improving the reliability and predictability of Raft cluster initialization. It introduces mechanisms to control Raft election timing, ensuring a designated leader forms quickly, and adds a crucial step to verify Raft configuration replication across all nodes. These changes collectively make the test environment more stable and robust, particularly for scenarios involving multi-node Raft clusters.

Highlights

  • Raft Election Timing Control: Implemented distinct election timeouts for the initial leader (0s) and followers (10s) during test setup to ensure the designated leader initiates elections promptly and consistently.
  • Raft Configuration Replication Wait: Added a new waitForConfigReplication step in the node creation process to ensure all nodes in the cluster have a consistent Raft configuration before proceeding with further readiness checks.
  • Enhanced Test Setup Robustness: Switched from assert.NoError to require.NoError for critical listener setup calls in setupNodes, ensuring that tests fail immediately if essential components cannot be initialized, leading to more reliable test outcomes.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request improves the test node creation process by making Raft leader election more deterministic and ensuring configuration is replicated before tests proceed. The switch from assert.NoError to require.NoError for critical setup steps is a good improvement for test reliability. I have provided a couple of suggestions to improve the efficiency of the new configuration replication check and to maintain code comment consistency.

I am having trouble creating individual review comments. Click here to see my feedback.

adapter/test_util.go (179-211)

medium

The current implementation for checking configuration replication has a quadratic time complexity (O(N*M)) within assert.Eventually, where N is the number of expected servers and M is the number of current servers. This can be optimized to linear time (O(N+M)) by using a map for lookups. This change improves efficiency and also simplifies the code by removing the need for the containsServer helper function.

func waitForConfigReplication(t *testing.T, cfg raft.Configuration, nodes []Node, waitTimeout, waitInterval time.Duration) {
	t.Helper()

	assert.Eventually(t, func() bool {
		for _, n := range nodes {
			future := n.raft.GetConfiguration()
			if future.Error() != nil {
				return false
			}

			currentServers := future.Configuration().Servers
			if len(currentServers) != len(cfg.Servers) {
				return false
			}

			// Use a map for efficient O(N) lookup to check for set equality.
			currentMap := make(map[raft.ServerID]raft.Server, len(currentServers))
			for _, s := range currentServers {
				currentMap[s.ID] = s
			}

			for _, expectedServer := range cfg.Servers {
				currentServer, ok := currentMap[expectedServer.ID]
				if !ok || expectedServer.Address != currentServer.Address || expectedServer.Suffrage != currentServer.Suffrage {
					return false
				}
			}
		}
		return true
	}, waitTimeout, waitInterval)
}

adapter/test_util.go (255)

medium

For consistency and better maintainability for a wider audience, it's best to write comments in English. Please consider translating this comment.

		// Let the leader start the election first.

@bootjp bootjp changed the title Feature/fix create node fix flaky test Dec 13, 2025
@bootjp bootjp merged commit 03c3597 into main Dec 13, 2025
7 checks passed
@bootjp bootjp deleted the feature/fix-create-node branch December 13, 2025 15:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants