From 0e7c1e1b0be009e5b675423534f0123a0e38a464 Mon Sep 17 00:00:00 2001 From: Yun-Sheng Chang Date: Wed, 12 Feb 2025 23:04:16 -0500 Subject: [PATCH] update --- .check-build | 3 +-- src/kvsrv1/client.go | 1 - src/kvsrv1/lock/lock.go | 3 ++- src/raft1/server.go | 2 ++ src/raft1/test.go | 2 ++ 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.check-build b/.check-build index 7e68147..ec589b9 100755 --- a/.check-build +++ b/.check-build @@ -8,6 +8,7 @@ REFERENCE_FILES=( src/labgob/test_test.go src/labrpc/labrpc.go src/labrpc/test_test.go + src/models1/kv.go # lab 1 src/mrapps/crash.go @@ -43,11 +44,9 @@ REFERENCE_FILES=( src/kvraft1/rsm/test.go src/kvraft1/kvraft_test.go src/kvraft1/test.go - src/models1/kv.go # lab 5a src/shardkv1/test.go - src/shardkv1/shardctrler/lock/lock.go # lab 5b src/shardkv1/shardkv_test.go diff --git a/src/kvsrv1/client.go b/src/kvsrv1/client.go index c617677..73f1d29 100644 --- a/src/kvsrv1/client.go +++ b/src/kvsrv1/client.go @@ -28,7 +28,6 @@ func MakeClerk(clnt *tester.Clnt, server string) kvtest.IKVClerk { // The types of args and reply (including whether they are pointers) // must match the declared types of the RPC handler function's // arguments. Additionally, reply must be passed as a pointer. -// func (ck *Clerk) Get(key string) (string, rpc.Tversion, rpc.Err) { // You will have to modify this function. return "", 0, rpc.ErrNoKey diff --git a/src/kvsrv1/lock/lock.go b/src/kvsrv1/lock/lock.go index 0a5adda..9473c10 100644 --- a/src/kvsrv1/lock/lock.go +++ b/src/kvsrv1/lock/lock.go @@ -16,7 +16,8 @@ type Lock struct { // The tester calls MakeLock() and passes in a k/v clerk; your code can // perform a Put or Get by calling lk.ck.Put() or lk.ck.Get(). // -// l is the key protected by the lock to be created. +// Use l as the key to store the "lock state" (you would have to decide +// precisely what the lock state is). func MakeLock(ck kvtest.IKVClerk, l string) *Lock { lk := &Lock{ck: ck} // You may add code here diff --git a/src/raft1/server.go b/src/raft1/server.go index 249080d..032b98a 100644 --- a/src/raft1/server.go +++ b/src/raft1/server.go @@ -56,7 +56,9 @@ func newRfsrv(ts *Test, srv int, ends []*labrpc.ClientEnd, persister *tester.Per func (rs *rfsrv) Kill() { //log.Printf("rs kill %d", rs.me) + rs.mu.Lock() rs.raft = nil // tester will call Kill() on rs.raft + rs.mu.Unlock() if rs.persister != nil { // mimic KV server that saves its persistent state in case it // restarts. diff --git a/src/raft1/test.go b/src/raft1/test.go index 05d85e2..68bae44 100644 --- a/src/raft1/test.go +++ b/src/raft1/test.go @@ -49,7 +49,9 @@ func (ts *Test) cleanup() { func (ts *Test) mksrv(ends []*labrpc.ClientEnd, grp tester.Tgid, srv int, persister *tester.Persister) []tester.IService { s := newRfsrv(ts, srv, ends, persister, ts.snapshot) + ts.mu.Lock() ts.srvs[srv] = s + ts.mu.Unlock() return []tester.IService{s, s.raft} }