From 197851d9cd8ffba99fc36727b237b51d05d650bc Mon Sep 17 00:00:00 2001
From: Le Quoc Tuan <mr.lequoctuan@gmail.com>
Date: Tue, 27 May 2025 11:32:33 +0700
Subject: [PATCH] fix: multiple paths is not true random (fix #342)

---
 provisioner.go | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/provisioner.go b/provisioner.go
index ba22720e..e3ce6d85 100644
--- a/provisioner.go
+++ b/provisioner.go
@@ -6,6 +6,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"io"
+	"math/rand/v2"
 	"os"
 	"path/filepath"
 	"reflect"
@@ -251,11 +252,14 @@ func (p *LocalPathProvisioner) getPathOnNode(node string, requestedPath string,
 		return requestedPath, nil
 	}
 	// if no particular path was requested, choose a random one
-	path := ""
-	for path = range paths {
-		break
+	i := rand.IntN(len(paths))
+	for p := range paths {
+		if i == 0 {
+			return p, nil
+		}
+		i--
 	}
-	return path, nil
+	return "", fmt.Errorf("never happens, but compiler doesn't know that")
 }
 
 func (p *LocalPathProvisioner) isSharedFilesystem(c *StorageClassConfig) (bool, error) {
-- 
GitLab