diff --git a/bindings/channels.go b/bindings/channels.go index f58af96029bfeb55ff800e13d6be032185e2823e..78182a190bb63b9f851049c85cb944da50a89454 100644 --- a/bindings/channels.go +++ b/bindings/channels.go @@ -11,6 +11,7 @@ import ( "crypto/ed25519" "encoding/base64" "encoding/json" + jww "github.com/spf13/jwalterweatherman" "sync" "time" @@ -234,6 +235,16 @@ func NewChannelsManagerGoEventModel(cmixID int, privateIdentity []byte, return nil, err } + // fixme: remove this, make it called by the javascript + // hack to get to release late at night + go func() { + time.Sleep(3 * time.Second) + localErr := user.IncreaseParallelNodeRegistration(13) + if localErr != nil { + jww.ERROR.Printf(localErr.Error()) + } + }() + // Add channel to singleton and return return channelManagerTrackerSingleton.make(m), nil } @@ -267,6 +278,16 @@ func LoadChannelsManagerGoEventModel(cmixID int, storageTag string, return nil, err } + // fixme: remove this, make it called by the javascript + // hack to get to release late at night + go func() { + time.Sleep(3 * time.Second) + localErr := user.IncreaseParallelNodeRegistration(13) + if localErr != nil { + jww.ERROR.Printf(localErr.Error()) + } + }() + // Add channel to singleton and return return channelManagerTrackerSingleton.make(m), nil } diff --git a/bindings/follow.go b/bindings/follow.go index 6f892e4151356b6bfa0906f2f746542aaae4c99e..4327964853f82e3f23146ecb3d017a5552e90146 100644 --- a/bindings/follow.go +++ b/bindings/follow.go @@ -188,6 +188,12 @@ func (c *Cmix) AddHealthCallback(nhc NetworkHealthCallback) int64 { return int64(c.api.GetCmix().AddHealthCallback(nhc.Callback)) } +// IncreaseParallelNodeRegistration increases the number of parallel node +// registrations by num +func (c *Cmix) IncreaseParallelNodeRegistration(num int) error { + return c.api.IncreaseParallelNodeRegistration(num) +} + // RemoveHealthCallback removes a health callback using its registration ID. func (c *Cmix) RemoveHealthCallback(funcID int64) { c.api.GetCmix().RemoveHealthCallback(uint64(funcID)) diff --git a/cmix/interface.go b/cmix/interface.go index 1d0bfdaeb09c25ab4b26018233ab0b8b52e93964..0e01001ba00835213f1bf3d868a049bf427380d2 100644 --- a/cmix/interface.go +++ b/cmix/interface.go @@ -191,6 +191,10 @@ type Client interface { AddService(clientID *id.ID, newService message.Service, response message.Processor) + // IncreaseParallelNodeRegistration increases the number of parallel node + // registrations by num + IncreaseParallelNodeRegistration(num int) func() (stoppable.Stoppable, error) + // DeleteService deletes a message service. If only a single response is // associated with the preimage, the entire preimage is removed. If there is // more than one response, only the given response is removed. If nil is diff --git a/cmix/nodes/interfaces.go b/cmix/nodes/interfaces.go index 5d08e6db9a6c97712621ed02ced970e8344e1f00..ddce4b8f21c98f4ed6824e56a6d755be63ee6f82 100644 --- a/cmix/nodes/interfaces.go +++ b/cmix/nodes/interfaces.go @@ -27,6 +27,10 @@ type Registrar interface { // to register with nodes. StartProcesses(numParallel uint) stoppable.Stoppable + // IncreaseParallelNodeRegistration increases the number of parallel node + // registrations by num + IncreaseParallelNodeRegistration(num int) func() (stoppable.Stoppable, error) + // GetNodeKeys returns a MixCypher for the topology and a list of nodes it did // not have a key for. If there are missing keys, then returns nil. GetNodeKeys(topology *connect.Circuit) (MixCypher, error) diff --git a/cmix/nodes/registrar.go b/cmix/nodes/registrar.go index 5ca5f108d201de75fcb739c43ea1bf2cea24951b..0c942b8de091ab1d64b2eb2cc0d67b73c19d0194 100644 --- a/cmix/nodes/registrar.go +++ b/cmix/nodes/registrar.go @@ -46,6 +46,11 @@ type registrar struct { comms RegisterNodeCommsInterface rng *fastRNG.StreamGenerator + inProgress sync.Map + // We are relying on the in progress check to ensure there is only a single + // operator at a time, as a result this is a map of ID -> int + attempts sync.Map + c chan network.NodeGateway } @@ -91,22 +96,33 @@ func LoadRegistrar(session session, sender gateway.Sender, func (r *registrar) StartProcesses(numParallel uint) stoppable.Stoppable { multi := stoppable.NewMulti("NodeRegistrations") - inProgress := &sync.Map{} - - // We are relying on the in progress check to ensure there is only a single - // operator at a time, as a result this is a map of ID -> int - attempts := &sync.Map{} - for i := uint(0); i < numParallel; i++ { stop := stoppable.NewSingle("NodeRegistration " + strconv.Itoa(int(i))) - go registerNodes(r, r.session, stop, inProgress, attempts) + go registerNodes(r, r.session, stop, &r.inProgress, &r.attempts) multi.Add(stop) } return multi } +// IncreaseParallelNodeRegistration increases the number of parallel node +// registrations by num +func (r *registrar) IncreaseParallelNodeRegistration(numParallel int) func() (stoppable.Stoppable, error) { + return func() (stoppable.Stoppable, error) { + multi := stoppable.NewMulti("NodeRegistrationsIncrease") + + for i := uint(0); i < uint(numParallel); i++ { + stop := stoppable.NewSingle("NodeRegistration Increase" + strconv.Itoa(int(i))) + + go registerNodes(r, r.session, stop, &r.inProgress, &r.attempts) + multi.Add(stop) + } + + return multi, nil + } +} + // GetNodeKeys returns a MixCypher for the topology and a list of nodes it did // not have a key for. If there are missing keys, then returns nil. func (r *registrar) GetNodeKeys(topology *connect.Circuit) (MixCypher, error) { diff --git a/cmix/parallelNodeRegistrations.go b/cmix/parallelNodeRegistrations.go new file mode 100644 index 0000000000000000000000000000000000000000..48f232901263118fffdc12c7c1ec16d3a2f35aa0 --- /dev/null +++ b/cmix/parallelNodeRegistrations.go @@ -0,0 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright © 2022 xx foundation // +// // +// Use of this source code is governed by a license that can be found in the // +// LICENSE file. // +//////////////////////////////////////////////////////////////////////////////// + +// This file is compiled for all architectures except WebAssembly. +//go:build !js || !wasm + +package cmix + +const defaultParallelNodeRegistration = 20 diff --git a/cmix/parallelNodeRegistrations_js.go b/cmix/parallelNodeRegistrations_js.go new file mode 100644 index 0000000000000000000000000000000000000000..8e90835507059eb67d8b8c5baacdce7561b35129 --- /dev/null +++ b/cmix/parallelNodeRegistrations_js.go @@ -0,0 +1,3 @@ +package cmix + +const defaultParallelNodeRegistration = 2 diff --git a/cmix/params.go b/cmix/params.go index f15b62feb01f240c90efe88e78281e72eff4dd38..01a606e5b44fdb5d72d1ed851a82598f41ddff6c 100644 --- a/cmix/params.go +++ b/cmix/params.go @@ -100,7 +100,7 @@ func GetDefaultParams() Params { MaxCheckedRounds: 500, RegNodesBufferLen: 1000, NetworkHealthTimeout: 15 * time.Second, - ParallelNodeRegistrations: 2, + ParallelNodeRegistrations: defaultParallelNodeRegistration, KnownRoundsThreshold: 1500, // 5 rounds/sec * 60 sec/min * 5 min FastPolling: true, VerboseRoundTracking: false, diff --git a/connect/utils_test.go b/connect/utils_test.go index 3aab375cca15e1385a2fa7c621751a0ab508d0cf..9e38793d8423a74299197d8e3a43d00180df20ab 100644 --- a/connect/utils_test.go +++ b/connect/utils_test.go @@ -180,21 +180,22 @@ func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { return identity.TrackedID{Creation: netTime.Now().Add(-time.Minute)}, nil } -func (m *mockCmix) AddFingerprint(*id.ID, format.Fingerprint, message.Processor) error { return nil } -func (m *mockCmix) DeleteFingerprint(*id.ID, format.Fingerprint) {} -func (m *mockCmix) DeleteClientFingerprints(*id.ID) {} -func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) {} -func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) {} -func (m *mockCmix) DeleteClientService(*id.ID) {} -func (m *mockCmix) TrackServices(message.ServicesTracker) {} -func (m *mockCmix) CheckInProgressMessages() {} -func (m *mockCmix) IsHealthy() bool { return true } -func (m *mockCmix) WasHealthy() bool { return true } -func (m *mockCmix) AddHealthCallback(func(bool)) uint64 { return 0 } -func (m *mockCmix) RemoveHealthCallback(uint64) {} -func (m *mockCmix) HasNode(*id.ID) bool { return true } -func (m *mockCmix) NumRegisteredNodes() int { return 24 } -func (m *mockCmix) TriggerNodeRegistration(*id.ID) {} +func (m *mockCmix) AddFingerprint(*id.ID, format.Fingerprint, message.Processor) error { return nil } +func (m *mockCmix) DeleteFingerprint(*id.ID, format.Fingerprint) {} +func (m *mockCmix) DeleteClientFingerprints(*id.ID) {} +func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) {} +func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {return nil} +func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) {} +func (m *mockCmix) DeleteClientService(*id.ID) {} +func (m *mockCmix) TrackServices(message.ServicesTracker) {} +func (m *mockCmix) CheckInProgressMessages() {} +func (m *mockCmix) IsHealthy() bool { return true } +func (m *mockCmix) WasHealthy() bool { return true } +func (m *mockCmix) AddHealthCallback(func(bool)) uint64 { return 0 } +func (m *mockCmix) RemoveHealthCallback(uint64) {} +func (m *mockCmix) HasNode(*id.ID) bool { return true } +func (m *mockCmix) NumRegisteredNodes() int { return 24 } +func (m *mockCmix) TriggerNodeRegistration(*id.ID) {} func (m *mockCmix) GetRoundResults(_ time.Duration, roundCallback cmix.RoundEventCallback, _ ...id.Round) { roundCallback(true, false, nil) diff --git a/dummy/mockCmix_test.go b/dummy/mockCmix_test.go index 75cdee581be7e2b08de783f8e27d9d58de078093..60e7de512b840412d9290fdf0cde190f88cf3d74 100644 --- a/dummy/mockCmix_test.go +++ b/dummy/mockCmix_test.go @@ -126,6 +126,12 @@ func (m mockCmix) AddService(clientID *id.ID, newService message.Service, respon panic("implement me") } +func (m mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) { + //TODO implement me + panic("implement me") +} + + func (m mockCmix) DeleteService(clientID *id.ID, toDelete message.Service, processor message.Processor) { //TODO implement me panic("implement me") diff --git a/e2e/fpGenerator_test.go b/e2e/fpGenerator_test.go index 657fc16462548659dcd8e409c5acb6da928ffeef..adb178e669a8ca94c79bae2909d009530e6f168d 100644 --- a/e2e/fpGenerator_test.go +++ b/e2e/fpGenerator_test.go @@ -159,8 +159,11 @@ func (m *mockFpgCmix) DeleteFingerprint(uid *id.ID, fp format.Fingerprint) { } } -func (m *mockFpgCmix) DeleteClientFingerprints(*id.ID) {} -func (m *mockFpgCmix) AddService(*id.ID, message.Service, message.Processor) {} +func (m *mockFpgCmix) DeleteClientFingerprints(*id.ID) {} +func (m *mockFpgCmix) AddService(*id.ID, message.Service, message.Processor) {} +func (m *mockFpgCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) { + return nil +} func (m *mockFpgCmix) DeleteService(*id.ID, message.Service, message.Processor) {} func (m *mockFpgCmix) DeleteClientService(*id.ID) {} func (m *mockFpgCmix) TrackServices(message.ServicesTracker) {} diff --git a/e2e/rekey/utils_test.go b/e2e/rekey/utils_test.go index aeccacbe316832b436901c654981a6d6fc1138e5..58512b33aa0dc41c9a17f0ab22605c5002e2d013 100644 --- a/e2e/rekey/utils_test.go +++ b/e2e/rekey/utils_test.go @@ -222,7 +222,7 @@ func (m mockServiceHandler) DeleteService(clientID *id.ID, toDelete message.Serv type mockNetManager struct{} func (m *mockNetManager) GetIdentity(get *id.ID) (identity.TrackedID, error) { - //TODO implement me + // TODO implement me panic("implement me") } @@ -270,6 +270,11 @@ func (m *mockNetManager) AddService(clientID *id.ID, newService message.Service, response message.Processor) { } +func (m *mockNetManager) IncreaseParallelNodeRegistration( + int) func() (stoppable.Stoppable, error) { + return nil +} + func (m *mockNetManager) DeleteService(clientID *id.ID, toDelete message.Service, processor message.Processor) { } diff --git a/e2e/utils_test.go b/e2e/utils_test.go index 78a0eaa7c57a7cd0520f42c260e3968fdbf6ff6a..8ba510fe0e66471878310440ca0de0da7980fdeb 100644 --- a/e2e/utils_test.go +++ b/e2e/utils_test.go @@ -239,7 +239,9 @@ func (m *mockCmix) AddService(myId *id.ID, srv message.Service, proc message.Pro m.handler.Unlock() } - +func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) { + return nil +} func (m *mockCmix) DeleteClientFingerprints(*id.ID) {} func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) {} func (m *mockCmix) DeleteClientService(*id.ID) {} diff --git a/fileTransfer/connect/utils_test.go b/fileTransfer/connect/utils_test.go index b707e548ec2bbe96d43b9d7d3fa6f19205bee424..14707813e1a1a2361171b1c6a9412cd4dee8b57e 100644 --- a/fileTransfer/connect/utils_test.go +++ b/fileTransfer/connect/utils_test.go @@ -158,8 +158,11 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) { m.handler.Unlock() } -func (m *mockCmix) DeleteClientFingerprints(*id.ID) { panic("implement me") } -func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") } +func (m *mockCmix) DeleteClientFingerprints(*id.ID) { panic("implement me") } +func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") } +func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) { + panic("implement me") +} func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) { panic("implement me") } func (m *mockCmix) DeleteClientService(*id.ID) { panic("implement me") } func (m *mockCmix) TrackServices(message.ServicesTracker) { panic("implement me") } diff --git a/fileTransfer/e2e/utils_test.go b/fileTransfer/e2e/utils_test.go index a7f50a19525cd2360dfb698fbca8281f2572d520..b77985aed45ac7dd36fa600a3684f41aac98a0ae 100644 --- a/fileTransfer/e2e/utils_test.go +++ b/fileTransfer/e2e/utils_test.go @@ -160,8 +160,11 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) { m.handler.Unlock() } -func (m *mockCmix) DeleteClientFingerprints(*id.ID) { panic("implement me") } -func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") } +func (m *mockCmix) DeleteClientFingerprints(*id.ID) { panic("implement me") } +func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") } +func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) { + panic("implement me") +} func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) { panic("implement me") } func (m *mockCmix) DeleteClientService(*id.ID) { panic("implement me") } func (m *mockCmix) TrackServices(message.ServicesTracker) { panic("implement me") } diff --git a/fileTransfer/groupChat/utils_test.go b/fileTransfer/groupChat/utils_test.go index a616d65c19783c0bfd9789fb0e3399a61a253656..4475c6a0d45de084a214f73210681b9346132899 100644 --- a/fileTransfer/groupChat/utils_test.go +++ b/fileTransfer/groupChat/utils_test.go @@ -157,6 +157,7 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) { func (m *mockCmix) DeleteClientFingerprints(*id.ID) { panic("implement me") } func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") } +func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {panic("implement me")} func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) { panic("implement me") } func (m *mockCmix) DeleteClientService(*id.ID) { panic("implement me") } func (m *mockCmix) TrackServices(message.ServicesTracker) { panic("implement me") } diff --git a/fileTransfer/utils_test.go b/fileTransfer/utils_test.go index daba7a06489ec8dac51f9a016d304f779ae94ec8..3c884076acf535232f8f4da54a59ac1cc7b4ec5e 100644 --- a/fileTransfer/utils_test.go +++ b/fileTransfer/utils_test.go @@ -211,8 +211,11 @@ func (m *mockCmix) DeleteFingerprint(_ *id.ID, fp format.Fingerprint) { delete(m.handler.processorMap, fp) } -func (m *mockCmix) DeleteClientFingerprints(*id.ID) { panic("implement me") } -func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") } +func (m *mockCmix) DeleteClientFingerprints(*id.ID) { panic("implement me") } +func (m *mockCmix) AddService(*id.ID, message.Service, message.Processor) { panic("implement me") } +func (m *mockCmix) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) { + return nil +} func (m *mockCmix) DeleteService(*id.ID, message.Service, message.Processor) { panic("implement me") } func (m *mockCmix) DeleteClientService(*id.ID) { panic("implement me") } func (m *mockCmix) TrackServices(message.ServicesTracker) { panic("implement me") } diff --git a/go.mod b/go.mod index ffcc9f9adb8ac862ae6f818ceaf6986bd1369836..f3586fdf85231a686816bed9fb7ba27290011176 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/stretchr/testify v1.8.0 gitlab.com/elixxir/bloomfilter v0.0.0-20211222005329-7d931ceead6f gitlab.com/elixxir/comms v0.0.4-0.20221027003916-cd6907e99c34 - gitlab.com/elixxir/crypto v0.0.7-0.20221026155635-b8e44a9e8bba + gitlab.com/elixxir/crypto v0.0.7-0.20221027040529-dbcb6eb2b087 gitlab.com/elixxir/ekv v0.2.1 gitlab.com/elixxir/primitives v0.0.3-0.20221025020430-f5d2eb330fbc gitlab.com/xx_network/comms v0.0.4-0.20221025202603-3043ba10b2a2 diff --git a/go.sum b/go.sum index 53e9460e9990e125222eb2502794da3587f4632e..52aa70171076b73b33f297c32602324faa74aec5 100644 --- a/go.sum +++ b/go.sum @@ -637,6 +637,8 @@ gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= gitlab.com/elixxir/crypto v0.0.7-0.20221026155635-b8e44a9e8bba h1:FrHLVbgIcPMzEpA/IeS3HfYvdf1XP+EoFNavvmBj8bo= gitlab.com/elixxir/crypto v0.0.7-0.20221026155635-b8e44a9e8bba/go.mod h1:NImDa7951+jSolkYN/BBUm6qG6f+k0hsFZOCIxBlLhE= +gitlab.com/elixxir/crypto v0.0.7-0.20221027040529-dbcb6eb2b087 h1:e9cVSSFMmvnTj4PVRa1kCKhwWCekMNTEbeUply4NUGc= +gitlab.com/elixxir/crypto v0.0.7-0.20221027040529-dbcb6eb2b087/go.mod h1:NImDa7951+jSolkYN/BBUm6qG6f+k0hsFZOCIxBlLhE= gitlab.com/elixxir/ekv v0.2.1 h1:dtwbt6KmAXG2Tik5d60iDz2fLhoFBgWwST03p7T+9Is= gitlab.com/elixxir/ekv v0.2.1/go.mod h1:USLD7xeDnuZEavygdrgzNEwZXeLQJK/w1a+htpN+JEU= gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg= diff --git a/groupChat/networkManager_test.go b/groupChat/networkManager_test.go index 934744be0b08341ba95cc8e4e4af25bbcb5bae0d..2cdd1a28a596b8646032417c17d8a5722d3bee94 100644 --- a/groupChat/networkManager_test.go +++ b/groupChat/networkManager_test.go @@ -66,7 +66,10 @@ func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, _ c return rounds.Round{}, nil, nil } -func (*testNetworkManager) AddService(*id.ID, message.Service, message.Processor) {} +func (*testNetworkManager) AddService(*id.ID, message.Service, message.Processor) {} +func (*testNetworkManager) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) { + return nil +} func (*testNetworkManager) DeleteService(*id.ID, message.Service, message.Processor) {} ///////////////////////////////////////////////////////////////////////////////////// @@ -74,159 +77,159 @@ func (*testNetworkManager) DeleteService(*id.ID, message.Service, message.Proces ///////////////////////////////////////////////////////////////////////////////////// func (tnm *testNetworkManager) Follow(report cmix.ClientErrorReport) (stoppable.Stoppable, error) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) SendWithAssembler(recipient *id.ID, assembler cmix.MessageAssembler, cmixParams cmix.CMIXParams) (rounds.Round, ephemeral.Id, error) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) Send(recipient *id.ID, fingerprint format.Fingerprint, service message.Service, payload, mac []byte, cmixParams cmix.CMIXParams) (rounds.Round, ephemeral.Id, error) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) RemoveIdentity(id *id.ID) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) GetIdentity(get *id.ID) (identity.TrackedID, error) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, mp message.Processor) error { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) DeleteFingerprint(identity *id.ID, fingerprint format.Fingerprint) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) DeleteClientFingerprints(identity *id.ID) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) DeleteClientService(clientID *id.ID) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) TrackServices(tracker message.ServicesTracker) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) CheckInProgressMessages() { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) IsHealthy() bool { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) WasHealthy() bool { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) AddHealthCallback(f func(bool)) uint64 { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) RemoveHealthCallback(u uint64) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) HasNode(nid *id.ID) bool { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) NumRegisteredNodes() int { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) TriggerNodeRegistration(nid *id.ID) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) GetRoundResults(timeout time.Duration, roundCallback cmix.RoundEventCallback, roundList ...id.Round) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) LookupHistoricalRound(rid id.Round, callback rounds.RoundResultCallback) error { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) SendToAny(sendFunc func(host *connect.Host) (interface{}, error), stop *stoppable.Single) (interface{}, error) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) SendToPreferred(targets []*id.ID, sendFunc gateway.SendToPreferredFunc, stop *stoppable.Single, timeout time.Duration) (interface{}, error) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) SetGatewayFilter(f gateway.Filter) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) GetHostParams() connect.HostParams { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) GetAddressSpace() uint8 { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) RegisterAddressSpaceNotification(tag string) (chan uint8, error) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) UnregisterAddressSpaceNotification(tag string) { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) GetInstance() *network.Instance { - //TODO implement me + // TODO implement me panic("implement me") } func (tnm *testNetworkManager) GetVerboseRounds() string { - //TODO implement me + // TODO implement me panic("implement me") } diff --git a/ud/networkManager_test.go b/ud/networkManager_test.go index e58b3cf1fe3ef539e4c19bcb8ca2f95e24a15901..9cb6866c512b86b33dd9b9b4b8af0a1172d87389 100644 --- a/ud/networkManager_test.go +++ b/ud/networkManager_test.go @@ -115,6 +115,8 @@ func (tnm *testNetworkManager) AddService(clientID *id.ID, return } +func (tnm *testNetworkManager) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) {return nil} + func (tnm *testNetworkManager) CheckInProgressMessages() { return } diff --git a/xxdk/cmix.go b/xxdk/cmix.go index a2b8b8b9ad3c6e7cc77c6eb325fabba17084cff0..9ccf239dbaf6da0d00cef0bf7638090821a3ec2b 100644 --- a/xxdk/cmix.go +++ b/xxdk/cmix.go @@ -484,6 +484,14 @@ func (c *Cmix) GetNodeRegistrationStatus() (int, int, error) { return numRegistered, len(nodes) - numStale, nil } +// IncreaseParallelNodeRegistration increases the number of parallel node +// registrations by num +func (c *Cmix) IncreaseParallelNodeRegistration(num int) error { + jww.INFO.Printf("IncreaseParallelNodeRegistration(%d)", num) + svc := c.network.IncreaseParallelNodeRegistration(num) + return c.followerServices.add(svc) +} + // GetPreferredBins returns the geographic bin or bins that the provided two // character country code is a part of. func (c *Cmix) GetPreferredBins(countryCode string) ([]string, error) { diff --git a/xxdk/utilsInterfaces_test.go b/xxdk/utilsInterfaces_test.go index a6be0ca8d7143ed748efe04058930a47392aa08c..da4afd17210ebad04a2908f783375af35a513331 100644 --- a/xxdk/utilsInterfaces_test.go +++ b/xxdk/utilsInterfaces_test.go @@ -168,6 +168,10 @@ func (t *testNetworkManagerGeneric) RemoveIdentity(id *id.ID) {} func (t *testNetworkManagerGeneric) AddService(clientID *id.ID, newService message.Service, response message.Processor) { } +func (t *testNetworkManagerGeneric) IncreaseParallelNodeRegistration(int) func() (stoppable.Stoppable, error) { + return nil +} + func (t *testNetworkManagerGeneric) DeleteService(clientID *id.ID, toDelete message.Service, processor message.Processor) { }