From 4910a8ffce8f04656aa4202a7f6dc6a02a2ecf52 Mon Sep 17 00:00:00 2001 From: Minhaj Date: Sun, 12 Apr 2026 15:15:18 +0530 Subject: [PATCH] fixing some typos and cleaning up code for linting --- core/core.go | 13 ++++++++++--- frontend/grpc.go | 6 +++--- frontend/rest.go | 8 ++++---- transact/filelogger.go | 4 +--- transact/pglogger.go | 5 ++++- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/core/core.go b/core/core.go index 0d6054c..c702f85 100644 --- a/core/core.go +++ b/core/core.go @@ -6,14 +6,16 @@ import ( "sync" ) +// KeyValueStore is a thread-safe in-memory key-value store with an optional transaction logger. type KeyValueStore struct { sync.RWMutex m map[string]string transact TransactionLogger } -var ErrorNoSuchKey = errors.New("no suck key") +var ErrorNoSuchKey = errors.New("no such key") +// NewKeyValueStore initializes and returns a new KeyValueStore. func NewKeyValueStore() *KeyValueStore { return &KeyValueStore{ m: make(map[string]string), @@ -21,6 +23,7 @@ func NewKeyValueStore() *KeyValueStore { } } +// Delete removes a key from the store and logs the deletion. func (store *KeyValueStore) Delete(key string) error { store.Lock() delete(store.m, key) @@ -31,6 +34,7 @@ func (store *KeyValueStore) Delete(key string) error { return nil } +// Put inserts or updates a key-value pair in the store and logs the operation. func (store *KeyValueStore) Put(key, value string) error { store.Lock() store.m[key] = value @@ -41,6 +45,7 @@ func (store *KeyValueStore) Put(key, value string) error { return nil } +// Get retrieves the value associated with a key from the store. func (store *KeyValueStore) Get(key string) (string, error) { store.RLock() value, ok := store.m[key] @@ -53,20 +58,22 @@ func (store *KeyValueStore) Get(key string) (string, error) { return value, nil } +// WithTransactionLogger sets the transaction logger for the store and returns the store. func (store *KeyValueStore) WithTransactionLogger(tl TransactionLogger) *KeyValueStore { store.transact = tl return store } +// Restore replays events from the transaction logger to rebuild the store's state. func (store *KeyValueStore) Restore() error { var err error - events, errors := store.transact.ReadEvents() + events, errs := store.transact.ReadEvents() count, ok, e := 0, true, Event{} for ok && err == nil { select { - case err, ok = <-errors: + case err, ok = <-errs: case e, ok = <-events: switch e.EventType { diff --git a/frontend/grpc.go b/frontend/grpc.go index 08af607..21501df 100644 --- a/frontend/grpc.go +++ b/frontend/grpc.go @@ -25,7 +25,7 @@ func (g *grpcFrontend) Get(ctx context.Context, r *pb.GetRequest) (*pb.GetRespon } func (g *grpcFrontend) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) { - log.Printf("Received PUT key=%v value%v\n", r.Key, r.Value) + log.Printf("Received PUT key=%v value=%v\n", r.Key, r.Value) err := g.store.Put(r.Key, string(r.Value)) @@ -49,12 +49,12 @@ func (g *grpcFrontend) Start(store *core.KeyValueStore) error { lis, err := net.Listen("tcp", ":50051") if err != nil { - return fmt.Errorf("Failed to listen: %v", err) + return fmt.Errorf("failed to listen: %v", err) } fmt.Println("Listening on :50051") if err := s.Serve(lis); err != nil { - return fmt.Errorf("failed to server: %v", err) + return fmt.Errorf("failed to serve: %v", err) } return nil diff --git a/frontend/rest.go b/frontend/rest.go index 4515763..987bb8c 100644 --- a/frontend/rest.go +++ b/frontend/rest.go @@ -26,7 +26,7 @@ func (f *restFrontend) Start(store *core.KeyValueStore) error { r := mux.NewRouter() - r.Use(f.logginMiddleware) + r.Use(f.loggingMiddleware) r.HandleFunc("/v1/{key}", f.keyValueGetHandler).Methods("GET") r.HandleFunc("/v1/{key}", f.keyValuePutHandler).Methods("PUT") @@ -40,7 +40,7 @@ func (f *restFrontend) Start(store *core.KeyValueStore) error { return http.ListenAndServe(":"+port, r) } -func (f *restFrontend) logginMiddleware(next http.Handler) http.Handler { +func (f *restFrontend) loggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Println(r.Method, r.RequestURI) next.ServeHTTP(w, r) @@ -85,7 +85,7 @@ func (f *restFrontend) keyValueGetHandler(w http.ResponseWriter, r *http.Request func (f *restFrontend) keyValuePutHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) - keys := vars["key"] + key := vars["key"] value, err := io.ReadAll(r.Body) defer r.Body.Close() @@ -96,7 +96,7 @@ func (f *restFrontend) keyValuePutHandler(w http.ResponseWriter, r *http.Request http.StatusInternalServerError) return } - err = f.store.Put(keys, string(value)) + err = f.store.Put(key, string(value)) if err != nil { http.Error(w, err.Error(), diff --git a/transact/filelogger.go b/transact/filelogger.go index dd7ee66..93510ff 100644 --- a/transact/filelogger.go +++ b/transact/filelogger.go @@ -57,8 +57,6 @@ func (l *FileTransactionLogger) Run() { l.errors <- err return } - - l.wg.Wait() } }() } @@ -116,7 +114,7 @@ func (l *FileTransactionLogger) ReadEvents() (<-chan core.Event, <-chan error) { } if err := scanner.Err(); err != nil { - outError <- fmt.Errorf("Transaction log failed to reader : %w", err) + outError <- fmt.Errorf("transaction log read failure: %w", err) return } }() diff --git a/transact/pglogger.go b/transact/pglogger.go index 47ea75a..17bd492 100644 --- a/transact/pglogger.go +++ b/transact/pglogger.go @@ -153,7 +153,10 @@ func NewPostgresTransactionLogger(args PostgresDBParams) (core.TransactionLogger return nil, fmt.Errorf("failed to open db connection: %w", err) } - logger := &PostgresTransactionLogger{db: db} + logger := &PostgresTransactionLogger{ + db: db, + wg: &sync.WaitGroup{}, + } logger.CreateTable()