Skip to content

Commit 0c7ae37

Browse files
committed
store last vector clock instead of just last clock in the tracing server
1 parent 3989991 commit 0c7ae37

File tree

5 files changed

+25
-30
lines changed

5 files changed

+25
-30
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ module github.com/DistributedClocks/tracing
33
go 1.14
44

55
require (
6-
github.com/DistributedClocks/GoVector v0.0.0-20210401191024-1400ef02f9b0
6+
github.com/DistributedClocks/GoVector v0.0.0-20210402100930-db949c81a0af
77
github.com/google/go-cmp v0.5.4
88
)

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
github.com/DistributedClocks/GoVector v0.0.0-20210401191024-1400ef02f9b0 h1:HRWExv6qm+GjZGmsRmw2pyOLvPZn3CjHr+KopnaGBV8=
22
github.com/DistributedClocks/GoVector v0.0.0-20210401191024-1400ef02f9b0/go.mod h1:KhO62KYM3s2gEKM3ESiiI4pgvEPHz96Y1R1ceFpyVBg=
3+
github.com/DistributedClocks/GoVector v0.0.0-20210402100930-db949c81a0af h1:dZA/5RPZb4h+6EPdMIyQ1SE62NBBGIp6O1UNowh+Ozg=
4+
github.com/DistributedClocks/GoVector v0.0.0-20210402100930-db949c81a0af/go.mod h1:KhO62KYM3s2gEKM3ESiiI4pgvEPHz96Y1R1ceFpyVBg=
35
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
46
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
57
github.com/daviddengcn/go-colortext v1.0.0 h1:ANqDyC0ys6qCSvuEK7l3g5RaehL/Xck9EX8ATG8oKsE=

server.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tracing
22

33
import (
44
"encoding/json"
5+
"errors"
56
"io/ioutil"
67
"log"
78
"net"
@@ -32,8 +33,8 @@ type TracingServer struct {
3233
shivizRecordFile *os.File
3334
shivizLogger *shivizLogger
3435

35-
lock sync.RWMutex
36-
lastVC vclock.VClock
36+
lock sync.RWMutex
37+
lastVCs map[string]vclock.VClock
3738
}
3839

3940
// RPCProvider is an abstraction to prevent registering non-RPC functions
@@ -72,7 +73,7 @@ func NewTracingServer(config TracingServerConfig) *TracingServer {
7273
tracingServer := &TracingServer{
7374
acceptDone: make(chan struct{}),
7475
Config: &config,
75-
lastVC: vclock.New(),
76+
lastVCs: make(map[string]vclock.VClock),
7677
}
7778
return tracingServer
7879
}
@@ -189,7 +190,7 @@ func (rp *RPCProvider) RecordAction(arg RecordActionArg, result *RecordActionRes
189190
}
190191

191192
rp.server.lock.Lock()
192-
rp.server.lastVC.Merge(arg.VectorClock)
193+
rp.server.lastVCs[arg.TracerIdentity] = arg.VectorClock
193194
rp.server.lock.Unlock()
194195

195196
if err := rp.server.recordEncoder.Encode(wrappedRecord); err != nil {
@@ -201,19 +202,18 @@ func (rp *RPCProvider) RecordAction(arg RecordActionArg, result *RecordActionRes
201202
return nil
202203
}
203204

204-
type GetLastClockArg string
205+
type GetLastVCArg string
205206

206-
type GetLastClockResult uint64
207+
type GetLastVCResult vclock.VClock
207208

208-
func (rp *RPCProvider) GetLastClock(arg GetLastClockArg, result *GetLastClockResult) error {
209+
func (rp *RPCProvider) GetLastVC(arg GetLastVCArg, result *GetLastVCResult) error {
209210
rp.server.lock.RLock()
210211
defer rp.server.lock.RUnlock()
211212

212-
value, ok := rp.server.lastVC.FindTicks(string(arg))
213+
vc, ok := rp.server.lastVCs[string(arg)]
213214
if !ok {
214-
*result = GetLastClockResult(0)
215-
} else {
216-
*result = GetLastClockResult(value)
215+
return errors.New("not found")
217216
}
217+
*result = GetLastVCResult(vc)
218218
return nil
219219
}

tracer.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"net/rpc"
1414

1515
"github.com/DistributedClocks/GoVector/govec"
16+
"github.com/DistributedClocks/GoVector/govec/vclock"
1617
)
1718

1819
// TracingToken is an abstract token to be used when tracing
@@ -70,16 +71,15 @@ func NewTracer(config TracerConfig) *Tracer {
7071
log.Fatal("dialing server: ", err)
7172
}
7273

73-
// TODO: make this call optional
74-
var initialClock uint64 = 0
75-
err = client.Call("RPCProvider.GetLastClock", config.TracerIdentity, &initialClock)
76-
if err != nil {
77-
log.Println("cannot fetch intial clock value from tracing server:", err)
78-
}
79-
8074
goLogConfig := govec.GetDefaultConfig()
8175
goLogConfig.LogToFile = false
82-
goLogConfig.InitialClock = initialClock
76+
77+
// TODO: make this call optional
78+
var initialVC vclock.VClock
79+
err = client.Call("RPCProvider.GetLastVC", config.TracerIdentity, &initialVC)
80+
if err == nil {
81+
goLogConfig.InitialVC = initialVC.Copy()
82+
}
8383

8484
tracer := &Tracer{
8585
client: client,

tracing_test.go

+3-10
Original file line numberDiff line numberDiff line change
@@ -459,17 +459,10 @@ func TestTracerRejoin(t *testing.T) {
459459
})
460460
defer cRejoined.Close()
461461

462-
clock, ok := c.logger.GetCurrentVC().FindTicks(tracerIdentity)
463-
if !ok {
464-
t.Fatal("tracerIdentity not found in vector clock")
465-
}
466-
467-
rejoinedClock, ok := cRejoined.logger.GetCurrentVC().FindTicks(tracerIdentity)
468-
if !ok {
469-
t.Fatal("tracerIdentity not found in vector clock")
470-
}
462+
vc := c.logger.GetCurrentVC()
463+
rejoinedVC := cRejoined.logger.GetCurrentVC()
471464

472-
if clock != rejoinedClock {
465+
if !cmp.Equal(vc, rejoinedVC) {
473466
t.Fatal("rejoined tracer clock value is not equal to intial tracer clock value")
474467
}
475468
})()

0 commit comments

Comments
 (0)