Skip to content
Snippets Groups Projects
Commit 06a9fdb6 authored by Richard T. Carback III's avatar Richard T. Carback III
Browse files

filling in details of tracker

parent f55ed1c7
Branches
Tags
4 merge requests!510Release,!207WIP: Client Restructure,!203Symmetric broadcast,!187Xx 3829/triggers
......@@ -9,6 +9,10 @@ package identity
import (
"encoding/json"
"os"
"sync"
"time"
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/interfaces"
......@@ -20,9 +24,6 @@ import (
"gitlab.com/xx_network/primitives/id"
"gitlab.com/xx_network/primitives/id/ephemeral"
"gitlab.com/xx_network/primitives/netTime"
"sort"
"sync"
"time"
)
const validityGracePeriod = 5 * time.Minute
......@@ -32,8 +33,11 @@ const TimestampKey = "IDTrackingTimestamp"
const TimestampStoreVersion = 0
const ephemeralStoppable = "EphemeralCheck"
const addressSpaceSizeChanTag = "ephemeralTracker"
var Forever time.Time = time.Time{}
const trackedIDChanSize = 1000
const deleteIDChanSize = 1000
type Tracker struct {
tracked []trackedID
......@@ -41,6 +45,8 @@ type Tracker struct{
session *storage.Session
newIdentity chan trackedID
deleteIdentity chan *id.ID
addrSpace *address.Space
mux *sync.Mutex
}
type trackedID struct {
......@@ -51,12 +57,32 @@ type trackedID struct{
Persistent bool
}
func NewTracker(session *storage.Session, addrSpace *address.Space)*Tracker{
func NewTracker(session *storage.Session, addrSpace *address.Space,
kv *versioned.KV) *Tracker {
//intilization
t := &Tracker{
tracked: make([]trackedID, 0),
session: session,
newIdentity: make(chan trackedID, trackedIDChanSize),
deleteIdentity: make(chan *id.ID, deleteIDChanSize),
addrSpace: addrSpace,
mux: &sync.Mutex{},
}
//loading
err := t.load()
if err != nil && os.IsNotExist(err) {
//if load fails, make a new
t.store = receptionID.NewStore(session.GetKV())
} else if err != nil {
jww.FATAL.Panicf("unable to create new Tracker: %+v", err)
} else {
t.store = receptionID.LoadStore(session.GetKV())
}
//check if there is an old timestamp, recreate the basic ID from it
//initilize the ephemeral identiies system
return t
}
//make the GetIdentities call on the ephemerals system public on this
......@@ -70,8 +96,6 @@ func (tracker Tracker)StartProcessies() stoppable.Stoppable {
return stop
}
// AddIdentity adds an identity to be tracked
func (tracker *Tracker) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {
tracker.newIdentity <- trackedID{
......@@ -287,6 +311,8 @@ func generateIdentitiesOverRange(lastGeneration, generateThrough time.Time,
}
func (tracker *Tracker) save() {
t.mux.Lock()
defer t.mux.Unlock()
persistant := make([]trackedID, 0, len(tracker.tracked))
for i := range tracker.tracked {
......@@ -299,20 +325,38 @@ func (tracker *Tracker)save(){
return
}
data, err := json.Marshal(&persistant)
if err != nil {
jww.FATAL.Panicf("Failed to marshal the tracked users")
jww.FATAL.Panicf("unable to marshal trackedID list: %+v", err)
}
obj := &versioned.Object{
Version: ,
Version: TrackerListVersion,
Timestamp: netTime.Now(),
Data: data,
}
err = tracker.session.GetKV().Set(TrackerListKey, TrackerListVersion, obj)
err = tracker.session.GetKV().Set(TrackerListKey, TrackerListVersion,
obj)
if err != nil {
jww.FATAL.Panicf("unable to save trackedID list: %+v", err)
}
}
func (t *Tracker) load() error {
t.mux.Lock()
defer t.mux.Unlock()
obj, err := t.session.GetKV().Get(TrackerListKey, TrackerListVersion)
if err != nil {
jww.FATAL.Panicf("Failed to store the tracked users")
return err
}
trackedID := make([]trackedID, 0)
err = json.Unmarshal(obj.Data, trackedID)
if err != nil {
return err
}
t.tracked = trackedID
return nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment