Compare commits
4 Commits
d745119615
...
60241736c6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60241736c6 | ||
|
|
8b8fafca21 | ||
|
|
03b2d35cd3 | ||
|
|
0f52de4204 |
12
src/adapt.go
12
src/adapt.go
@@ -72,6 +72,16 @@ func readMessage(reader *bufio.Reader) ([]byte, []any, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func readMessageTo(w io.Writer, reader *bufio.Reader) ([]any, error) {
|
func readMessageTo(w io.Writer, reader *bufio.Reader) ([]any, error) {
|
||||||
|
w2 := bufio.NewWriter(w)
|
||||||
|
defer w2.Flush()
|
||||||
|
arr, err := _readMessageTo(w2, reader)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return arr, w2.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
|
func _readMessageTo(w io.Writer, reader *bufio.Reader) ([]any, error) {
|
||||||
firstLine, _, err := reader.ReadLine()
|
firstLine, _, err := reader.ReadLine()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -124,7 +134,7 @@ func readMessageTo(w io.Writer, reader *bufio.Reader) ([]any, error) {
|
|||||||
}
|
}
|
||||||
var result []any
|
var result []any
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
more, err := readMessageTo(w, reader)
|
more, err := _readMessageTo(w, reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,13 +92,14 @@ func (c Config) Close() {
|
|||||||
for i := range c.forwards {
|
for i := range c.forwards {
|
||||||
if c.forwards[i] != nil {
|
if c.forwards[i] != nil {
|
||||||
i := i
|
i := i
|
||||||
go func() {
|
func() {
|
||||||
c.forwards[i].New = nil
|
c.forwards[i].New = nil
|
||||||
for {
|
for {
|
||||||
got := c.forwards[i].Get()
|
got := c.forwards[i].Get()
|
||||||
if got != nil {
|
if got == nil {
|
||||||
go got.(net.Conn).Close()
|
break
|
||||||
}
|
}
|
||||||
|
got.(net.Conn).Close()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ func listen(ctx context.Context, config Config) error {
|
|||||||
} else {
|
} else {
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer log.Println("/handle()")
|
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
handle(ctx, config, conn)
|
handle(ctx, config, conn)
|
||||||
}()
|
}()
|
||||||
@@ -50,5 +49,12 @@ func handle(ctx context.Context, config Config, conn net.Conn) {
|
|||||||
func _handle(ctx context.Context, config Config, conn net.Conn) error {
|
func _handle(ctx context.Context, config Config, conn net.Conn) error {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
|
ctx, can := context.WithCancel(ctx)
|
||||||
|
defer can()
|
||||||
|
go func() {
|
||||||
|
<-ctx.Done()
|
||||||
|
conn.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
return adapt(ctx, config, conn)
|
return adapt(ctx, config, conn)
|
||||||
}
|
}
|
||||||
|
|||||||
9
src/testdata/redises.sh
vendored
9
src/testdata/redises.sh
vendored
@@ -1,9 +1,14 @@
|
|||||||
#! /usr/bin/bash
|
#! /usr/bin/bash
|
||||||
|
|
||||||
|
bin=valkey-server
|
||||||
|
if ! which valkey-server; then
|
||||||
|
bin=redis-server
|
||||||
|
fi
|
||||||
|
|
||||||
d=$(mktemp -d)
|
d=$(mktemp -d)
|
||||||
mkdir -p $d/1
|
mkdir -p $d/1
|
||||||
mkdir -p $d/2
|
mkdir -p $d/2
|
||||||
valkey-server --dir $d/1 --port 60113 --logfile $d/1.log &
|
$bin --dir $d/1 --port 60113 --logfile $d/1.log &
|
||||||
bg=${!}
|
bg=${!}
|
||||||
cleanup() {
|
cleanup() {
|
||||||
kill $bg
|
kill $bg
|
||||||
@@ -13,5 +18,5 @@ trap cleanup EXIT
|
|||||||
sleep 5
|
sleep 5
|
||||||
echo FORWARDS=127.0.0.1:60113,127.0.0.1:60114
|
echo FORWARDS=127.0.0.1:60113,127.0.0.1:60114
|
||||||
) &
|
) &
|
||||||
valkey-server --dir $d/2 --port 60114 --logfile $d/2.log
|
$bin --dir $d/2 --port 60114 --logfile $d/2.log
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user