fix(seed): идемпотентность (не плодить демо-тенанта) + персистентность очередей/сообщений в Redis
This commit is contained in:
+17
-3
@@ -18,6 +18,7 @@ import (
|
||||
|
||||
"shared-sqs/app/gosqs"
|
||||
"shared-sqs/app/models"
|
||||
"shared-sqs/app/persistence"
|
||||
"shared-sqs/app/tenant"
|
||||
)
|
||||
|
||||
@@ -31,6 +32,14 @@ const (
|
||||
// Креды генерируются случайно (tenant.Create) — никаких захардкоженных
|
||||
// AccessKey/SecretKey в исходнике.
|
||||
func seedDemoData(store *tenant.TenantStore) {
|
||||
// Идемпотентность: если демо-тенант уже есть (восстановлен из Redis) — не плодим копии.
|
||||
for _, existing := range store.List() {
|
||||
if existing.Name == demoTenantName {
|
||||
log.Infof("seed: тенант %s уже существует (%s) — сид пропущен", demoTenantName, existing.ID)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
t, err := store.Create(demoTenantName, demoMaxQueues)
|
||||
if err != nil {
|
||||
log.Warnf("seed: не удалось создать demo-tenant: %v", err)
|
||||
@@ -99,8 +108,7 @@ func seedDemoData(store *tenant.TenantStore) {
|
||||
})
|
||||
}
|
||||
|
||||
models.SyncQueues.Lock()
|
||||
models.SyncQueues.AddQueue(key, &models.Queue{
|
||||
queue := &models.Queue{
|
||||
Name: q.name,
|
||||
URL: queueURL,
|
||||
Arn: queueARN,
|
||||
@@ -109,9 +117,15 @@ func seedDemoData(store *tenant.TenantStore) {
|
||||
MessageRetentionPeriod: 345600,
|
||||
Messages: msgs,
|
||||
Duplicates: make(map[string]time.Time),
|
||||
})
|
||||
}
|
||||
models.SyncQueues.Lock()
|
||||
models.SyncQueues.AddQueue(key, queue)
|
||||
models.SyncQueues.Unlock()
|
||||
|
||||
// Персистим очередь и сообщения в Redis (иначе после рестарта демо-очереди исчезают).
|
||||
persistence.SaveQueue(key, queue)
|
||||
persistence.SaveMessages(key, msgs)
|
||||
|
||||
log.Infof("seed: очередь %s (%d сообщений)", q.name, len(q.msgs))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user