allow customizing disabled journal events + tests.
This commit is contained in:
parent
6d29d75724
commit
05aa5f2d38
49
journal/registry_test.go
Normal file
49
journal/registry_test.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package journal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestDisabledEvents(t *testing.T) {
|
||||||
|
req := require.New(t)
|
||||||
|
|
||||||
|
test := func(dis DisabledEvents) func(*testing.T) {
|
||||||
|
return func(t *testing.T) {
|
||||||
|
registry := NewEventTypeRegistry(dis)
|
||||||
|
|
||||||
|
reg1 := registry.RegisterEventType("system1", "disabled1")
|
||||||
|
reg2 := registry.RegisterEventType("system2", "disabled2")
|
||||||
|
|
||||||
|
req.False(reg1.Enabled())
|
||||||
|
req.False(reg2.Enabled())
|
||||||
|
req.True(reg1.safe)
|
||||||
|
req.True(reg2.safe)
|
||||||
|
|
||||||
|
reg3 := registry.RegisterEventType("system3", "enabled3")
|
||||||
|
req.True(reg3.Enabled())
|
||||||
|
req.True(reg3.safe)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("direct", test(DisabledEvents{
|
||||||
|
EventType{System: "system1", Event: "disabled1"},
|
||||||
|
EventType{System: "system2", Event: "disabled2"},
|
||||||
|
}))
|
||||||
|
|
||||||
|
dis, err := ParseDisabledEvents("system1:disabled1,system2:disabled2")
|
||||||
|
req.NoError(err)
|
||||||
|
|
||||||
|
t.Run("parsed", test(dis))
|
||||||
|
|
||||||
|
dis, err = ParseDisabledEvents(" system1:disabled1 , system2:disabled2 ")
|
||||||
|
req.NoError(err)
|
||||||
|
|
||||||
|
t.Run("parsed_spaces", test(dis))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseDisableEvents(t *testing.T) {
|
||||||
|
_, err := ParseDisabledEvents("system1:disabled1:failed,system2:disabled2")
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
package journal
|
package journal
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
@ -20,6 +22,25 @@ var (
|
|||||||
// DisabledEvents is the set of event types whose journaling is suppressed.
|
// DisabledEvents is the set of event types whose journaling is suppressed.
|
||||||
type DisabledEvents []EventType
|
type DisabledEvents []EventType
|
||||||
|
|
||||||
|
// ParseDisabledEvents parses a string of the form: "system1:event1,system2:event2[,...]"
|
||||||
|
// into a DisabledEvents object, returning an error if the string failed to parse.
|
||||||
|
//
|
||||||
|
// It sanitizes strings via strings.TrimSpace.
|
||||||
|
func ParseDisabledEvents(s string) (DisabledEvents, error) {
|
||||||
|
s = strings.TrimSpace(s) // sanitize
|
||||||
|
evts := strings.Split(s, ",")
|
||||||
|
ret := make(DisabledEvents, 0, len(evts))
|
||||||
|
for _, evt := range evts {
|
||||||
|
evt = strings.TrimSpace(evt) // sanitize
|
||||||
|
s := strings.Split(evt, ":")
|
||||||
|
if len(s) != 2 {
|
||||||
|
return nil, fmt.Errorf("invalid event type: %s", s)
|
||||||
|
}
|
||||||
|
ret = append(ret, EventType{System: s[0], Event: s[1]})
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
// EventType represents the signature of an event.
|
// EventType represents the signature of an event.
|
||||||
type EventType struct {
|
type EventType struct {
|
||||||
System string
|
System string
|
||||||
|
@ -3,6 +3,7 @@ package node
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
@ -68,6 +69,10 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/storage/sectorblocks"
|
"github.com/filecoin-project/lotus/storage/sectorblocks"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// EnvJournalDisabledEvents is the environment variable through which disabled
|
||||||
|
// journal events can be customized.
|
||||||
|
const EnvJournalDisabledEvents = "LOTUS_JOURNAL_DISABLED_EVENTS"
|
||||||
|
|
||||||
//nolint:deadcode,varcheck
|
//nolint:deadcode,varcheck
|
||||||
var log = logging.Logger("builder")
|
var log = logging.Logger("builder")
|
||||||
|
|
||||||
@ -157,7 +162,15 @@ type Settings struct {
|
|||||||
func defaults() []Option {
|
func defaults() []Option {
|
||||||
return []Option{
|
return []Option{
|
||||||
// global system journal.
|
// global system journal.
|
||||||
Override(new(journal.DisabledEvents), journal.DefaultDisabledEvents),
|
Override(new(journal.DisabledEvents), func() journal.DisabledEvents {
|
||||||
|
if env, ok := os.LookupEnv(EnvJournalDisabledEvents); ok {
|
||||||
|
if ret, err := journal.ParseDisabledEvents(env); err == nil {
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// fallback if env variable is not set, or if it failed to parse.
|
||||||
|
return journal.DefaultDisabledEvents
|
||||||
|
}),
|
||||||
Override(new(journal.Journal), modules.OpenFilesystemJournal),
|
Override(new(journal.Journal), modules.OpenFilesystemJournal),
|
||||||
Override(InitJournalKey, func(j journal.Journal) {
|
Override(InitJournalKey, func(j journal.Journal) {
|
||||||
journal.J = j // eagerly sets the global journal through fx.Invoke.
|
journal.J = j // eagerly sets the global journal through fx.Invoke.
|
||||||
|
Loading…
Reference in New Issue
Block a user