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