Skip to content

Commit

Permalink
fix: node not being updated in network because it wasn't a pointer
Browse files Browse the repository at this point in the history
  • Loading branch information
janaakhterov committed Dec 16, 2020
1 parent ccffa55 commit 1edeb37
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 68 deletions.
42 changes: 21 additions & 21 deletions network.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,20 @@ package hedera

import (
"sort"
"time"
)

type network struct {
network map[string]AccountID
nodes []node
networkNodes map[AccountID]node

lastSortedNodeAccountIDs int64
nodes []*node
networkNodes map[AccountID]*node
}

func newNetwork() network {
networkForReturn := network{
return network{
network: make(map[string]AccountID),
nodes: make([]node, 0),
networkNodes: make(map[AccountID]node),
lastSortedNodeAccountIDs: time.Now().UTC().Unix(),
nodes: make([]*node, 0),
networkNodes: make(map[AccountID]*node),
}

return networkForReturn
}

func (network *network) SetNetwork(net map[string]AccountID) error {
Expand All @@ -38,11 +32,12 @@ func (network *network) SetNetwork(net map[string]AccountID) error {

for url, id := range net {
if _, ok := network.network[url]; !ok {
network.networkNodes[id] = newNode(id, url)
node := newNode(id, url)
network.networkNodes[id] = &node
}
}

network.nodes = make([]node, len(net))
network.nodes = make([]*node, len(net))
i := 0
for _, node := range network.networkNodes {
network.nodes[i] = node
Expand All @@ -55,22 +50,27 @@ func (network *network) SetNetwork(net map[string]AccountID) error {
}

func (network *network) getNodeAccountIDsForExecute() []AccountID {
if network.lastSortedNodeAccountIDs+1 < time.Now().UTC().Unix() {
sort.Sort(nodes{nodes: network.nodes})
network.lastSortedNodeAccountIDs = time.Now().UTC().Unix()
}
sort.Sort(nodes{nodes: network.nodes})

length := network.getNumberOfNodesForTransaction()
accountIDs := make([]AccountID, length)

slice := network.nodes[0:network.getNumberOfNodesForTransaction()]
var accountIDs = make([]AccountID, len(slice))
for i, id := range slice {
for i, id := range network.nodes[0:length] {
accountIDs[i] = id.accountID
}

return accountIDs
}

func (network *network) getNumberOfNodesForTransaction() int {
return (len(network.nodes) + 3 - 1) / 3
count := 0
for _, node := range network.nodes {
if node.isHealthy() {
count++
}
}

return (count + 3 - 1) / 3
}

func (network *network) Close() error {
Expand Down
18 changes: 9 additions & 9 deletions node.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type node struct {
}

type nodes struct {
nodes []node
nodes []*node
}

func newNode(accountID AccountID, address string) node {
Expand All @@ -33,31 +33,31 @@ func newNode(accountID AccountID, address string) node {
}
}

func (node node) inUse() {
node.useCount++
func (node *node) inUse() {
node.useCount += 1
node.lastUsed = time.Now().UTC().UnixNano()
}

func (node node) isHealthy() bool {
func (node *node) isHealthy() bool {
return node.delayUntil <= time.Now().UTC().UnixNano()
}

func (node node) increaseDelay() {
func (node *node) increaseDelay() {
node.delay = int64(math.Min(float64(node.delay)*2, 8000))
node.delayUntil = (node.delay * 100000) + time.Now().UTC().UnixNano()
}

func (node node) decreaseDelay() {
func (node *node) decreaseDelay() {
node.delay = int64(math.Max(float64(node.delay)/2, 250))
}

func (node node) wait() {
func (node *node) wait() {
delay := node.delayUntil - node.lastUsed
time.Sleep(time.Duration(delay) * time.Nanosecond)

}

func (node node) getChannel() (*channel, error) {
func (node *node) getChannel() (*channel, error) {
if node.channel != nil {
return node.channel, nil
}
Expand All @@ -73,7 +73,7 @@ func (node node) getChannel() (*channel, error) {
return node.channel, nil
}

func (node node) close() error {
func (node *node) close() error {
return node.channel.client.Close()
}

Expand Down
75 changes: 37 additions & 38 deletions transfer_transaction_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package hedera

import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)
Expand All @@ -10,8 +9,8 @@ func TestCryptoTransferTransaction_Execute(t *testing.T) {
client := newTestClient(t)

resp, err := NewTransferTransaction().
AddHbarTransfer(client.GetOperatorAccountID(), NewHbar(1)).
AddHbarTransfer(AccountID{Account: 3}, NewHbar(-1)).
AddHbarTransfer(client.GetOperatorAccountID(), NewHbar(-1)).
AddHbarTransfer(AccountID{Account: 3}, NewHbar(1)).
SetMaxTransactionFee(NewHbar(1)).
Execute(client)
assert.NoError(t, err)
Expand All @@ -31,38 +30,38 @@ func TestCryptoTransferTransactionNothing_Execute(t *testing.T) {
assert.NoError(t, err)
}

func TestCryptoTransferTransaction1000_Execute(t *testing.T) {
client := newTestClient(t)
var err error
tx := make([]*TransferTransaction, 500)
response := make([]TransactionResponse, len(tx))
receipt := make([]TransactionReceipt, len(tx))

for i := 0; i < len(tx); i++ {
tx[i], err = NewTransferTransaction().
AddHbarTransfer(client.GetOperatorAccountID(), HbarFromTinybar(-10)).
AddHbarTransfer(AccountID{Account: 3}, HbarFromTinybar(10)).
SetMaxTransactionFee(NewHbar(1)).
FreezeWith(client)
if err != nil {
panic(err)
}

fmt.Printf("%+v\n", tx[i].GetNodeAccountIDs())

_, err = tx[i].SignWithOperator(client)
if err != nil {
panic(err)
}

response[i], err = tx[i].Execute(client)
if err != nil {
panic(err)
}

receipt[i], err = response[i].GetReceipt(client)
if err != nil {
panic(err)
}
}
}
//func TestCryptoTransferTransaction1000_Execute(t *testing.T) {
// client := newTestClient(t)
// var err error
// tx := make([]*TransferTransaction, 500)
// response := make([]TransactionResponse, len(tx))
// receipt := make([]TransactionReceipt, len(tx))
//
// for i := 0; i < len(tx); i++ {
// tx[i], err = NewTransferTransaction().
// AddHbarTransfer(client.GetOperatorAccountID(), HbarFromTinybar(-10)).
// AddHbarTransfer(AccountID{Account: 3}, HbarFromTinybar(10)).
// SetMaxTransactionFee(NewHbar(1)).
// FreezeWith(client)
// if err != nil {
// panic(err)
// }
//
// _, err = tx[i].SignWithOperator(client)
// if err != nil {
// panic(err)
// }
//
// response[i], err = tx[i].Execute(client)
// if err != nil {
// panic(err)
// }
//
// receipt[i], err = response[i].GetReceipt(client)
// if err != nil {
// panic(err)
// }
//
// fmt.Printf("\r%v", i)
// }
//}

0 comments on commit 1edeb37

Please sign in to comment.