mirror of
https://github.com/taigrr/bitcask
synced 2025-01-18 04:03:17 -08:00
Add support for keys with ttl (#177)
* ttl support first commit * imports fix * put api args correction * put options added * upgrade method added * upgrade log added * v0 to v1 migration script added * error assertion added * temp migration dir fix Co-authored-by: yash <yash.chandra@grabpay.com>
This commit is contained in:
committed by
GitHub
parent
f397bec88f
commit
5c6ceadac1
@@ -1,11 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/tidwall/redcon"
|
||||
@@ -32,12 +34,18 @@ func newServer(bind, dbpath string) (*server, error) {
|
||||
}
|
||||
|
||||
func (s *server) handleSet(cmd redcon.Command, conn redcon.Conn) {
|
||||
if len(cmd.Args) != 3 {
|
||||
if len(cmd.Args) != 3 && len(cmd.Args) != 4 {
|
||||
conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")
|
||||
return
|
||||
}
|
||||
key := cmd.Args[1]
|
||||
value := cmd.Args[2]
|
||||
var opts []bitcask.PutOptions
|
||||
if len(cmd.Args) == 4 {
|
||||
ttl, _ := binary.Varint(cmd.Args[3])
|
||||
e := time.Now().UTC().Add(time.Duration(ttl)*time.Millisecond)
|
||||
opts = append(opts, bitcask.WithExpiry(e))
|
||||
}
|
||||
|
||||
err := s.db.Lock()
|
||||
if err != nil {
|
||||
@@ -46,7 +54,7 @@ func (s *server) handleSet(cmd redcon.Command, conn redcon.Conn) {
|
||||
}
|
||||
defer s.db.Unlock()
|
||||
|
||||
if err := s.db.Put(key, value); err != nil {
|
||||
if err := s.db.Put(key, value, opts...); err != nil {
|
||||
conn.WriteString(fmt.Sprintf("ERR: %s", err))
|
||||
} else {
|
||||
conn.WriteString("OK")
|
||||
|
||||
Reference in New Issue
Block a user