From 7acbe864d3bdfe224ba085e7d4afbbeb864a091a Mon Sep 17 00:00:00 2001 From: Nevio Date: Sun, 15 Sep 2024 18:08:37 +0200 Subject: [PATCH] Rewriting bunch, cleaning bunch, happy bunch --- benchmark/helpers.go | 15 ++--- client.go | 15 ----- errors.go | 8 --- fdb.go | 25 ++++---- message.go | 61 ------------------- transport_manager.go => transports/manager.go | 16 ++--- tcp_server.go => transports/tcp/tcp_server.go | 2 +- .../tcp/tcp_server_test.go | 2 +- transport.go => transports/transport.go | 2 +- .../udp/udp_handler_read.go | 0 .../udp/udp_handler_read_test.go | 0 .../udp/udp_handler_write.go | 0 .../udp/udp_handler_write_test.go | 0 udp_server.go => transports/udp/udp_server.go | 0 .../udp/udp_server_test.go | 0 .../uds/uds_handler_read.go | 0 .../uds/uds_handler_write.go | 0 uds_server.go => transports/uds/uds_server.go | 0 .../uds/uds_server_test.go | 0 types.go | 43 ------------- 20 files changed, 32 insertions(+), 157 deletions(-) delete mode 100644 client.go delete mode 100644 errors.go delete mode 100644 message.go rename transport_manager.go => transports/manager.go (62%) rename tcp_server.go => transports/tcp/tcp_server.go (99%) rename tcp_server_test.go => transports/tcp/tcp_server_test.go (99%) rename transport.go => transports/transport.go (59%) rename udp_handler_read.go => transports/udp/udp_handler_read.go (100%) rename udp_handler_read_test.go => transports/udp/udp_handler_read_test.go (100%) rename udp_handler_write.go => transports/udp/udp_handler_write.go (100%) rename udp_handler_write_test.go => transports/udp/udp_handler_write_test.go (100%) rename udp_server.go => transports/udp/udp_server.go (100%) rename udp_server_test.go => transports/udp/udp_server_test.go (100%) rename uds_handler_read.go => transports/uds/uds_handler_read.go (100%) rename uds_handler_write.go => transports/uds/uds_handler_write.go (100%) rename uds_server.go => transports/uds/uds_server.go (100%) rename uds_server_test.go => transports/uds/uds_server_test.go (100%) delete mode 100644 types.go diff --git a/benchmark/helpers.go b/benchmark/helpers.go index aeeebf1..367652a 100644 --- a/benchmark/helpers.go +++ b/benchmark/helpers.go @@ -2,24 +2,25 @@ package benchmark import ( "crypto/rand" - "github.com/unpackdev/fdb" + "github.com/unpackdev/fdb/messages" + "github.com/unpackdev/fdb/types" ) // createWriteMessage generates a random write message -func createWriteMessage() fdb.Message { +func createWriteMessage() messages.Message { var key [32]byte _, _ = rand.Read(key[:]) - return fdb.Message{ - Handler: fdb.WriteHandlerType, + return messages.Message{ + Handler: types.WriteHandlerType, Key: key, Data: []byte("benchmark test data"), } } // createReadMessage generates a read message for a given key -func createReadMessage(key [32]byte) fdb.Message { - return fdb.Message{ - Handler: fdb.ReadHandlerType, +func createReadMessage(key [32]byte) messages.Message { + return messages.Message{ + Handler: types.ReadHandlerType, Key: key, } } diff --git a/client.go b/client.go deleted file mode 100644 index 5b73d13..0000000 --- a/client.go +++ /dev/null @@ -1,15 +0,0 @@ -package fdb - -type Client struct{} - -func NewClient() *Client { - return &Client{} -} - -func (c Client) Read(address string) error { - return nil -} - -func (c Client) Write(address string) error { - return nil -} diff --git a/errors.go b/errors.go deleted file mode 100644 index b88a59e..0000000 --- a/errors.go +++ /dev/null @@ -1,8 +0,0 @@ -package fdb - -import "errors" - -var ( - // ErrNotFound is returned when a key is not found in the database - ErrNotFound = errors.New("key not found") -) diff --git a/fdb.go b/fdb.go index bce14b7..c43b3a8 100644 --- a/fdb.go +++ b/fdb.go @@ -5,6 +5,7 @@ import ( "github.com/pkg/errors" "github.com/unpackdev/fdb/config" "github.com/unpackdev/fdb/db" + "github.com/unpackdev/fdb/transports" transport_quic "github.com/unpackdev/fdb/transports/quic" "github.com/unpackdev/fdb/types" ) @@ -12,7 +13,7 @@ import ( type FDB struct { ctx context.Context config config.Config - transportManager *TransportManager + transportManager *transports.Manager dbManager *db.Manager } @@ -22,7 +23,7 @@ func New(ctx context.Context, cnf config.Config) (*FDB, error) { } // Create a new transport manager - transportManager := NewTransportManager() + transportManager := transports.NewManager() dbM, dbmErr := db.NewManager(ctx, cnf.MdbxNodes) if dbmErr != nil { @@ -47,14 +48,14 @@ func New(ctx context.Context, cnf config.Config) (*FDB, error) { return nil, errors.Wrap(err, "failed to register QUIC transport") } - case config.UdsTransport: - udsServer, err := NewUDSServer(t.IPv4) - if err != nil { - return nil, errors.Wrap(err, "failed to create UDS server") - } - if err := transportManager.RegisterTransport(types.UDSTransportType, udsServer); err != nil { - return nil, errors.Wrap(err, "failed to register UDS transport") - } + /* case config.UdsTransport: + udsServer, err := NewUDSServer(t.IPv4) + if err != nil { + return nil, errors.Wrap(err, "failed to create UDS server") + } + if err := transportManager.RegisterTransport(types.UDSTransportType, udsServer); err != nil { + return nil, errors.Wrap(err, "failed to register UDS transport") + }*/ default: return nil, errors.New("unknown transport type") } @@ -71,11 +72,11 @@ func (fdb *FDB) GetDbManager() *db.Manager { return fdb.dbManager } -func (fdb *FDB) GetTransportManager() *TransportManager { +func (fdb *FDB) GetTransportManager() *transports.Manager { return fdb.transportManager } // GetTransportByType allows retrieval of specific transport from the manager -func (fdb *FDB) GetTransportByType(tType types.TransportType) (Transport, error) { +func (fdb *FDB) GetTransportByType(tType types.TransportType) (transports.Transport, error) { return fdb.transportManager.GetTransport(tType) } diff --git a/message.go b/message.go deleted file mode 100644 index 6c42aa0..0000000 --- a/message.go +++ /dev/null @@ -1,61 +0,0 @@ -package fdb - -import ( - "encoding/binary" - "fmt" -) - -// Message struct represents a UDP message -type Message struct { - Handler HandlerType // The handler type (1 byte) - Key [32]byte // Fixed 32-byte key (e.g., Ethereum hash) - Data []byte // The remaining data after the key -} - -// Encode encodes the Message struct into a byte slice -func (m *Message) Encode() ([]byte, error) { - // Add 4 bytes for the length of the data - msgLen := 1 + 32 + 4 + len(m.Data) - buf := make([]byte, msgLen) - - // Set handler type - buf[0] = byte(m.Handler) - - // Copy the 32-byte key - copy(buf[1:33], m.Key[:]) - - // Set the length of the data (4 bytes) - binary.BigEndian.PutUint32(buf[33:37], uint32(len(m.Data))) - - // Copy the data - copy(buf[37:], m.Data) - - return buf, nil -} - -// Decode decodes a byte slice into a Message struct -func Decode(data []byte) (*Message, error) { - if len(data) < 37 { // 1 byte for handler + 32 bytes for key + 4 bytes for data length - return nil, fmt.Errorf("data too short, must be at least 37 bytes") - } - - msg := &Message{ - Handler: HandlerType(data[0]), - } - - // Copy the 32-byte key - copy(msg.Key[:], data[1:33]) - - // Read the 4-byte data length - dataLen := binary.BigEndian.Uint32(data[33:37]) - - // Ensure the length of the remaining data matches the declared length - if len(data[37:]) < int(dataLen) { - return nil, fmt.Errorf("data length mismatch, expected %d bytes but got %d bytes", dataLen, len(data[37:])) - } - - // Copy the data - msg.Data = data[37 : 37+dataLen] - - return msg, nil -} diff --git a/transport_manager.go b/transports/manager.go similarity index 62% rename from transport_manager.go rename to transports/manager.go index e7cd353..d6138e2 100644 --- a/transport_manager.go +++ b/transports/manager.go @@ -1,4 +1,4 @@ -package fdb +package transports import ( "errors" @@ -6,19 +6,19 @@ import ( "sync" ) -// TransportManager is responsible for managing different transport servers -type TransportManager struct { +// Manager is responsible for managing different transport servers +type Manager struct { transports map[types.TransportType]Transport // Holds references to different transports mu sync.Mutex } -func NewTransportManager() *TransportManager { - return &TransportManager{ +func NewManager() *Manager { + return &Manager{ transports: make(map[types.TransportType]Transport), } } -func (tm *TransportManager) RegisterTransport(tType types.TransportType, transport Transport) error { +func (tm *Manager) RegisterTransport(tType types.TransportType, transport Transport) error { tm.mu.Lock() defer tm.mu.Unlock() @@ -30,7 +30,7 @@ func (tm *TransportManager) RegisterTransport(tType types.TransportType, transpo return nil } -func (tm *TransportManager) GetTransport(tType types.TransportType) (Transport, error) { +func (tm *Manager) GetTransport(tType types.TransportType) (Transport, error) { tm.mu.Lock() defer tm.mu.Unlock() @@ -42,7 +42,7 @@ func (tm *TransportManager) GetTransport(tType types.TransportType) (Transport, return transport, nil } -func (tm *TransportManager) DeregisterTransport(tType types.TransportType) error { +func (tm *Manager) DeregisterTransport(tType types.TransportType) error { tm.mu.Lock() defer tm.mu.Unlock() diff --git a/tcp_server.go b/transports/tcp/tcp_server.go similarity index 99% rename from tcp_server.go rename to transports/tcp/tcp_server.go index 56f723d..207fc3e 100644 --- a/tcp_server.go +++ b/transports/tcp/tcp_server.go @@ -1,4 +1,4 @@ -package fdb +package tcp /* import ( diff --git a/tcp_server_test.go b/transports/tcp/tcp_server_test.go similarity index 99% rename from tcp_server_test.go rename to transports/tcp/tcp_server_test.go index 9797494..8ef9854 100644 --- a/tcp_server_test.go +++ b/transports/tcp/tcp_server_test.go @@ -1,4 +1,4 @@ -package fdb +package tcp /* import ( diff --git a/transport.go b/transports/transport.go similarity index 59% rename from transport.go rename to transports/transport.go index 558f5b2..fc3bc16 100644 --- a/transport.go +++ b/transports/transport.go @@ -1,3 +1,3 @@ -package fdb +package transports type Transport interface{} diff --git a/udp_handler_read.go b/transports/udp/udp_handler_read.go similarity index 100% rename from udp_handler_read.go rename to transports/udp/udp_handler_read.go diff --git a/udp_handler_read_test.go b/transports/udp/udp_handler_read_test.go similarity index 100% rename from udp_handler_read_test.go rename to transports/udp/udp_handler_read_test.go diff --git a/udp_handler_write.go b/transports/udp/udp_handler_write.go similarity index 100% rename from udp_handler_write.go rename to transports/udp/udp_handler_write.go diff --git a/udp_handler_write_test.go b/transports/udp/udp_handler_write_test.go similarity index 100% rename from udp_handler_write_test.go rename to transports/udp/udp_handler_write_test.go diff --git a/udp_server.go b/transports/udp/udp_server.go similarity index 100% rename from udp_server.go rename to transports/udp/udp_server.go diff --git a/udp_server_test.go b/transports/udp/udp_server_test.go similarity index 100% rename from udp_server_test.go rename to transports/udp/udp_server_test.go diff --git a/uds_handler_read.go b/transports/uds/uds_handler_read.go similarity index 100% rename from uds_handler_read.go rename to transports/uds/uds_handler_read.go diff --git a/uds_handler_write.go b/transports/uds/uds_handler_write.go similarity index 100% rename from uds_handler_write.go rename to transports/uds/uds_handler_write.go diff --git a/uds_server.go b/transports/uds/uds_server.go similarity index 100% rename from uds_server.go rename to transports/uds/uds_server.go diff --git a/uds_server_test.go b/transports/uds/uds_server_test.go similarity index 100% rename from uds_server_test.go rename to transports/uds/uds_server_test.go diff --git a/types.go b/types.go deleted file mode 100644 index 92fa590..0000000 --- a/types.go +++ /dev/null @@ -1,43 +0,0 @@ -package fdb - -import "fmt" - -type TransportType int - -const ( - TransportTypeUDP TransportType = iota - TransportTypeQUIC - TransportTypeUDS -) - -type DbType string - -func (t DbType) String() string { - return string(t) -} - -const ( -// To be defined for database types in the future... -) - -// HandlerType represents different types of handlers -type HandlerType byte - -// FromByte converts a byte into a HandlerType -func (h *HandlerType) FromByte(b byte) error { - switch b { - case 'W': - *h = WriteHandlerType - case 'R': - *h = ReadHandlerType - default: - return fmt.Errorf("invalid action byte: %v", b) - } - return nil -} - -// Define the handlers as 1-byte constants -const ( - WriteHandlerType HandlerType = 'W' // 'W' for WRITE - ReadHandlerType HandlerType = 'R' // 'R' for READ -)