diff --git a/bindings/channels.go b/bindings/channels.go index ea8802cc2890de30019ba68a9d7327e31f7307af..5d2e6c2cd3507938e72ced1d1e1155b0646972e5 100644 --- a/bindings/channels.go +++ b/bindings/channels.go @@ -259,8 +259,8 @@ func NewChannelsManager(cmixID int, privateIdentity []byte, return nil, err } - eb := func(path string) channels.EventModel { - return NewEventModel(eventBuilder.Build(path)) + eb := func(path string) (channels.EventModel, error) { + return NewEventModel(eventBuilder.Build(path)), nil } // Construct new channels manager @@ -297,8 +297,8 @@ func LoadChannelsManager(cmixID int, storageTag string, return nil, err } - eb := func(path string) channels.EventModel { - return NewEventModel(eventBuilder.Build(path)) + eb := func(path string) (channels.EventModel, error) { + return NewEventModel(eventBuilder.Build(path)), nil } // Construct new channels manager diff --git a/channels/joinedChannel_test.go b/channels/joinedChannel_test.go index 4e20a5e41c1aa20f6ea7cb883943dbee613c6f71..d83daa72748f6cd1676bcaee80f14064ef8e54e8 100644 --- a/channels/joinedChannel_test.go +++ b/channels/joinedChannel_test.go @@ -601,8 +601,8 @@ func (m *mockBroadcastClient) RemoveHealthCallback(uint64) {} // Mock EventModel // //////////////////////////////////////////////////////////////////////////////// -func mockEventModelBuilder(string) EventModel { - return &mockEventModel{} +func mockEventModelBuilder(string) (EventModel, error) { + return &mockEventModel{}, nil } // mockEventModel adheres to the EventModel interface. diff --git a/channels/manager.go b/channels/manager.go index 24aab83280c087e4e0b6cf4bb5f9fe8c1d91ff85..6a48347e18cd19ab59614408a62e3f11d036cc0a 100644 --- a/channels/manager.go +++ b/channels/manager.go @@ -14,6 +14,7 @@ import ( "crypto/ed25519" "encoding/base64" "fmt" + "github.com/pkg/errors" "gitlab.com/elixxir/client/broadcast" "gitlab.com/elixxir/client/cmix" "gitlab.com/elixxir/client/cmix/message" @@ -46,10 +47,10 @@ type manager struct { // Events model *events - // nicknames + // Nicknames *nicknameManager - //send tracker + // Send tracker st *sendTracker // Makes the function that is used to create broadcasts be a pointer so that @@ -76,7 +77,7 @@ type Client interface { } // EventModelBuilder initialises the event model using the given path. -type EventModelBuilder func(path string) EventModel +type EventModelBuilder func(path string) (EventModel, error) // NewManager creates a new channel Manager from a [channel.PrivateIdentity]. It // prefixes the KV with a tag derived from the public key that can be retried @@ -92,7 +93,13 @@ func NewManager(identity cryptoChannel.PrivateIdentity, kv *versioned.KV, if err := storeIdentity(kv, identity); err != nil { return nil, err } - m := setupManager(identity, kv, net, rng, modelBuilder(storageTag)) + + model, err := modelBuilder(storageTag) + if err != nil { + return nil, errors.Errorf("Failed to build event model: %+v", err) + } + + m := setupManager(identity, kv, net, rng, model) return m, nil } @@ -111,7 +118,10 @@ func LoadManager(storageTag string, kv *versioned.KV, net Client, return nil, err } - model := modelBuilder(storageTag) + model, err := modelBuilder(storageTag) + if err != nil { + return nil, errors.Errorf("Failed to build event model: %+v", err) + } m := setupManager(identity, kv, net, rng, model) @@ -199,11 +209,11 @@ func (m *manager) ReplayChannel(chID *id.ID) error { c := jc.broadcast.Get() - // stop the broadcast which will completely wipe it from the underlying - // cmix object + // Stop the broadcast that will completely wipe it from the underlying cmix + // object jc.broadcast.Stop() - //re-instantiate the broadcast, re-registering it from scratch + // Re-instantiate the broadcast, re-registering it from scratch b, err := initBroadcast(c, m.events, m.net, m.broadcastMaker, m.rng, m.st.MessageReceive) if err != nil {