Skip to content

Commit 8db5ff5

Browse files
committed
More re-arrangements
1 parent 2e4c4b2 commit 8db5ff5

File tree

10 files changed

+133
-35
lines changed

10 files changed

+133
-35
lines changed

cmd/benchmark.go

Lines changed: 126 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package cmd
22

33
import (
4+
"context"
5+
"crypto/rand"
6+
"crypto/tls"
7+
"encoding/binary"
48
"fmt"
59
"github.com/unpackdev/fdb"
6-
"github.com/unpackdev/fdb/pkg/config"
7-
"github.com/unpackdev/fdb/pkg/types"
10+
"github.com/unpackdev/fdb/config"
11+
"github.com/unpackdev/fdb/types"
812
"github.com/urfave/cli/v2"
9-
"log"
13+
"io"
1014
"runtime"
1115
"time"
16+
17+
"github.com/quic-go/quic-go"
1218
)
1319

1420
// BenchmarkCommand returns a cli.Command that benchmarks the real client
@@ -17,62 +23,154 @@ func BenchmarkCommand() *cli.Command {
1723
Name: "test",
1824
Usage: "Benchmark the real client",
1925
Action: func(c *cli.Context) error {
20-
// Simulate benchmarking logic here
2126
fmt.Println("Running client benchmark...")
2227

28+
// Configure QUIC transport
2329
cnf := config.Config{
2430
Transports: []config.Transport{
2531
{
2632
Type: types.QUICTransportType,
2733
Enabled: true,
2834
Config: config.QuicTransport{IPv4: "127.0.0.1", Port: 4433},
2935
},
30-
/* {
31-
Type: fdb.UDS,
32-
Enabled: true,
33-
Config: fdb.UdsTransport{IPv4: "127.0.0.1", Port: 8000},
34-
},*/
3536
},
3637
}
3738

38-
fdbc, fdbcErr := fdb.New(c.Context, cnf)
39-
if fdbcErr != nil {
40-
return fdbcErr
39+
// Initialize FDB
40+
fdbc, err := fdb.New(c.Context, cnf)
41+
if err != nil {
42+
return err
43+
}
44+
45+
// Get QUIC transport
46+
quicTransport, err := fdbc.GetTransportByType(types.QUICTransportType)
47+
if err != nil {
48+
return fmt.Errorf("failed to retrieve QUIC transport: %w", err)
4149
}
4250

43-
_ = fdbc
51+
// Start the QUIC server
52+
quicServer, ok := quicTransport.(*fdb.QuicServer)
53+
if !ok {
54+
return fmt.Errorf("failed to cast transport to QuicServer")
55+
}
56+
if err := quicServer.Start(); err != nil {
57+
return fmt.Errorf("failed to start QUIC server: %w", err)
58+
}
4459

45-
// Example: Perform a benchmark by running some mock client operations
46-
benchmarkClient()
60+
fmt.Println("QUIC server started successfully")
61+
62+
// Benchmark client
63+
err = benchmarkQuicClient(quicServer.Addr())
64+
if err != nil {
65+
return fmt.Errorf("client benchmark failed: %w", err)
66+
}
4767

4868
return nil
4969
},
5070
}
5171
}
5272

53-
// benchmarkClient simulates client benchmarking
54-
func benchmarkClient() {
55-
// Capture initial memory usage
73+
// benchmarkQuicClient benchmarks the QUIC client by simulating write and read operations
74+
func benchmarkQuicClient(serverAddr string) error {
75+
// Setup TLS configuration for QUIC client
76+
clientTLSConfig := &tls.Config{
77+
InsecureSkipVerify: true,
78+
NextProtos: []string{"quic-example"},
79+
}
80+
81+
// Start benchmarking
82+
start := time.Now()
5683
var memStart runtime.MemStats
5784
runtime.ReadMemStats(&memStart)
5885

59-
// Simulate some work being done by the client
60-
start := time.Now()
86+
// Connect to the QUIC server
87+
client, err := quic.DialAddr(context.Background(), serverAddr, clientTLSConfig, nil)
88+
if err != nil {
89+
return fmt.Errorf("failed to dial QUIC server: %w", err)
90+
}
91+
defer client.CloseWithError(0, "closing connection")
92+
93+
// Open stream
94+
stream, err := client.OpenStreamSync(context.Background())
95+
if err != nil {
96+
return fmt.Errorf("failed to open stream: %w", err)
97+
}
98+
defer stream.Close()
99+
100+
// Simulate write operation
101+
message := createWriteMessage()
102+
encodedMessage, err := message.Encode()
103+
if err != nil {
104+
return fmt.Errorf("failed to encode message: %w", err)
105+
}
106+
107+
_, err = stream.Write(encodedMessage)
108+
if err != nil {
109+
return fmt.Errorf("failed to write message to server: %w", err)
110+
}
111+
112+
// Read server response
113+
buffer := make([]byte, 1024)
114+
_, err = stream.Read(buffer)
115+
if err != nil {
116+
return fmt.Errorf("failed to read response: %w", err)
117+
}
118+
fmt.Printf("Response from server: %s\n", string(buffer))
119+
120+
// Simulate read operation
121+
readMessage := createReadMessage(message.Key)
122+
encodedReadMessage, err := readMessage.Encode()
123+
if err != nil {
124+
return fmt.Errorf("failed to encode read message: %w", err)
125+
}
126+
127+
_, err = stream.Write(encodedReadMessage)
128+
if err != nil {
129+
return fmt.Errorf("failed to write read message to server: %w", err)
130+
}
131+
132+
// Read back the data length
133+
_, err = io.ReadFull(stream, buffer[:4])
134+
if err != nil {
135+
return fmt.Errorf("failed to read data length: %w", err)
136+
}
137+
valueLength := binary.BigEndian.Uint32(buffer[:4])
61138

62-
// Replace this loop with real benchmarking code
63-
for i := 0; i < 1000; i++ {
64-
// Simulate work by sleeping
65-
time.Sleep(1 * time.Millisecond)
139+
// Read the actual value
140+
readBuffer := make([]byte, valueLength)
141+
_, err = io.ReadFull(stream, readBuffer)
142+
if err != nil {
143+
return fmt.Errorf("failed to read value: %w", err)
66144
}
145+
fmt.Printf("Data read from server: %s\n", string(readBuffer))
67146

68-
// Measure memory usage after
147+
// Capture memory usage after the operation
69148
var memEnd runtime.MemStats
70149
runtime.ReadMemStats(&memEnd)
71150

151+
// Calculate elapsed time
72152
elapsed := time.Since(start)
73-
74-
// Output benchmarking results
75153
fmt.Printf("Benchmark completed in %s\n", elapsed)
76154
fmt.Printf("Memory used: %d bytes\n", memEnd.Alloc-memStart.Alloc)
77-
log.Printf("Test completed.")
155+
156+
return nil
157+
}
158+
159+
// createWriteMessage generates a random write message
160+
func createWriteMessage() fdb.Message {
161+
var key [32]byte
162+
rand.Read(key[:])
163+
return fdb.Message{
164+
Handler: fdb.WriteHandlerType,
165+
Key: key,
166+
Data: []byte("benchmark test data"),
167+
}
168+
}
169+
170+
// createReadMessage generates a read message for a given key
171+
func createReadMessage(key [32]byte) fdb.Message {
172+
return fdb.Message{
173+
Handler: fdb.ReadHandlerType,
174+
Key: key,
175+
}
78176
}

pkg/config/config.go renamed to config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package config
22

3-
import "github.com/unpackdev/fdb/pkg/types"
3+
import "github.com/unpackdev/fdb/types"
44

55
type Config struct {
66
Transports []Transport `yaml:"transports"`
File renamed without changes.

pkg/config/transports.go renamed to config/transports.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package config
22

3-
import "github.com/unpackdev/fdb/pkg/types"
3+
import "github.com/unpackdev/fdb/types"
44

55
type TransportConfig interface {
66
GetTransportType() types.TransportType

fdb.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package fdb
33
import (
44
"context"
55
"github.com/pkg/errors"
6-
"github.com/unpackdev/fdb/pkg/config"
7-
"github.com/unpackdev/fdb/pkg/types"
6+
"github.com/unpackdev/fdb/config"
7+
"github.com/unpackdev/fdb/types"
88
)
99

1010
type FDB struct {

mdbx.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"github.com/erigontech/mdbx-go/mdbx"
66
"github.com/pkg/errors"
7-
"github.com/unpackdev/fdb/pkg/config"
7+
"github.com/unpackdev/fdb/config"
88
"os"
99
)
1010

pkg/.gitkeep

Whitespace-only changes.

provider_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package fdb
33
import (
44
"context"
55
"fmt"
6-
"github.com/unpackdev/fdb/pkg/config"
6+
"github.com/unpackdev/fdb/config"
77
)
88

99
type Manager struct {

transport_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package fdb
22

33
import (
44
"errors"
5-
"github.com/unpackdev/fdb/pkg/types"
5+
"github.com/unpackdev/fdb/types"
66
"sync"
77
)
88

File renamed without changes.

0 commit comments

Comments
 (0)