diff options
| author | alex <[email protected]> | 2026-07-09 16:26:00 +0200 |
|---|---|---|
| committer | alex <[email protected]> | 2026-07-09 16:26:00 +0200 |
| commit | 6aebb5bb1d35016bc8e3bed04e971614898cb6ff (patch) | |
| tree | 0b0d8be7a30486b79459295f1fe729e5d512747f | |
| parent | 78ee0c69fdc9d328ab3e3048f0207957c4e48454 (diff) | |
| download | redis-clone-6aebb5bb1d35016bc8e3bed04e971614898cb6ff.tar.xz redis-clone-6aebb5bb1d35016bc8e3bed04e971614898cb6ff.zip | |
refactored FLUSHALL to work with shards added ExecuteAll and ExecuteReadAll methods to the db
| -rw-r--r-- | handlers.go | 16 | ||||
| -rw-r--r-- | shards.go | 28 |
2 files changed, 36 insertions, 8 deletions
diff --git a/handlers.go b/handlers.go index 23efa9a..0b5267c 100644 --- a/handlers.go +++ b/handlers.go @@ -183,21 +183,21 @@ func handlePing(conn net.Conn, args []string) { conn.Write(serializeRESP(SimpleString("PONG"))) } -/* func handleFlushall(conn net.Conn, args []string) { - db.mu.Lock() - defer db.mu.Unlock() - if len(args) != 1 { err := errors.New("wrong number of arguments for 'FLUSHALL'") conn.Write(serializeRESP(err)) return } - - db.data = make(map[string]Item) - conn.Write(serializeRESP(SimpleString("OK"))) + result := db.ExecuteAll(func(shards []*Shard)interface{}{ + for _, shard := range shards{ + shard.data = make(map[string]Item) + } + return SimpleString("OK") + }) + conn.Write(serializeRESP(result)) } - +/* func handleRpush(conn net.Conn, args []string) { key := args[1] newItems := args[2:] @@ -65,3 +65,31 @@ func ( db *RedisDB) ExecuteMulti(keys []string, fn func([]*Shard) interface{})in return fn(shards) } } + +func ( db *RedisDB) ExecuteAll(fn func([]*Shard) interface{})interface{}{ + for _, shard := range db.shards { + shard.mu.Lock() + } + + defer func(){ + for i := len(db.shards)-1;i >= 0; i --{ + db.shards[i].mu.Unlock() + } + }() + + return fn(db.shards) +} + +func ( db *RedisDB) ExecuteReadAll(fn func([]*Shard) interface{})interface{}{ + for _, shard := range db.shards { + shard.mu.RLock() + } + + defer func(){ + for i := len(db.shards)-1;i >= 0; i --{ + db.shards[i].mu.RUnlock() + } + }() + + return fn(db.shards) +}
\ No newline at end of file |
