MCPcopy
hub / github.com/benbjohnson/litestream / generateLoad

Method generateLoad

cmd/litestream-test/load.go:77–122  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

75}
76
77func (c *LoadCommand) generateLoad(ctx context.Context) error {
78 db, err := sql.Open("sqlite3", c.DB+"?_journal_mode=WAL")
79 if err != nil {
80 return fmt.Errorf("open database: %w", err)
81 }
82 defer db.Close()
83
84 db.SetMaxOpenConns(c.Workers + 1)
85 db.SetMaxIdleConns(c.Workers)
86
87 if err := c.ensureTestTable(db); err != nil {
88 return fmt.Errorf("ensure test table: %w", err)
89 }
90
91 ctx, cancel := context.WithTimeout(ctx, c.Duration)
92 defer cancel()
93
94 sigChan := make(chan os.Signal, 1)
95 signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
96 go func() {
97 <-sigChan
98 slog.Info("Received interrupt signal, stopping load generation")
99 cancel()
100 }()
101
102 stats := &LoadStats{
103 startTime: time.Now(),
104 lastReport: time.Now(),
105 }
106
107 var wg sync.WaitGroup
108 for i := 0; i < c.Workers; i++ {
109 wg.Add(1)
110 go func(workerID int) {
111 defer wg.Done()
112 c.worker(ctx, db, workerID, stats)
113 }(i)
114 }
115
116 go c.reportStats(ctx, stats)
117
118 wg.Wait()
119
120 c.finalReport(stats)
121 return nil
122}
123
124func (c *LoadCommand) worker(ctx context.Context, db *sql.DB, workerID int, stats *LoadStats) {
125 ticker := time.NewTicker(time.Second / time.Duration(c.WriteRate/c.Workers))

Callers 1

RunMethod · 0.95

Calls 7

ensureTestTableMethod · 0.95
workerMethod · 0.95
reportStatsMethod · 0.95
finalReportMethod · 0.95
NotifyMethod · 0.80
OpenMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected