A concurrent key-value server in Go using goroutines and channels (no locks). Provides CRUD operations (Put, Get, Update, Delete) with async request processing via buffered channels. Achieves lock-free consistency by isolating database access to a single goroutine. Tracks active and disconnected clients.
A concurrent squaring service using Go channels. Supports asynchronous integer squaring with multiple values, negative numbers, and zero. Provides clean channel close functionality.
A distributed MapReduce system with a Coordinator and Workers. The Coordinator manages and distributes Map/Reduce tasks, tracks their status (idle/running/completed), and handles fault tolerance by reassigning tasks after a 10-second timeout. Workers request tasks via RPC, execute mapFunc on input files, save intermediate key-value pairs, then execute reduceFunc on the intermediate data.
A linearizable key-value store with at-most-once semantics. The Clerk provides unique request IDs and retry logic to ensure at-most-once Put execution. The KVServer uses mutex-protected operations for linearizability, version-based conditional updates, and duplicate request detection.
A fault-tolerant distributed lock built entirely on KV operations. Lock acquisition and release use Get/Put with version comparison for mutual exclusion. Handles ambiguous responses (ErrMaybe) through retry and re-verification.
A Go implementation of the Raft consensus algorithm. Provides leader election via a Follower → Candidate → Leader state machine with term-based voting. Implements log replication across the cluster using AppendEntries RPC. Persists currentTerm, votedFor, and log[] to stable storage. Handles node crashes, network partitions, and delayed messages. Commits entries when replicated to a majority and applies them to the state machine in order.