watchtower: use a stable blob identifier

In this commit, we add an Identifier method to the blob.Type struct
which returns a unique identifier for a given blob type. This identifier
is then used for initialising the disk overflow queue of the given
client.
This commit is contained in:
Elle Mouton 2023-05-18 15:17:22 +02:00
parent db145bfd8e
commit 8abe2f89e1
No known key found for this signature in database
GPG key ID: D7D916376026F177
2 changed files with 20 additions and 7 deletions

View file

@ -67,6 +67,20 @@ const (
TypeRewardCommit = Type(FlagCommitOutputs | FlagReward)
)
// Identifier returns a unique, stable string identifier for the blob Type.
func (t Type) Identifier() (string, error) {
switch t {
case TypeAltruistCommit:
return "legacy", nil
case TypeAltruistAnchorCommit:
return "anchor", nil
case TypeRewardCommit:
return "reward", nil
default:
return "", fmt.Errorf("unknown blob type: %v", t)
}
}
// Has returns true if the Type has the passed flag enabled.
func (t Type) Has(flag Flag) bool {
return Flag(t)&flag == flag

View file

@ -350,10 +350,12 @@ func New(config *Config) (*TowerClient, error) {
cfg.WriteTimeout = DefaultWriteTimeout
}
prefix := "(legacy)"
if cfg.Policy.IsAnchorChannel() {
prefix = "(anchor)"
identifier, err := cfg.Policy.BlobType.Identifier()
if err != nil {
return nil, err
}
prefix := fmt.Sprintf("(%s)", identifier)
plog := build.NewPrefixLog(prefix, log)
// Load the sweep pkscripts that have been generated for all previously
@ -363,10 +365,7 @@ func New(config *Config) (*TowerClient, error) {
return nil, err
}
var (
policy = cfg.Policy.BlobType.String()
queueDB = cfg.DB.GetDBQueue([]byte(policy))
)
queueDB := cfg.DB.GetDBQueue([]byte(identifier))
queue, err := NewDiskOverflowQueue[*wtdb.BackupID](
queueDB, cfg.MaxTasksInMemQueue, plog,
)