Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mana vector fixes #2396

Merged
merged 25 commits into from
Aug 30, 2022
Merged
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
75d88ce
Use mana delay param only from mana plugin
daria305 Aug 22, 2022
ac3d5c1
Update unit tests
daria305 Aug 22, 2022
40b1323
Prune activity on epoch confirmed
daria305 Aug 22, 2022
355017a
Add missing expected calls
daria305 Aug 24, 2022
aed4483
Merge branch 'develop' into feat/mana-vector-update-fixes
daria305 Aug 24, 2022
0e856c3
Update mana vector update event after merging
daria305 Aug 24, 2022
34941a3
Tiny renames and comment
karimodm Aug 25, 2022
5cedc23
Update DiffUTXO test
daria305 Aug 25, 2022
69a3b21
Merge remote-tracking branch 'origin/feat/mana-vector-update-fixes' i…
daria305 Aug 25, 2022
6840417
Make SetEpochs private
daria305 Aug 25, 2022
7f4eadd
Change NodesActivityLog to shrinking map. Serializing not works
daria305 Aug 25, 2022
ab6022c
Fix stackoverflow
daria305 Aug 29, 2022
ae4c11a
Fix serialization
daria305 Aug 29, 2022
8397d22
Unexport field
daria305 Aug 29, 2022
08aa2da
Fix comment and forEach
daria305 Aug 29, 2022
8528b52
Fix channel close race condition
karimodm Aug 29, 2022
c3d429b
Return lowest processed epoch
karimodm Aug 29, 2022
363182b
deadlock fix
karimodm Aug 29, 2022
84d6156
Warpsync more channel fixes
karimodm Aug 30, 2022
62a49a0
Fix snapshot mutable constructor
daria305 Aug 30, 2022
b9d87ff
Use mutable model for Activity log to hide setEpochs
daria305 Aug 30, 2022
d48b9f2
Fix: epochstorage deadlock
karimodm Aug 30, 2022
68246d7
Warpsync: properly check for overlapping ranges
karimodm Aug 30, 2022
e577168
Make Inbound peer resource allocation synchronous
karimodm Aug 30, 2022
e92df0d
Merge remote-tracking branch 'origin/fix/warpsync-bugs' into feat/man…
daria305 Aug 30, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Use mutable model for Activity log to hide setEpochs
  • Loading branch information
daria305 committed Aug 30, 2022
commit b9d87ff9d221b3b623dbd9aeeb8141a4d7aa3b37
29 changes: 15 additions & 14 deletions packages/core/epoch/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,31 +308,32 @@ func (al *NodesActivityLog) loadActivityLogsMap(m nodesActivitySerializableMap)
// ActivityLog is a time-based log of node activity. It stores information when a node is active and provides
// functionality to query for certain timeframes.
type ActivityLog struct {
SetEpochs *set.AdvancedSet[identity.ID] `serix:"0,lengthPrefixType=uint32"`
model.Mutable[ActivityLog, *ActivityLog, activityLogModel] `serix:"0"`
}

// nodeActivityModel stores node identities and corresponding accepted block counters indicating how many blocks node issued in a given epoch.
type activityLogModel struct {
ActivityLog *set.AdvancedSet[identity.ID] `serix:"0,lengthPrefixType=uint32"`
}

// NewActivityLog is the constructor for ActivityLog.
func NewActivityLog() *ActivityLog {
a := &ActivityLog{
SetEpochs: set.NewAdvancedSet[identity.ID](),
}

return a
return model.NewMutable[ActivityLog](&activityLogModel{ActivityLog: set.NewAdvancedSet[identity.ID]()})
}

// Add adds a node to the activity log.
func (a *ActivityLog) Add(nodeID identity.ID) (added bool) {
return a.SetEpochs.Add(nodeID)
return a.InnerModel().ActivityLog.Add(nodeID)
}

// Remove removes a node from the activity log.
func (a *ActivityLog) Remove(nodeID identity.ID) (removed bool) {
return a.SetEpochs.Delete(nodeID)
return a.InnerModel().ActivityLog.Delete(nodeID)
}

// Active returns true if the provided node was active.
func (a *ActivityLog) Active(nodeID identity.ID) (active bool) {
if a.SetEpochs.Has(nodeID) {
if a.InnerModel().ActivityLog.Has(nodeID) {
return true
}

Expand All @@ -342,8 +343,8 @@ func (a *ActivityLog) Active(nodeID identity.ID) (active bool) {
// String returns a human-readable version of ActivityLog.
func (a *ActivityLog) String() string {
var builder strings.Builder
builder.WriteString(fmt.Sprintf("ActivityLog(len=%d, elements=", a.SetEpochs.Size()))
a.SetEpochs.ForEach(func(nodeID identity.ID) (err error) {
builder.WriteString(fmt.Sprintf("ActivityLog(len=%d, elements=", a.Size()))
a.InnerModel().ActivityLog.ForEach(func(nodeID identity.ID) (err error) {
builder.WriteString(fmt.Sprintf("%s, ", nodeID.String()))
return
})
Expand All @@ -354,18 +355,18 @@ func (a *ActivityLog) String() string {
// Clone clones the ActivityLog.
func (a *ActivityLog) Clone() *ActivityLog {
clone := NewActivityLog()
clone.SetEpochs = a.SetEpochs.Clone()
clone.InnerModel().ActivityLog = a.InnerModel().ActivityLog.Clone()
return clone
}

// ForEach iterates through the activity set and calls the callback for every element.
func (a *ActivityLog) ForEach(callback func(nodeID identity.ID) (err error)) (err error) {
return a.SetEpochs.ForEach(callback)
return a.InnerModel().ActivityLog.ForEach(callback)
}

// Size returns the size of the activity log.
func (a *ActivityLog) Size() int {
return a.SetEpochs.Size()
return a.InnerModel().ActivityLog.Size()
}

// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down