From b8a42074a2566717326dfaa99019c29c9524e27e Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Wed, 26 Feb 2025 06:55:12 -0500 Subject: [PATCH] update --- src/shardkv1/shardctrler/client.go | 49 ---------------------- src/shardkv1/shardctrler/lock/lock.go | 58 --------------------------- 2 files changed, 107 deletions(-) delete mode 100644 src/shardkv1/shardctrler/client.go delete mode 100644 src/shardkv1/shardctrler/lock/lock.go diff --git a/src/shardkv1/shardctrler/client.go b/src/shardkv1/shardctrler/client.go deleted file mode 100644 index 55ecaaa..0000000 --- a/src/shardkv1/shardctrler/client.go +++ /dev/null @@ -1,49 +0,0 @@ -package shardctrler - -import ( - // "log" - "sync/atomic" - - "6.5840/kvsrv1/rpc" - "6.5840/tester1" -) - -type Clerk struct { - clnt *tester.Clnt - servers []string - deposed *int32 - // You will have to modify this struct. -} - -// The shard controller can use MakeClerk to make a clerk for the kvraft -// group with the servers `servers`. -func MakeClerk(clnt *tester.Clnt, servers []string, deposed *int32) *Clerk { - ck := &Clerk{clnt: clnt, servers: servers, deposed: deposed} - // You may add code here. - return ck -} - -func (ck *Clerk) isDeposed() bool { - z := atomic.LoadInt32(ck.deposed) - return z == 1 -} - -// You can reuse your kvraft Get -func (ck *Clerk) Get(key string) (string, rpc.Tversion, rpc.Err) { - args := rpc.GetArgs{} - args.Key = key - - // You'll have to add code here. - return "", 0, "" -} - -// You can reuse your kvraft Put -func (ck *Clerk) Put(key string, value string, version rpc.Tversion) rpc.Err { - args := rpc.PutArgs{} - args.Key = key - args.Value = value - args.Version = version - - // You'll have to add code here. - return "" -} diff --git a/src/shardkv1/shardctrler/lock/lock.go b/src/shardkv1/shardctrler/lock/lock.go deleted file mode 100644 index 0b76170..0000000 --- a/src/shardkv1/shardctrler/lock/lock.go +++ /dev/null @@ -1,58 +0,0 @@ -package lock - -import ( - "log" - "time" - - "6.5840/kvsrv1/rpc" - "6.5840/kvtest1" -) - -type Lock struct { - kvtest.IKVClerk - l string - id string - ver rpc.Tversion -} - -func MakeLock(ck kvtest.IKVClerk, l string) *Lock { - lk := &Lock{IKVClerk: ck} - // You may add core here - return lk -} - -func (lk *Lock) AcquireLeadership() { - for { - if val, ver, err := lk.Get(lk.l); err == rpc.OK { - if val == "" { // put only when lock is free - if err := lk.Put(lk.l, lk.id, ver); err == rpc.OK { - lk.ver = ver + 1 - return - } else if err == rpc.ErrMaybe { // check if put succeeded? - if val, ver, err := lk.Get(lk.l); err == rpc.OK { - if val == lk.id { - lk.ver = ver - return - } - } - } - } - time.Sleep(1 * time.Millisecond) - } - } -} - -// for two testing purposes: 1) for the ctrler that is a leader to -// give up its leadership; 2) to take back leadership from a -// partitioned/deposed ctrler using a new ctrler. -func (lk *Lock) ReleaseLeadership() rpc.Err { - _, ver, err := lk.Get(lk.l) - if err != rpc.OK { - log.Printf("ResetLock: %v err %v", lk.l, err) - } - if err := lk.Put(lk.l, "", ver); err == rpc.OK || err == rpc.ErrMaybe { - return rpc.OK - } else { - return err - } -}