MIT65840/src/shardkv1/shardctrler/shardctrler.go
Frans Kaashoek c96bad59a5 update
2025-04-02 06:59:12 -04:00

65 lines
1.6 KiB
Go

package shardctrler
//
// Shardctrler with InitConfig, Query, and ChangeConfigTo methods
//
import (
"6.5840/kvsrv1"
"6.5840/kvtest1"
"6.5840/shardkv1/shardcfg"
"6.5840/tester1"
)
// ShardCtrler for the controller and kv clerk.
type ShardCtrler struct {
clnt *tester.Clnt
kvtest.IKVClerk
killed int32 // set by Kill()
// Your data here.
}
// Make a ShardCltler, which stores its state in a kvsrv.
func MakeShardCtrler(clnt *tester.Clnt) *ShardCtrler {
sck := &ShardCtrler{clnt: clnt}
srv := tester.ServerName(tester.GRP0, 0)
sck.IKVClerk = kvsrv.MakeClerk(clnt, srv)
// Your code here.
return sck
}
// The tester calls InitController() before starting a new
// controller. In part A, this method doesn't need to do anything. In
// B and C, this method implements recovery.
func (sck *ShardCtrler) InitController() {
}
// Called once by the tester to supply the first configuration. You
// can marshal ShardConfig into a string using shardcfg.String(), and
// then Put it in the kvsrv for the controller at version 0. You can
// pick the key to name the configuration. The initial configuration
// lists shardgrp shardcfg.Gid1 for all shards.
func (sck *ShardCtrler) InitConfig(cfg *shardcfg.ShardConfig) {
// Your code here
}
// Called by the tester to ask the controller to change the
// configuration from the current one to new. While the controller
// changes the configuration it may be superseded by another
// controller.
func (sck *ShardCtrler) ChangeConfigTo(new *shardcfg.ShardConfig) {
// Your code here.
}
// Return the current configuration
func (sck *ShardCtrler) Query() *shardcfg.ShardConfig {
// Your code here.
return nil
}