53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package rep
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"encoding/json"
|
|
"net"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"git.crumpington.com/public/jldb/lib/errs"
|
|
)
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
func lockFilePath(rootDir string) string {
|
|
return filepath.Join(rootDir, "lock")
|
|
}
|
|
|
|
func walRootDir(rootDir string) string {
|
|
return filepath.Join(rootDir, "wal")
|
|
}
|
|
|
|
func stateFilePath(rootDir string) string {
|
|
return filepath.Join(rootDir, "state")
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
func sendJSON(
|
|
item any,
|
|
conn net.Conn,
|
|
timeout time.Duration,
|
|
) error {
|
|
|
|
buf := bufPoolGet()
|
|
defer bufPoolPut(buf)
|
|
|
|
if err := json.NewEncoder(buf).Encode(item); err != nil {
|
|
return errs.Unexpected.WithErr(err)
|
|
}
|
|
|
|
sizeBuf := make([]byte, 2)
|
|
binary.LittleEndian.PutUint16(sizeBuf, uint16(buf.Len()))
|
|
|
|
conn.SetWriteDeadline(time.Now().Add(timeout))
|
|
buffers := net.Buffers{sizeBuf, buf.Bytes()}
|
|
if _, err := buffers.WriteTo(conn); err != nil {
|
|
return errs.IO.WithErr(err)
|
|
}
|
|
|
|
return nil
|
|
}
|