Skip to content

Commit

Permalink
feat: segment sequence support define initial value (#281)
Browse files Browse the repository at this point in the history
  • Loading branch information
dk-lockdown committed Dec 17, 2022
1 parent 9962372 commit 6655483
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 6 deletions.
8 changes: 4 additions & 4 deletions pkg/sequence/segment.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const (
" PRIMARY KEY ( `business_id` )" +
");"
segmentExits = "SELECT EXISTS (SELECT 1 FROM `segment` WHERE `biz_id` = ?)"
insertSegment = "INSERT INTO `segment`(`biz_id`, `step`, `max_id`) VALUES (?, ?, 1)"
insertSegment = "INSERT INTO `segment`(`biz_id`, `step`, `max_id`) VALUES (?, ?, ?)"
selectSegment = "SELECT max_id FROM segment WHERE biz_id = ? FOR UPDATE"
updateSegment = "UPDATE segment SET max_id = ? WHERE biz_id = ? AND max_id = ?"
)
Expand All @@ -47,7 +47,7 @@ type SegmentWorker struct {
step int64
}

func NewSegmentWorker(dsn string, len int64, biz string) (*SegmentWorker, error) {
func NewSegmentWorker(dsn string, from, len int64, biz string) (*SegmentWorker, error) {
db, err := sql.Open("mysql", dsn)
if err != nil {
return nil, err
Expand All @@ -66,7 +66,7 @@ func NewSegmentWorker(dsn string, len int64, biz string) (*SegmentWorker, error)
}
}
if !exists {
if _, err := db.ExecContext(context.Background(), insertSegment, biz, len); err != nil {
if _, err := db.ExecContext(context.Background(), insertSegment, biz, len, from); err != nil {
log.Error(err)
return nil, err
}
Expand Down Expand Up @@ -103,8 +103,8 @@ func (w *SegmentWorker) ProduceID() {
}
}

w.buffer <- w.min
w.min++
w.buffer <- w.min
}
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/sequence/segment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (suite *_SegmentTestSuite) SetupSuite() {
suite.T().Fatal(err)
}
dsn := fmt.Sprintf("root:123456@tcp(localhost:%d)/segment", port.Int())
segment, err := NewSegmentWorker(dsn, 1000, "student")
segment, err := NewSegmentWorker(dsn, 0, 1000, "student")
if err != nil {
suite.T().Fatal(err)
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/sequence/sequence.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func NewSequence(generator *config.SequenceGenerator, tableName string) (proto.S
if segmentConfig.Step == 0 {
segmentConfig.Step = 1000
}
return NewSegmentWorker(segmentConfig.DSN, segmentConfig.Step, tableName)
return NewSegmentWorker(segmentConfig.DSN, segmentConfig.From, segmentConfig.Step, tableName)
case config.Snowflake:
var (
err error
Expand All @@ -49,6 +49,7 @@ func NewSequence(generator *config.SequenceGenerator, tableName string) (proto.S

type SegmentConfig struct {
DSN string `yaml:"dsn" json:"dsn"`
From int64 `yaml:"from" json:"from"`
Step int64 `default:"1000" yaml:"step" json:"step"`
}

Expand Down
8 changes: 8 additions & 0 deletions pkg/sequence/snowflake_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ import (
"testing"
)

func TestNextID(t *testing.T) {
worker, err := NewWorker(10)
if err != nil {
t.Error(err)
}
t.Log(worker.NextID())
}

func BenchmarkSnowFlakeNextID(b *testing.B) {
worker, err := NewWorker(10)
if err != nil {
Expand Down

0 comments on commit 6655483

Please sign in to comment.