Skip to content

Conversation

@ningmingxiao
Copy link
Contributor

@ningmingxiao ningmingxiao commented Nov 25, 2025

I find len(mcsList) == int(catRange*(catRange-1)/2) will cause uniqMcs use all cpu.
for example

package main

import (
	"crypto/rand"
	"encoding/binary"
	"fmt"
	"sync"
)

var mcsLock sync.Mutex
var mcsList map[string]bool

func main() {
	mcsList = make(map[string]bool)
	for i:=0;i<1000;i++{
		uniqMcs(10)
	}
}

func uniqMcs(catRange uint32) string {
	var (
		n      uint32
		c1, c2 uint32
		mcs    string
	)
	for {
		binary.Read(rand.Reader, binary.LittleEndian, &n)
		c1 = n % catRange
		binary.Read(rand.Reader, binary.LittleEndian, &n)
		c2 = n % catRange
		if c1 == c2 {
			continue
		} else {
			if c1 > c2 {
				t := c1
				c1 = c2
				c2 = t
			}
		}
		mcs = fmt.Sprintf("s0:c%d,c%d", c1, c2)
		if err := mcsAdd(mcs); err != nil {
			// if len(mcsList) == int(catRange*(catRange-1)/2) {
			// 	time.Sleep(time.Second)
			// }
			fmt.Println(len(mcsList))
			continue
		}
		break
	}
	return mcs
}

func mcsAdd(mcs string) error {
	mcsLock.Lock()
	defer mcsLock.Unlock()
	fmt.Println(len(mcsList))
	if mcsList[mcs] {
		return fmt.Errorf("MCS Label already exists")
	}
	mcsList[mcs] = true
	return nil
}

Signed-off-by: ningmingxiao <[email protected]>
@ningmingxiao
Copy link
Contributor Author

we just need return an error see #246

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.

1 participant