diff --git a/api/client.go b/api/client.go index 37227372bfd21c14d5eff5ee88a3f909dbc819bf..15555c63728f2fd8012d3d2edc0f2aecd045ec7a 100644 --- a/api/client.go +++ b/api/client.go @@ -58,6 +58,8 @@ type Client struct { //handler for external services services *serviceProcessiesList + + clientErrorChannel chan interfaces.ClientError } // NewClient creates client storage, generates keys, connects, and registers @@ -200,21 +202,20 @@ func Login(storageDir string, password []byte, parameters params.Network) (*Clie def := c.storage.GetBaseNDF() //initialize permissioning - if def.Registration.Address != ""{ - err = c.initPermissioning(def) + if def.Registration.Address != "" { + err = c.registerPermissioning(def) if err != nil { return nil, err } - }else{ + } else { jww.WARN.Printf("Registration with permissioning skipped due to " + "blank permissionign address. Client will not be able to register " + "or track network.") } - // Initialize network and link it to context c.network, err = network.NewManager(c.storage, c.switchboard, c.rng, c.comms, - parameters, def) + parameters, def, SEMVER) if err != nil { return nil, err } @@ -264,12 +265,12 @@ func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte, c.storage.SetBaseNDF(def) //initialize permissioning - if def.Registration.Address != ""{ - err = c.initPermissioning(def) + if def.Registration.Address != "" { + err = c.registerPermissioning(def) if err != nil { return nil, err } - }else{ + } else { jww.WARN.Printf("Registration with permissioning skipped due to " + "blank permissionign address. Client will not be able to register " + "or track network.") @@ -277,7 +278,7 @@ func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte, // Initialize network and link it to context c.network, err = network.NewManager(c.storage, c.switchboard, c.rng, c.comms, - parameters, def) + parameters, def, SEMVER) if err != nil { return nil, err } @@ -294,7 +295,7 @@ func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte, return c, nil } -func (c *Client)initComms()error{ +func (c *Client) initComms() error { var err error //get the user from session @@ -312,23 +313,18 @@ func (c *Client)initComms()error{ return nil } -func (c *Client)initPermissioning(def *ndf.NetworkDefinition)error{ +func (c *Client) registerPermissioning(def *ndf.NetworkDefinition) error { var err error - //initialize permissioning - c.permissioning, err = permissioning.Init(c.comms, def) - if err != nil { - return errors.WithMessage(err, "failed to init "+ - "permissioning handler") - } - - // check the client version is up to date to the network - err = c.checkVersion() - if err != nil { - return errors.WithMessage(err, "failed to load client") - } //register with permissioning if necessary - if c.storage.GetRegistrationStatus() == storage.KeyGenComplete { + if c.storage.GetRegistrationStatus() == storage.KeyGenComplete { + //initialize permissioning + c.permissioning, err = permissioning.Init(c.comms, def) + if err != nil { + return errors.WithMessage(err, "failed to init "+ + "permissioning handler") + } + jww.INFO.Printf("Client has not registered yet, attempting registration") err = c.registerWithPermissioning() if err != nil { @@ -371,20 +367,34 @@ func (c *Client)initPermissioning(def *ndf.NetworkDefinition)error{ // Responds to confirmations of successful rekey operations // - Auth Callback (/auth/callback.go) // Handles both auth confirm and requests -func (c *Client) StartNetworkFollower() error { +func (c *Client) StartNetworkFollower() (<-chan interfaces.ClientError, error) { jww.INFO.Printf("StartNetworkFollower()") + c.clientErrorChannel = make(chan interfaces.ClientError, 1000) + + cer := func(source, message, trace string) { + select { + case c.clientErrorChannel <- interfaces.ClientError{ + Source: source, + Message: message, + Trace: trace, + }: + default: + jww.WARN.Printf("Failed to notify about ClientError from %s: %s", source, message) + } + } + err := c.status.toStarting() if err != nil { - return errors.WithMessage(err, "Failed to Start the Network Follower") + return nil, errors.WithMessage(err, "Failed to Start the Network Follower") } stopAuth := c.auth.StartProcessies() c.runner.Add(stopAuth) - stopFollow, err := c.network.Follow() + stopFollow, err := c.network.Follow(cer) if err != nil { - return errors.WithMessage(err, "Failed to start following "+ + return nil, errors.WithMessage(err, "Failed to start following "+ "the network") } c.runner.Add(stopFollow) @@ -393,12 +403,12 @@ func (c *Client) StartNetworkFollower() error { err = c.status.toRunning() if err != nil { - return errors.WithMessage(err, "Failed to Start the Network Follower") + return nil, errors.WithMessage(err, "Failed to Start the Network Follower") } c.services.run(c.runner) - return nil + return c.clientErrorChannel, nil } // StopNetworkFollower stops the network follower if it is running. @@ -411,6 +421,7 @@ func (c *Client) StopNetworkFollower(timeout time.Duration) error { if err != nil { return errors.WithMessage(err, "Failed to Stop the Network Follower") } + close(c.clientErrorChannel) err = c.runner.Close(timeout) if err != nil { return errors.WithMessage(err, "Failed to Stop the Network Follower") diff --git a/api/utilsInterfaces_test.go b/api/utilsInterfaces_test.go index 6eb4c466a51845e756f275483271a785b643feaa..9afcb9a55f5eb99695a20d36a96c141fdd47cbc6 100644 --- a/api/utilsInterfaces_test.go +++ b/api/utilsInterfaces_test.go @@ -85,7 +85,7 @@ type testNetworkManagerGeneric struct { func (t *testNetworkManagerGeneric) GetHealthTracker() interfaces.HealthTracker { return nil } -func (t *testNetworkManagerGeneric) Follow() (stoppable.Stoppable, error) { +func (t *testNetworkManagerGeneric) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppable, error) { return nil, nil } func (t *testNetworkManagerGeneric) CheckGarbledMessages() { diff --git a/api/version.go b/api/version.go index a8c26beae37b2c4cc19e1a53ee03b79cc2fe3799..57d607b585497d1c4e73ef104536e19b8ab82ed2 100644 --- a/api/version.go +++ b/api/version.go @@ -7,12 +7,7 @@ package api -import ( - "github.com/pkg/errors" - jww "github.com/spf13/jwalterweatherman" - "gitlab.com/elixxir/primitives/version" -) - +/* func (c *Client) Version() version.Version { v, err := version.ParseVersion(SEMVER) if err != nil { @@ -44,3 +39,4 @@ func (c *Client) checkVersion() error { return nil } +*/ diff --git a/bindings/callback.go b/bindings/callback.go index 4fc0431a41718961405f040fed2a0691aa86b44d..1237e7fcf981f763fcf8dcb3be233d37e48741fd 100644 --- a/bindings/callback.go +++ b/bindings/callback.go @@ -92,3 +92,7 @@ func newRoundListUnregister(rounds []id.Round, ec []*dataStructures.EventCallbac } return &Unregister{f: f} } + +type ClientError interface { + Report(source, message, trace string) +} diff --git a/bindings/client.go b/bindings/client.go index 866721af2ed32316a3191c0b60d7bfbdfe82691a..2d080e7baab96b3c99f0bf8a0b46de9b155ba1d5 100644 --- a/bindings/client.go +++ b/bindings/client.go @@ -174,11 +174,18 @@ func UnmarshalSendReport(b []byte) (*SendReport, error) { // Responds to sent rekeys and executes them // - KeyExchange Confirm (/keyExchange/confirm.go) // Responds to confirmations of successful rekey operations -func (c *Client) StartNetworkFollower() error { - if err := c.api.StartNetworkFollower(); err != nil { +func (c *Client) StartNetworkFollower(clientError ClientError) error { + errChan, err := c.api.StartNetworkFollower() + if err != nil { return errors.New(fmt.Sprintf("Failed to start the "+ "network follower: %+v", err)) } + + go func() { + for report := range errChan { + go clientError.Report(report.Source, report.Message, report.Trace) + } + }() return nil } @@ -310,15 +317,15 @@ func (c *Client) WaitForRoundCompletion(marshaledSendReport []byte, sr, err := UnmarshalSendReport(marshaledSendReport) if err != nil { - return errors.New(fmt.Sprintf("Failed to "+ + return errors.New(fmt.Sprintf("Failed to "+ "WaitForRoundCompletion callback due to bad Send Report: %+v", err)) } - f := func(allRoundsSucceeded, timedOut bool, rounds map[id.Round]api.RoundResult){ + f := func(allRoundsSucceeded, timedOut bool, rounds map[id.Round]api.RoundResult) { results := make([]byte, len(sr.rl.list)) - for i, r := range sr.rl.list{ - if result, exists := rounds[r]; exists{ + for i, r := range sr.rl.list { + if result, exists := rounds[r]; exists { results[i] = byte(result) } } @@ -326,7 +333,7 @@ func (c *Client) WaitForRoundCompletion(marshaledSendReport []byte, mdc.EventCallback(sr.mid.Marshal(), allRoundsSucceeded, timedOut, results) } - timeout := time.Duration(timeoutMS)*time.Millisecond + timeout := time.Duration(timeoutMS) * time.Millisecond return c.api.GetRoundResults(sr.rl.list, timeout, f) } diff --git a/cmd/root.go b/cmd/root.go index a5b550f5ec405391b4ae96e57eb83f1d26f18ed2..e1b272b25e21e7097cd34a8b6940621fa2af2a61 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -86,7 +86,7 @@ var rootCmd = &cobra.Command{ }) } - err := client.StartNetworkFollower() + _, err := client.StartNetworkFollower() if err != nil { jww.FATAL.Panicf("%+v", err) } diff --git a/cmd/single.go b/cmd/single.go index 3f9ee4ccbf5be8b2ec00fa592bf9a676821d4429..cf2b07f78cdc6cbcd64181d84f4bc63dd53a4f67 100644 --- a/cmd/single.go +++ b/cmd/single.go @@ -62,7 +62,7 @@ var singleCmd = &cobra.Command{ }) } - err := client.StartNetworkFollower() + _, err := client.StartNetworkFollower() if err != nil { jww.FATAL.Panicf("%+v", err) } diff --git a/cmd/ud.go b/cmd/ud.go index 3c890c2e39c300901df26e164d448b219c41299c..0153f5e8c53a6dffd49631f5890af4b0effc11b9 100644 --- a/cmd/ud.go +++ b/cmd/ud.go @@ -62,7 +62,7 @@ var udCmd = &cobra.Command{ }) } - err := client.StartNetworkFollower() + _, err := client.StartNetworkFollower() if err != nil { jww.FATAL.Panicf("%+v", err) } diff --git a/cmd/version.go b/cmd/version.go index 17ca3b7041e5e0ec2b0944f05c50e1d642f5d61e..071eb540c59b62abb17cfd128fa14a84ed665b4a 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -26,6 +26,10 @@ func Version() string { return out } +func GetVersion() string { + return currentVersion +} + func init() { rootCmd.AddCommand(versionCmd) rootCmd.AddCommand(generateCmd) diff --git a/globals/version_vars.go b/globals/version_vars.go index 7e5cc97102041b2236f514fe150a470f5595802a..603941fe81dabba2c02b864a43b0758805762b30 100644 --- a/globals/version_vars.go +++ b/globals/version_vars.go @@ -1,9 +1,9 @@ // Code generated by go generate; DO NOT EDIT. // This file was generated by robots at -// 2021-02-15 13:16:40.214748 -0600 CST m=+0.021065952 +// 2021-02-25 09:56:56.054196 -0800 PST m=+0.028922558 package globals -const GITVERSION = `e5e78f6b fixed the useage of the excluded list in send cMix` +const GITVERSION = `09d47fb7 added a new logging print to single use` const SEMVER = "1.4.0" const DEPENDENCIES = `module gitlab.com/elixxir/client @@ -24,13 +24,13 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 github.com/spf13/viper v1.7.1 gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228 - gitlab.com/elixxir/comms v0.0.4-0.20210215180544-d672a6bfd53a - gitlab.com/elixxir/crypto v0.0.7-0.20210210215733-951b4e717763 + gitlab.com/elixxir/comms v0.0.4-0.20210224193109-e8dd662ec218 + gitlab.com/elixxir/crypto v0.0.7-0.20210223210315-b2072c080b0f gitlab.com/elixxir/ekv v0.1.4 - gitlab.com/elixxir/primitives v0.0.3-0.20210210215643-bf48247248e5 - gitlab.com/xx_network/comms v0.0.4-0.20210210215624-622913c0a215 - gitlab.com/xx_network/crypto v0.0.5-0.20210210215543-446333e9022e - gitlab.com/xx_network/primitives v0.0.4-0.20210215191517-2f56b21d6ed7 + gitlab.com/elixxir/primitives v0.0.3-0.20210225041422-ada5b068c1e3 + gitlab.com/xx_network/comms v0.0.4-0.20210224201327-b0ce36c0c989 + gitlab.com/xx_network/crypto v0.0.5-0.20210223210125-9c1a8a8f1ec6 + gitlab.com/xx_network/primitives v0.0.4-0.20210224190828-4e0728a36eb3 golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect golang.org/x/sys v0.0.0-20210105210732-16f7687f5001 // indirect diff --git a/go.mod b/go.mod index 1f39961060ebe7d93306f484fa55b7b8257e5c21..98998a181d9598a2e357c22a6b4cfd206b21f57a 100644 --- a/go.mod +++ b/go.mod @@ -17,13 +17,13 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 github.com/spf13/viper v1.7.1 gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228 - gitlab.com/elixxir/comms v0.0.4-0.20210223210438-35bdbcaf78be + gitlab.com/elixxir/comms v0.0.4-0.20210224193109-e8dd662ec218 gitlab.com/elixxir/crypto v0.0.7-0.20210223210315-b2072c080b0f gitlab.com/elixxir/ekv v0.1.4 - gitlab.com/elixxir/primitives v0.0.3-0.20210223210226-cccb5f7d4839 - gitlab.com/xx_network/comms v0.0.4-0.20210223210205-6d1cb7fde5d1 + gitlab.com/elixxir/primitives v0.0.3-0.20210225041422-ada5b068c1e3 + gitlab.com/xx_network/comms v0.0.4-0.20210224201327-b0ce36c0c989 gitlab.com/xx_network/crypto v0.0.5-0.20210223210125-9c1a8a8f1ec6 - gitlab.com/xx_network/primitives v0.0.4-0.20210219231511-983054dbee36 + gitlab.com/xx_network/primitives v0.0.4-0.20210224190828-4e0728a36eb3 golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect golang.org/x/sys v0.0.0-20210105210732-16f7687f5001 // indirect diff --git a/go.sum b/go.sum index 15d0acc8b72962ddf8c0015dd4ac85ff82628ebd..e8dafcbc34e08bc42fdef0c8026bf42415285611 100644 --- a/go.sum +++ b/go.sum @@ -251,24 +251,12 @@ github.com/zeebo/pcg v1.0.0 h1:dt+dx+HvX8g7Un32rY9XWoYnd0NmKmrIzpHF7qiTDj0= github.com/zeebo/pcg v1.0.0/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228 h1:Gi6rj4mAlK0BJIk1HIzBVMjWNjIUfstrsXC2VqLYPcA= gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228/go.mod h1:H6jztdm0k+wEV2QGK/KYA+MY9nj9Zzatux/qIvDDv3k= -gitlab.com/elixxir/comms v0.0.4-0.20210210215855-f8a4b9751c59 h1:/MSWVvLFV8Z2H37l+9fC3z5aO/fXktwd3RKFT21dvcM= -gitlab.com/elixxir/comms v0.0.4-0.20210210215855-f8a4b9751c59/go.mod h1:ZXv+fpI/kRCzxxX6p4JXlonJVDl49t4+v71kEkBipgM= -gitlab.com/elixxir/comms v0.0.4-0.20210212194414-4c36bb47fa96 h1:66NNOMK9zQqW3xmGYll8wB/BKD5jMHOyYjpgwQD7b+Q= -gitlab.com/elixxir/comms v0.0.4-0.20210212194414-4c36bb47fa96/go.mod h1:ZXv+fpI/kRCzxxX6p4JXlonJVDl49t4+v71kEkBipgM= -gitlab.com/elixxir/comms v0.0.4-0.20210218234550-f2e03b19bdb2 h1:p5GunVi5sP9atTw3DKBkgV6k3eR9iTyI6m9GbUr8hhA= -gitlab.com/elixxir/comms v0.0.4-0.20210218234550-f2e03b19bdb2/go.mod h1:GCbfPWB7VF5ZeDsLBCwfy0JiquG4OK6gsRjaIS66+yg= -gitlab.com/elixxir/comms v0.0.4-0.20210223182501-0b9a9fc80f48 h1:fV6kL7PVZ+uR+TXGChGkCGdEM/DwThmQMcEhZTORt0w= -gitlab.com/elixxir/comms v0.0.4-0.20210223182501-0b9a9fc80f48/go.mod h1:GCbfPWB7VF5ZeDsLBCwfy0JiquG4OK6gsRjaIS66+yg= -gitlab.com/elixxir/comms v0.0.4-0.20210223210438-35bdbcaf78be h1:+2OeULnvHDy52gP+KtyBwhOYO1Q3eJOIWI/cV4PRM1U= -gitlab.com/elixxir/comms v0.0.4-0.20210223210438-35bdbcaf78be/go.mod h1:NcZ0SiO2Lf/+nXK0weAgmTiocO6rz1Inl3mfL5go3Ac= +gitlab.com/elixxir/comms v0.0.4-0.20210224193109-e8dd662ec218 h1:TIvXa3SCqdxSruIuD3+fh3DFoN+nf6YV4F7RpvG0E8c= +gitlab.com/elixxir/comms v0.0.4-0.20210224193109-e8dd662ec218/go.mod h1:BZLamz1D+9WHyNkx+LTKtV2dCJGnz4Oic8H6H7ACzxM= gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A= gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c= gitlab.com/elixxir/crypto v0.0.3 h1:znCt/x2bL4y8czTPaaFkwzdgSgW3BJc/1+dxyf1jqVw= gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= -gitlab.com/elixxir/crypto v0.0.7-0.20210210215733-951b4e717763 h1:MUFs4H4kTdPm/fsagl8vm2yGF6JR+/6fKSg1Y68XAQI= -gitlab.com/elixxir/crypto v0.0.7-0.20210210215733-951b4e717763/go.mod h1:ucX9BoKoDlE6e3yjnTuVD2mc72nQUket44DxISyivUw= -gitlab.com/elixxir/crypto v0.0.7-0.20210216174551-f806f79610eb h1:aPcrTC0QdrPqz4NgoAt5sfXt/+EFrNUwIns0s0VCQmg= -gitlab.com/elixxir/crypto v0.0.7-0.20210216174551-f806f79610eb/go.mod h1:CLP8kULKW9A5oZHQ1zMCx4swMhBw2IMO68z4U/FkvcU= gitlab.com/elixxir/crypto v0.0.7-0.20210223210315-b2072c080b0f h1:VQDGEmfw6CLfmiN2asiNOJrodkDEGYVXDBDNfXsjTmk= gitlab.com/elixxir/crypto v0.0.7-0.20210223210315-b2072c080b0f/go.mod h1:onm3bf+h/yIza245YXHuUW2hUQ1Ga8K4doXk5AKnrgg= gitlab.com/elixxir/ekv v0.1.4 h1:NLVMwsFEKArWcsDHu2DbXlm9374iSgn7oIA3rVSsvjc= @@ -278,27 +266,17 @@ gitlab.com/elixxir/primitives v0.0.0-20200804170709-a1896d262cd9/go.mod h1:p0Vel gitlab.com/elixxir/primitives v0.0.0-20200804182913-788f47bded40/go.mod h1:tzdFFvb1ESmuTCOl1z6+yf6oAICDxH2NPUemVgoNLxc= gitlab.com/elixxir/primitives v0.0.1 h1:q61anawANlNAExfkeQEE1NCsNih6vNV1FFLoUQX6txQ= gitlab.com/elixxir/primitives v0.0.1/go.mod h1:kNp47yPqja2lHSiS4DddTvFpB/4D9dB2YKnw5c+LJCE= -gitlab.com/elixxir/primitives v0.0.3-0.20210210215643-bf48247248e5 h1:ExAOci0J5i53G+pA+oQ9ushG4WE0GQSiaO6JidHGEuw= -gitlab.com/elixxir/primitives v0.0.3-0.20210210215643-bf48247248e5/go.mod h1:Cz0fCtgUKnVdo2rJgiJ/h3N8a2SPW8tP9tn6cV/+t1s= -gitlab.com/elixxir/primitives v0.0.3-0.20210216174458-2a23825c1eb1 h1:BfcaQtKgIbafExdHkeKIJ5XEGe9MvUiv+yg9u7jwqhY= -gitlab.com/elixxir/primitives v0.0.3-0.20210216174458-2a23825c1eb1/go.mod h1:Wpz7WGZ/CpO6oHNmVTgTNBETTRXi40arWjom1uwu/1s= -gitlab.com/elixxir/primitives v0.0.3-0.20210223180234-8e5d82635c20 h1:76cC9BusM1hozdeEIosvfTXm/bYa/IVEY8Z9BvCrxq8= -gitlab.com/elixxir/primitives v0.0.3-0.20210223180234-8e5d82635c20/go.mod h1:Wpz7WGZ/CpO6oHNmVTgTNBETTRXi40arWjom1uwu/1s= gitlab.com/elixxir/primitives v0.0.3-0.20210223210226-cccb5f7d4839 h1:BvHO58ibn08sxll46vLIngFf37Ab76GV3xC+DM2m/Uo= gitlab.com/elixxir/primitives v0.0.3-0.20210223210226-cccb5f7d4839/go.mod h1:LnvSPo0OMyHV4YMtnFelXwPu2UtU38h6DZrwUry6fjU= +gitlab.com/elixxir/primitives v0.0.3-0.20210225041422-ada5b068c1e3 h1:hh3Y9kpGsw9VLqRodMIdyaJs/Onu73uktnkgwKZkmF4= +gitlab.com/elixxir/primitives v0.0.3-0.20210225041422-ada5b068c1e3/go.mod h1:LnvSPo0OMyHV4YMtnFelXwPu2UtU38h6DZrwUry6fjU= gitlab.com/xx_network/comms v0.0.0-20200805174823-841427dd5023/go.mod h1:owEcxTRl7gsoM8c3RQ5KAm5GstxrJp5tn+6JfQ4z5Hw= -gitlab.com/xx_network/comms v0.0.4-0.20210210215624-622913c0a215 h1:f+cobRegYJH2x6cFkf1RfJEGFnX/vq2hGLltFC+g4Bk= -gitlab.com/xx_network/comms v0.0.4-0.20210210215624-622913c0a215/go.mod h1:P81n1Rv0so+uIWGkGDEUt/bEvpksM6yfB0iB22rbFx4= -gitlab.com/xx_network/comms v0.0.4-0.20210216174438-0790d1f1f225 h1:ZVxPD76xDLdTSGY2w/aGRMiiry7SauD8sq4c+see6aM= -gitlab.com/xx_network/comms v0.0.4-0.20210216174438-0790d1f1f225/go.mod h1:e7dy2wznC4U4bG/U3xFGYYsnnd8zHOhoSxzFkGPQYX4= -gitlab.com/xx_network/comms v0.0.4-0.20210223210205-6d1cb7fde5d1 h1:AVKHbi69RA9DRIwgEPfRqCucmpsheskU9g+a4mGkDKo= -gitlab.com/xx_network/comms v0.0.4-0.20210223210205-6d1cb7fde5d1/go.mod h1:H10pJ7id+76aJeC1zP9F/N8cFBj1KtmkWHAmDILwZMw= +gitlab.com/xx_network/comms v0.0.4-0.20210224192239-f69087c5d7f4/go.mod h1:c/NEKv1QiZWYEp6fRc9ti1fds/eUWoyIckeEm+9ZvBU= +gitlab.com/xx_network/comms v0.0.4-0.20210224201327-b0ce36c0c989 h1:Na1krYc+uLnEzc/nqdkpNL4oTw2obixEzhGzVFVboJw= +gitlab.com/xx_network/comms v0.0.4-0.20210224201327-b0ce36c0c989/go.mod h1:H10pJ7id+76aJeC1zP9F/N8cFBj1KtmkWHAmDILwZMw= gitlab.com/xx_network/crypto v0.0.3/go.mod h1:DF2HYvvCw9wkBybXcXAgQMzX+MiGbFPjwt3t17VRqRE= gitlab.com/xx_network/crypto v0.0.4 h1:lpKOL5mTJ2awWMfgBy30oD/UvJVrWZzUimSHlOdZZxo= gitlab.com/xx_network/crypto v0.0.4/go.mod h1:+lcQEy+Th4eswFgQDwT0EXKp4AXrlubxalwQFH5O0Mk= -gitlab.com/xx_network/crypto v0.0.5-0.20210210215543-446333e9022e h1:wRRIu5sB+5t2NgbLXCJsyqA3DK7a8rRUwPza2Vy5Rdc= -gitlab.com/xx_network/crypto v0.0.5-0.20210210215543-446333e9022e/go.mod h1:NiPI62thPru+eYlBucjl2/OLUND3wKLOhPrIHvK/nCA= -gitlab.com/xx_network/crypto v0.0.5-0.20210216174356-e81e1ddf8fb7 h1:vyL+m7D7w+RgMPARzcKCR8UMGC2foqNU6cSb1J6Dkis= gitlab.com/xx_network/crypto v0.0.5-0.20210216174356-e81e1ddf8fb7/go.mod h1:8J+/VBcMlBj2sZuSDaVKI/i58awFZ5Zdb4JdEwGVrqo= gitlab.com/xx_network/crypto v0.0.5-0.20210223210125-9c1a8a8f1ec6 h1:VOHKnXEeNsE7HV6jXRAnitaMz4Bk9+HNeGD65/Y14YM= gitlab.com/xx_network/crypto v0.0.5-0.20210223210125-9c1a8a8f1ec6/go.mod h1:hv5iBFSfmrhTkS8cAu1+/SlXXDzpHhZou+cgBSf8hAI= @@ -307,16 +285,11 @@ gitlab.com/xx_network/primitives v0.0.0-20200804183002-f99f7a7284da h1:CCVslUwNC gitlab.com/xx_network/primitives v0.0.0-20200804183002-f99f7a7284da/go.mod h1:OK9xevzWCaPO7b1wiluVJGk7R5ZsuC7pHY5hteZFQug= gitlab.com/xx_network/primitives v0.0.2 h1:r45yKenJ9e7PylI1ZXJ1Es09oYNaYXjxVy9+uYlwo7Y= gitlab.com/xx_network/primitives v0.0.2/go.mod h1:cs0QlFpdMDI6lAo61lDRH2JZz+3aVkHy+QogOB6F/qc= -gitlab.com/xx_network/primitives v0.0.4-0.20210210215152-e4534abf3ae5 h1:skLonqleopw1osf3xBQTNX9NjTV/OQP6AM4HKpLNUdc= -gitlab.com/xx_network/primitives v0.0.4-0.20210210215152-e4534abf3ae5/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= -gitlab.com/xx_network/primitives v0.0.4-0.20210212180522-50ec526a6c12 h1:dOQS9tzT4fllDhU37pbJhAAW8qlB0HDjuf74rvzOZQQ= -gitlab.com/xx_network/primitives v0.0.4-0.20210212180522-50ec526a6c12/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= -gitlab.com/xx_network/primitives v0.0.4-0.20210215192713-e32335847d4f h1:0wFEYIHuPkWJuDkbDXNrwC5yGwkd7Mugt2BwcTqQbFY= gitlab.com/xx_network/primitives v0.0.4-0.20210215192713-e32335847d4f/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= -gitlab.com/xx_network/primitives v0.0.4-0.20210219220414-99c389307a84 h1:dvc/2RMlgffJHy2mJd+GK9jhWLni42o5ChFPZ2oYgkw= -gitlab.com/xx_network/primitives v0.0.4-0.20210219220414-99c389307a84/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= gitlab.com/xx_network/primitives v0.0.4-0.20210219231511-983054dbee36 h1:41qeW7XB9Rllsi6fe37+eaQCLjTGchpvcJqwEvZxeXE= gitlab.com/xx_network/primitives v0.0.4-0.20210219231511-983054dbee36/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= +gitlab.com/xx_network/primitives v0.0.4-0.20210224190828-4e0728a36eb3 h1:Mhabfbm+F2obo1shlAG6xtxkeEoTvT3UaSa3+VBh08s= +gitlab.com/xx_network/primitives v0.0.4-0.20210224190828-4e0728a36eb3/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= gitlab.com/xx_network/ring v0.0.2 h1:TlPjlbFdhtJrwvRgIg4ScdngMTaynx/ByHBRZiXCoL0= gitlab.com/xx_network/ring v0.0.2/go.mod h1:aLzpP2TiZTQut/PVHR40EJAomzugDdHXetbieRClXIM= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= diff --git a/interfaces/networkManager.go b/interfaces/networkManager.go index b7ff3a886346a0d23934b6ef359db4e872101415..29e9b0a51ae54b0e5b48b3ede489b07dd1d28007 100644 --- a/interfaces/networkManager.go +++ b/interfaces/networkManager.go @@ -24,7 +24,7 @@ type NetworkManager interface { SendCMIX(message format.Message, recipient *id.ID, p params.CMIX) (id.Round, ephemeral.Id, error) GetInstance() *network.Instance GetHealthTracker() HealthTracker - Follow() (stoppable.Stoppable, error) + Follow(report ClientErrorReport) (stoppable.Stoppable, error) CheckGarbledMessages() } diff --git a/keyExchange/utils_test.go b/keyExchange/utils_test.go index bda05f0b822888261f8f61f460840536dd9ddbc5..8ad9f13b7d8ab05ecc9d5c75a8f7c8078c01ed1e 100644 --- a/keyExchange/utils_test.go +++ b/keyExchange/utils_test.go @@ -57,7 +57,7 @@ func (t *testNetworkManagerGeneric) GetHealthTracker() interfaces.HealthTracker return nil } -func (t *testNetworkManagerGeneric) Follow() (stoppable.Stoppable, error) { +func (t *testNetworkManagerGeneric) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppable, error) { return nil, nil } @@ -136,7 +136,7 @@ func (t *testNetworkManagerFullExchange) GetHealthTracker() interfaces.HealthTra return nil } -func (t *testNetworkManagerFullExchange) Follow() (stoppable.Stoppable, error) { +func (t *testNetworkManagerFullExchange) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppable, error) { return nil, nil } diff --git a/network/ephemeral/testutil.go b/network/ephemeral/testutil.go index 1691ae8bd450fd70cd03e0f8f8c00733c16ec828..ca4eaff034acf331e005dc5c002b6d9cd53d4d77 100644 --- a/network/ephemeral/testutil.go +++ b/network/ephemeral/testutil.go @@ -68,7 +68,7 @@ func (t *testNetworkManager) GetHealthTracker() interfaces.HealthTracker { return nil } -func (t *testNetworkManager) Follow() (stoppable.Stoppable, error) { +func (t *testNetworkManager) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppable, error) { return nil, nil } diff --git a/network/follow.go b/network/follow.go index 869dd5cdb21aee3f59125006f1feed9371132e5f..dd6a4e3942bc1084cf934f56ba4422bcb917b78c 100644 --- a/network/follow.go +++ b/network/follow.go @@ -24,7 +24,9 @@ package network import ( "bytes" + "fmt" jww "github.com/spf13/jwalterweatherman" + "gitlab.com/elixxir/client/interfaces" "gitlab.com/elixxir/client/network/gateway" "gitlab.com/elixxir/client/network/rounds" pb "gitlab.com/elixxir/comms/mixmessages" @@ -37,7 +39,7 @@ import ( "time" ) -const debugTrackPeriod = 1*time.Minute +const debugTrackPeriod = 1 * time.Minute //comms interface makes testing easier type followNetworkComms interface { @@ -47,7 +49,7 @@ type followNetworkComms interface { // followNetwork polls the network to get updated on the state of nodes, the // round status, and informs the client when messages can be retrieved. -func (m *manager) followNetwork(quitCh <-chan struct{}) { +func (m *manager) followNetwork(report interfaces.ClientErrorReport, quitCh <-chan struct{}) { ticker := time.NewTicker(m.param.TrackNetworkPeriod) TrackTicker := time.NewTicker(debugTrackPeriod) rng := m.Rng.GetStream() @@ -59,8 +61,8 @@ func (m *manager) followNetwork(quitCh <-chan struct{}) { rng.Close() done = true case <-ticker.C: - m.follow(rng, m.Comms) - case <- TrackTicker.C: + m.follow(report, rng, m.Comms) + case <-TrackTicker.C: jww.INFO.Println(m.tracker.Report()) m.tracker = newPollTracker() } @@ -68,8 +70,7 @@ func (m *manager) followNetwork(quitCh <-chan struct{}) { } // executes each iteration of the follower -func (m *manager) follow(rng csprng.Source, comms followNetworkComms) { - +func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, comms followNetworkComms) { //get the identity we will poll for identity, err := m.Session.Reception().GetIdentity(rng) @@ -97,6 +98,7 @@ func (m *manager) follow(rng csprng.Source, comms followNetworkComms) { ReceptionID: identity.EphId[:], StartTimestamp: identity.StartRequest.UnixNano(), EndTimestamp: identity.EndRequest.UnixNano(), + ClientVersion: []byte(m.clientVersion), } jww.TRACE.Printf("Executing poll for %v(%s) range: %s-%s(%s) from %s", identity.EphId.Int64(), identity.Source, identity.StartRequest, @@ -104,6 +106,11 @@ func (m *manager) follow(rng csprng.Source, comms followNetworkComms) { pollResp, err := comms.SendPoll(gwHost, &pollReq) if err != nil { + report( + "NetworkFollower", + fmt.Sprintf("Failed to poll network, \"%s\", Gateway: %s", err.Error(), gwHost.String()), + fmt.Sprintf("%+v", err), + ) jww.ERROR.Printf("Unable to poll %s for NDF: %+v", gwHost, err) return } diff --git a/network/manager.go b/network/manager.go index b2d43c8e6ab50465a1f66fc035b5330ad3eec450..ca62c9c5f82ee9b188b3130b507d9f8a60f53227 100644 --- a/network/manager.go +++ b/network/manager.go @@ -50,12 +50,14 @@ type manager struct { //map of polls for debugging tracker *pollTracker + + clientVersion string } // NewManager builds a new reception manager object using inputted key fields func NewManager(session *storage.Session, switchboard *switchboard.Switchboard, rng *fastRNG.StreamGenerator, comms *client.Comms, - params params.Network, ndf *ndf.NetworkDefinition) (interfaces.NetworkManager, error) { + params params.Network, ndf *ndf.NetworkDefinition, clientVersion string) (interfaces.NetworkManager, error) { //start network instance instance, err := network.NewInstance(comms.ProtoComms, ndf, nil, nil) @@ -73,9 +75,10 @@ func NewManager(session *storage.Session, switchboard *switchboard.Switchboard, //create manager object m := manager{ - param: params, - running: &running, - tracker: newPollTracker(), + param: params, + running: &running, + tracker: newPollTracker(), + clientVersion: clientVersion, } m.Internal = internal.Internal{ @@ -87,7 +90,7 @@ func NewManager(session *storage.Session, switchboard *switchboard.Switchboard, NodeRegistration: make(chan network.NodeGateway, params.RegNodesBufferLen), Instance: instance, TransmissionID: session.User().GetCryptographicIdentity().GetTransmissionID(), - ReceptionID: session.User().GetCryptographicIdentity().GetReceptionID(), + ReceptionID: session.User().GetCryptographicIdentity().GetReceptionID(), } //create sub managers @@ -107,7 +110,7 @@ func NewManager(session *storage.Session, switchboard *switchboard.Switchboard, // - Garbled Messages (/network/message/garbled.go) // - Critical Messages (/network/message/critical.go) // - Ephemeral ID tracking (network/ephemeral/tracker.go) -func (m *manager) Follow() (stoppable.Stoppable, error) { +func (m *manager) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppable, error) { if !atomic.CompareAndSwapUint32(m.running, 0, 1) { return nil, errors.Errorf("network routines are already running") } @@ -129,7 +132,7 @@ func (m *manager) Follow() (stoppable.Stoppable, error) { // Start the Network Tracker trackNetworkStopper := stoppable.NewSingle("TrackNetwork") - go m.followNetwork(trackNetworkStopper.Quit()) + go m.followNetwork(report, trackNetworkStopper.Quit()) multi.Add(trackNetworkStopper) // Message reception diff --git a/permissioning/remoteVersion.go b/permissioning/remoteVersion.go index 95bf44fc5a1e840de3e68e1e9dc8bf569e9e3974..e1973c1d81ee96e6a861fd5ba863eac0f9a65da2 100644 --- a/permissioning/remoteVersion.go +++ b/permissioning/remoteVersion.go @@ -7,13 +7,7 @@ package permissioning -import ( - "github.com/pkg/errors" - pb "gitlab.com/elixxir/comms/mixmessages" - "gitlab.com/elixxir/primitives/version" - "gitlab.com/xx_network/comms/connect" -) - +/* // GetNetworkVersion contacts the permissioning server and returns the current // supported client version. // returns a bool which designates if the network is enforcing versioning @@ -50,3 +44,4 @@ func getRemoteVersion(permissioningHost *connect.Host, comms getRemoteClientVers return true, netVersion, nil } +*/ diff --git a/permissioning/remoteVersion_test.go b/permissioning/remoteVersion_test.go index 68c76466af94db46c191fc3195e98132dddc8da9..ed114a0350f97147abae88947faf000dbd3dbac2 100644 --- a/permissioning/remoteVersion_test.go +++ b/permissioning/remoteVersion_test.go @@ -8,13 +8,8 @@ package permissioning import ( - "github.com/pkg/errors" pb "gitlab.com/elixxir/comms/mixmessages" - "gitlab.com/elixxir/primitives/version" "gitlab.com/xx_network/comms/connect" - "gitlab.com/xx_network/primitives/id" - "reflect" - "testing" ) type MockVersionSender struct { @@ -32,6 +27,7 @@ func (s *MockVersionSender) SendGetCurrentClientVersionMessage( return &pb.ClientVersion{Version: s.returnVersion}, s.returnErr } +/* // Test happy path: get a version func TestPermissioning_GetNetworkVersion(t *testing.T) { var sender MockVersionSender @@ -109,3 +105,4 @@ func TestPermissioning_GetNetworkVersion_Errors(t *testing.T) { t.Error("Should return an error indicating the version string was unparseable") } } +*/ diff --git a/single/manager_test.go b/single/manager_test.go index 33427010d53d967a2a2dd52fb1971b661974e2d9..e5f1c20a2d8cb70b623a9d318c916515c3b9024a 100644 --- a/single/manager_test.go +++ b/single/manager_test.go @@ -312,7 +312,7 @@ func (tnm *testNetworkManager) GetHealthTracker() interfaces.HealthTracker { return nil } -func (tnm *testNetworkManager) Follow() (stoppable.Stoppable, error) { +func (tnm *testNetworkManager) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppable, error) { return nil, nil }