This commit is contained in:
Frans Kaashoek 2025-04-02 06:49:54 -04:00
parent 8f21c11cfc
commit bb597de980
6 changed files with 31 additions and 43 deletions

View File

@ -57,9 +57,9 @@ func (sck *ShardCtrler) ChangeConfigTo(new *shardcfg.ShardConfig) {
}
// Return the current configuration and its version number
func (sck *ShardCtrler) Query() (*shardcfg.ShardConfig, rpc.Tversion) {
// Return the current configuration
func (sck *ShardCtrler) Query() *shardcfg.ShardConfig {
// Your code here.
return nil, 0
return nil
}

View File

@ -29,7 +29,7 @@ func (ck *Clerk) Put(key string, value string, version rpc.Tversion) rpc.Err {
return ""
}
func (ck *Clerk) Freeze(s shardcfg.Tshid, num shardcfg.Tnum) ([]byte, rpc.Err) {
func (ck *Clerk) FreezeShard(s shardcfg.Tshid, num shardcfg.Tnum) ([]byte, rpc.Err) {
return nil, ""
}
@ -37,6 +37,6 @@ func (ck *Clerk) InstallShard(s shardcfg.Tshid, state []byte, num shardcfg.Tnum)
return ""
}
func (ck *Clerk) Delete(s shardcfg.Tshid, num shardcfg.Tnum) rpc.Err {
func (ck *Clerk) DeleteShard(s shardcfg.Tshid, num shardcfg.Tnum) rpc.Err {
return ""
}

View File

@ -37,17 +37,17 @@ func (kv *KVServer) Restore(data []byte) {
// Your code here
}
func (kv *KVServer) Get(args *shardrpc.GetArgs, reply *rpc.GetReply) {
func (kv *KVServer) Get(args *rpc.GetArgs, reply *rpc.GetReply) {
// Your code here
}
func (kv *KVServer) Put(args *shardrpc.PutArgs, reply *rpc.PutReply) {
func (kv *KVServer) Put(args *rpc.PutArgs, reply *rpc.PutReply) {
// Your code here
}
// Freeze the specified shard (i.e., reject future Get/Puts for this
// shard) and return the key/values stored in that shard.
func (kv *KVServer) Freeze(args *shardrpc.FreezeArgs, reply *shardrpc.FreezeReply) {
func (kv *KVServer) FreezeShard(args *shardrpc.FreezeShardArgs, reply *shardrpc.FreezeShardReply) {
// Your code here
}
@ -57,7 +57,7 @@ func (kv *KVServer) InstallShard(args *shardrpc.InstallShardArgs, reply *shardrp
}
// Delete the specified shard.
func (kv *KVServer) Delete(args *shardrpc.DeleteShardArgs, reply *shardrpc.DeleteShardReply) {
func (kv *KVServer) DeleteShard(args *shardrpc.DeleteShardArgs, reply *shardrpc.DeleteShardReply) {
// Your code here
}
@ -86,9 +86,9 @@ func (kv *KVServer) killed() bool {
func StartServerShardGrp(servers []*labrpc.ClientEnd, gid tester.Tgid, me int, persister *tester.Persister, maxraftstate int) []tester.IService {
// call labgob.Register on structures you want
// Go's RPC library to marshall/unmarshall.
labgob.Register(shardrpc.PutArgs{})
labgob.Register(shardrpc.GetArgs{})
labgob.Register(shardrpc.FreezeArgs{})
labgob.Register(rpc.PutArgs{})
labgob.Register(rpc.GetArgs{})
labgob.Register(shardrpc.FreezeShardArgs{})
labgob.Register(shardrpc.InstallShardArgs{})
labgob.Register(shardrpc.DeleteShardArgs{})
labgob.Register(rsm.Op{})

View File

@ -5,24 +5,12 @@ import (
"6.5840/shardkv1/shardcfg"
)
// Same as Put in kvsrv1/rpc
type PutArgs struct {
Key string
Value string
Version rpc.Tversion
}
// Same as Get in kvsrv1/rpc
type GetArgs struct {
Key string
}
type FreezeArgs struct {
type FreezeShardArgs struct {
Shard shardcfg.Tshid
Num shardcfg.Tnum
}
type FreezeReply struct {
type FreezeShardReply struct {
State []byte
Num shardcfg.Tnum
Err rpc.Err

View File

@ -40,9 +40,9 @@ func TestInitQuery5A(t *testing.T) {
sck.InitConfig(scfg)
// Read the initial configuration and check it
cfg, v := sck.Query()
if v != 1 || cfg.Num != 1 || cfg.Shards[0] != shardcfg.Gid1 {
ts.t.Fatalf("Static wrong %v %v", cfg, v)
cfg := sck.Query()
if cfg.Num != 1 || cfg.Shards[0] != shardcfg.Gid1 {
ts.t.Fatalf("Static wrong %v", cfg)
}
cfg.CheckConfig(t, []tester.Tgid{shardcfg.Gid1})
}
@ -86,14 +86,14 @@ func TestJoinBasic5A(t *testing.T) {
ka, va := ts.SpreadPuts(ck, NKEYS)
sck := ts.ShardCtrler()
cfg, _ := sck.Query()
cfg := sck.Query()
gid2 := ts.newGid()
if ok := ts.joinGroups(sck, []tester.Tgid{gid2}); !ok {
ts.t.Fatalf("TestJoinBasic5A: joinGroups failed")
}
cfg1, _ := sck.Query()
cfg1 := sck.Query()
if cfg.Num+1 != cfg1.Num {
ts.t.Fatalf("TestJoinBasic5A: wrong num %d expected %d ", cfg1.Num, cfg.Num+1)
}
@ -269,7 +269,7 @@ func TestShutdown5A(t *testing.T) {
// Test that Gets for keys at groups that are alive
// return
func TestProgressShutdown(t *testing.T) {
func TestProgressShutdown5A(t *testing.T) {
const (
NJOIN = 4
NSEC = 2
@ -298,7 +298,7 @@ func TestProgressShutdown(t *testing.T) {
alive[g] = true
}
cfg, _ := sck.Query()
cfg := sck.Query()
ch := make(chan rpc.Err)
go func() {
@ -321,7 +321,7 @@ func TestProgressShutdown(t *testing.T) {
}
// Test that Gets from a non-moving shard return quickly
func TestProgressJoin(t *testing.T) {
func TestProgressJoin5A(t *testing.T) {
const (
NJOIN = 4
NSEC = 4
@ -340,7 +340,7 @@ func TestProgressJoin(t *testing.T) {
grps := ts.groups(NJOIN)
ts.joinGroups(sck, grps)
cfg, _ := sck.Query()
cfg := sck.Query()
newcfg := cfg.Copy()
newgid := tester.Tgid(NJOIN + 3)
if ok := newcfg.JoinBalance(map[tester.Tgid][]string{newgid: []string{"xxx"}}); !ok {
@ -491,7 +491,7 @@ func TestJoinLeave5B(t *testing.T) {
ka, va := ts.SpreadPuts(ck, NKEYS)
sck := ts.ShardCtrler()
cfg, _ := sck.Query()
cfg := sck.Query()
ts.Group(gid1).Shutdown()
@ -520,7 +520,7 @@ func TestJoinLeave5B(t *testing.T) {
ts.Fatalf("Join didn't complete")
}
cfg1, _ := sck.Query()
cfg1 := sck.Query()
if cfg.Num+1 != cfg1.Num {
ts.t.Fatalf("wrong num %d expected %d ", cfg1.Num, cfg.Num+1)
}
@ -636,7 +636,7 @@ func TestPartitionControllerJoin5C(t *testing.T) {
sck0 := ts.makeShardCtrler()
sck0.InitController()
scfg, _ := sck0.Query()
scfg := sck0.Query()
if !scfg.IsMember(ngid) {
t.Fatalf("Didn't recover gid %d", ngid)
}

View File

@ -127,14 +127,14 @@ func (ts *Test) StartServerShardGrp(servers []*labrpc.ClientEnd, gid tester.Tgid
}
func (ts *Test) checkMember(sck *shardctrler.ShardCtrler, gid tester.Tgid) bool {
cfg, _ := sck.Query()
cfg := sck.Query()
ok := cfg.IsMember(gid)
return ok
}
// Add group gid
func (ts *Test) join(sck *shardctrler.ShardCtrler, gid tester.Tgid, srvs []string) {
cfg, _ := sck.Query()
cfg := sck.Query()
newcfg := cfg.Copy()
ok := newcfg.JoinBalance(map[tester.Tgid][]string{gid: srvs})
if !ok {
@ -157,7 +157,7 @@ func (ts *Test) joinGroups(sck *shardctrler.ShardCtrler, gids []tester.Tgid) boo
// Group gid leaves.
func (ts *Test) leave(sck *shardctrler.ShardCtrler, gid tester.Tgid) {
cfg, _ := sck.Query()
cfg := sck.Query()
newcfg := cfg.Copy()
ok := newcfg.LeaveBalance([]tester.Tgid{gid})
if !ok {
@ -267,7 +267,7 @@ func (ts *Test) partitionCtrler(ck kvtest.IKVClerk, gid tester.Tgid, ka, va []st
sck, clnt := ts.makeShardCtrlerClnt()
sck.InitController()
cfg, _ := ts.ShardCtrler().Query()
cfg := ts.ShardCtrler().Query()
num := cfg.Num
state := 0
@ -320,7 +320,7 @@ func (ts *Test) partitionCtrler(ck kvtest.IKVClerk, gid tester.Tgid, ka, va []st
sck0, clnt0 := ts.makeShardCtrlerClnt()
sck0.InitController()
cfg, _ = sck0.Query()
cfg = sck0.Query()
s := "join"
if state == LEAVE {
s = "leave"