chore: save sst code
All checks were successful
Go Test / build (pull_request) Successful in 1m47s

This commit is contained in:
xuu 2024-01-15 11:26:54 -07:00
parent 59eaef2ae3
commit 3be012e780
Signed by: xuu
GPG Key ID: 8B3B0604F164E04F
4 changed files with 36 additions and 10 deletions

View File

@ -38,9 +38,11 @@ func initMetrics(ctx context.Context, name string) (context.Context, func() erro
goversion := "" goversion := ""
pkg := "" pkg := ""
host := "" host := ""
version := "0.0.1"
if info, ok := debug.ReadBuildInfo(); ok { if info, ok := debug.ReadBuildInfo(); ok {
goversion = info.GoVersion goversion = info.GoVersion
pkg = info.Path pkg = info.Path
version = info.Main.Version
} }
if h, err := os.Hostname(); err == nil { if h, err := os.Hostname(); err == nil {
host = h host = h
@ -69,7 +71,7 @@ func initMetrics(ctx context.Context, name string) (context.Context, func() erro
) )
meter := provider.Meter(name, meter := provider.Meter(name,
api.WithInstrumentationVersion("0.0.1"), api.WithInstrumentationVersion(version),
api.WithInstrumentationAttributes( api.WithInstrumentationAttributes(
attribute.String("app", name), attribute.String("app", name),
attribute.String("host", host), attribute.String("host", host),

View File

@ -64,12 +64,11 @@ func (w wrapSpan) AddEvent(name string, options ...trace.EventOption) {
cfg := trace.NewEventConfig(options...) cfg := trace.NewEventConfig(options...)
attrs := cfg.Attributes() attrs := cfg.Attributes()
args := make([]any, len(attrs)*2) args := make([]any, len(attrs))
for i, a := range attrs { for i, a := range attrs {
args[2*i] = a.Key args[i] = slog.Attr{Key: string(a.Key), Value: slog.StringValue(a.Value.AsString())}
args[2*i+1] = a.Value }
}
slog.Debug(name, args...) slog.Debug(name, args...)
} }

View File

@ -316,15 +316,24 @@ func (l *logFile) LoadSegment(pos int64) (*segmentBytes, error) {
return &segmentBytes{b, -1}, nil return &segmentBytes{b, -1}, nil
} }
func (l *logFile) Find(needle []byte, first bool) (*entryBytes, bool, error) { func (l *logFile) Find(needle []byte, first bool) (*entryBytes, bool, error) {
var last segmentReader var cur, last segmentReader
for _, s := range l.segments { for _, s := range l.segments {
e, err := s.FirstEntry() cur = s
e, err := cur.FirstEntry()
if err != nil { if err != nil {
return nil, false, err return nil, false, err
} }
k, _ := e.KeyValue() k, _ := e.KeyValue()
if first && bytes.Compare(k, needle) >= 0 {
if first && bytes.Equal(k, needle) {
break
}
if first && bytes.Compare(k, needle) > 0 {
e, ok, err := cur.Find(needle, first)
if ok || err != nil{
return e, ok, err
}
break break
} }
if !first && bytes.Compare(k, needle) > 0 { if !first && bytes.Compare(k, needle) > 0 {
@ -333,7 +342,12 @@ func (l *logFile) Find(needle []byte, first bool) (*entryBytes, bool, error) {
last = s last = s
} }
return last.Find(needle, first) e, ok, err := last.Find(needle, first)
if ok || err != nil{
return e, ok, err
}
// if by mistake it was not found in the last.. check the next segment.
return cur.Find(needle, first)
} }
func (l *logFile) WriteTo(w io.Writer) (int64, error) { func (l *logFile) WriteTo(w io.Writer) (int64, error) {
return l.rd.WriteTo(w) return l.rd.WriteTo(w)

View File

@ -40,7 +40,7 @@ func TestLargeFile(t *testing.T) {
} }
t.Log(f.Stat()) t.Log(f.Stat())
tt, ok, err := sf.Find(needle, false) tt, ok, err := sf.Find(needle, true)
is.NoErr(err) is.NoErr(err)
is.True(ok) is.True(ok)
key, val := tt.KeyValue() key, val := tt.KeyValue()
@ -183,6 +183,17 @@ func TestFindRange(t *testing.T) {
is.Equal(key, []byte("AB")) is.Equal(key, []byte("AB"))
is.Equal(val, uint64(2)) is.Equal(val, uint64(2))
last, ok, err = sf.Find([]byte("AB"), false)
is.NoErr(err)
key, val = last.KeyValue()
t.Log(string(key), val)
is.True(ok)
is.Equal(key, []byte("AB"))
is.Equal(val, uint64(4))
last, ok, err = sf.Find([]byte("AC"), false) last, ok, err = sf.Find([]byte("AC"), false)
is.NoErr(err) is.NoErr(err)