Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package pubsub
|
|
|
|
import (
|
|
"sync"
|
|
|
|
pb "github.com/libp2p/go-libp2p-pubsub/pb"
|
|
)
|
|
|
|
// msgIDGenerator handles computing IDs for msgs
|
|
// It allows setting custom generators(MsgIdFunction) per topic
|
|
type msgIDGenerator struct {
|
|
Default MsgIdFunction
|
|
|
|
topicGensLk sync.RWMutex
|
|
topicGens map[string]MsgIdFunction
|
|
}
|
|
|
|
func newMsgIdGenerator() *msgIDGenerator {
|
|
return &msgIDGenerator{
|
|
Default: DefaultMsgIdFn,
|
|
topicGens: make(map[string]MsgIdFunction),
|
|
}
|
|
}
|
|
|
|
// Set sets custom id generator(MsgIdFunction) for topic.
|
|
func (m *msgIDGenerator) Set(topic string, gen MsgIdFunction) {
|
|
m.topicGensLk.Lock()
|
|
m.topicGens[topic] = gen
|
|
m.topicGensLk.Unlock()
|
|
}
|
|
|
|
// ID computes ID for the msg or short-circuits with the cached value.
|
|
func (m *msgIDGenerator) ID(msg *Message) string {
|
|
if msg.ID != "" {
|
|
return msg.ID
|
|
}
|
|
|
|
msg.ID = m.RawID(msg.Message)
|
|
return msg.ID
|
|
}
|
|
|
|
// RawID computes ID for the proto 'msg'.
|
|
func (m *msgIDGenerator) RawID(msg *pb.Message) string {
|
|
m.topicGensLk.RLock()
|
|
gen, ok := m.topicGens[msg.GetTopic()]
|
|
m.topicGensLk.RUnlock()
|
|
if !ok {
|
|
gen = m.Default
|
|
}
|
|
|
|
return gen(msg)
|
|
}
|