system/dbus: print incomplete string in buffer
All checks were successful
Test / Create distribution (push) Successful in 1m8s
Test / Sandbox (push) Successful in 3m43s
Test / Hakurei (push) Successful in 5m27s
Test / Sandbox (race detector) (push) Successful in 6m17s
Test / Hpkg (push) Successful in 7m36s
Test / Hakurei (race detector) (push) Successful in 7m44s
Test / Flake checks (push) Successful in 2m29s
All checks were successful
Test / Create distribution (push) Successful in 1m8s
Test / Sandbox (push) Successful in 3m43s
Test / Hakurei (push) Successful in 5m27s
Test / Sandbox (race detector) (push) Successful in 6m17s
Test / Hpkg (push) Successful in 7m36s
Test / Hakurei (race detector) (push) Successful in 7m44s
Test / Flake checks (push) Successful in 2m29s
Not sure if this will ever be reached, but nice to have nonetheless. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
05db06c87b
commit
ac81cfbedc
@ -7,7 +7,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
@ -170,9 +169,11 @@ func (s *linePrefixWriter) write(p []byte, a int) (int, error) {
|
|||||||
return a + n, nil
|
return a + n, nil
|
||||||
} else {
|
} else {
|
||||||
n, _ := s.buf.Write(p[:i])
|
n, _ := s.buf.Write(p[:i])
|
||||||
|
s.n += n + 1
|
||||||
|
|
||||||
v := s.buf.String()
|
v := s.buf.String()
|
||||||
if strings.HasPrefix(v, "init: ") {
|
if strings.HasPrefix(v, "init: ") {
|
||||||
|
s.n -= len(v) + 1
|
||||||
// pass through container init messages
|
// pass through container init messages
|
||||||
s.println(s.prefix + v)
|
s.println(s.prefix + v)
|
||||||
} else {
|
} else {
|
||||||
@ -180,22 +181,20 @@ func (s *linePrefixWriter) write(p []byte, a int) (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
s.buf.Reset()
|
s.buf.Reset()
|
||||||
s.n += n + 1
|
|
||||||
return s.write(p[i+1:], a+n+1)
|
return s.write(p[i+1:], a+n+1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *linePrefixWriter) Dump() {
|
func (s *linePrefixWriter) Dump() {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
// the final write might go past the threshold,
|
|
||||||
// and the buffer might still contain data
|
|
||||||
var n int
|
|
||||||
for _, m := range s.msg {
|
for _, m := range s.msg {
|
||||||
n += len(m)
|
|
||||||
s.println(s.prefix + m)
|
s.println(s.prefix + m)
|
||||||
}
|
}
|
||||||
if s.n > lpwSizeThreshold {
|
if s.buf != nil && s.buf.Len() != 0 {
|
||||||
s.println(s.prefix + "dropped " + strconv.Itoa(s.n-n) + " bytes of output")
|
s.println("*" + s.prefix + s.buf.String())
|
||||||
|
}
|
||||||
|
if s.n >= lpwSizeThreshold {
|
||||||
|
s.println("+" + s.prefix + "write threshold reached, output may be incomplete")
|
||||||
}
|
}
|
||||||
s.mu.RUnlock()
|
s.mu.RUnlock()
|
||||||
}
|
}
|
||||||
|
@ -392,10 +392,11 @@ func TestLinePrefixWriter(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{"nop", "(nop) ", func(func(string)) {}, nil, nil, nil, nil, ""},
|
{"nop", "(nop) ", func(func(string)) {}, nil, nil, nil, nil, ""},
|
||||||
|
|
||||||
{"partial", "(break) ", func(w func(string)) {
|
{"partial", "(partial) ", func(w func(string)) {
|
||||||
w("C-65533: -> ")
|
w("C-65533: -> ")
|
||||||
}, nil, nil, nil, nil,
|
}, nil, nil, nil, []string{
|
||||||
"C-65533: -> "},
|
"*(partial) C-65533: -> ",
|
||||||
|
}, "C-65533: -> "},
|
||||||
|
|
||||||
{"break", "(break) ", func(w func(string)) {
|
{"break", "(break) ", func(w func(string)) {
|
||||||
w("C-65533: -> ")
|
w("C-65533: -> ")
|
||||||
@ -414,8 +415,10 @@ func TestLinePrefixWriter(t *testing.T) {
|
|||||||
{"threshold", "(threshold) ", func(w func(s string)) {
|
{"threshold", "(threshold) ", func(w func(s string)) {
|
||||||
w(string(make([]byte, lpwSizeThreshold)))
|
w(string(make([]byte, lpwSizeThreshold)))
|
||||||
w("\n")
|
w("\n")
|
||||||
}, []error{nil, syscall.ENOMEM}, nil, nil, nil,
|
}, []error{nil, syscall.ENOMEM}, nil, nil, []string{
|
||||||
string(make([]byte, lpwSizeThreshold))},
|
"*(threshold) " + string(make([]byte, lpwSizeThreshold)),
|
||||||
|
"+(threshold) write threshold reached, output may be incomplete",
|
||||||
|
}, string(make([]byte, lpwSizeThreshold))},
|
||||||
|
|
||||||
{"threshold multi", "(threshold multi) ", func(w func(s string)) {
|
{"threshold multi", "(threshold multi) ", func(w func(s string)) {
|
||||||
w(":3\n")
|
w(":3\n")
|
||||||
@ -423,15 +426,20 @@ func TestLinePrefixWriter(t *testing.T) {
|
|||||||
w("\n")
|
w("\n")
|
||||||
}, []error{nil, nil, syscall.ENOMEM}, nil, []string{
|
}, []error{nil, nil, syscall.ENOMEM}, nil, []string{
|
||||||
":3",
|
":3",
|
||||||
}, nil, string(make([]byte, lpwSizeThreshold-3))},
|
}, []string{
|
||||||
|
"*(threshold multi) " + string(make([]byte, lpwSizeThreshold-3)),
|
||||||
|
"+(threshold multi) write threshold reached, output may be incomplete",
|
||||||
|
}, string(make([]byte, lpwSizeThreshold-3))},
|
||||||
|
|
||||||
{"threshold multi partial", "(threshold multi partial) ", func(w func(s string)) {
|
{"threshold multi partial", "(threshold multi partial) ", func(w func(s string)) {
|
||||||
w(":3\n")
|
w(":3\n")
|
||||||
w(string(make([]byte, lpwSizeThreshold-2)))
|
w(string(make([]byte, lpwSizeThreshold-2)))
|
||||||
}, []error{nil, syscall.ENOMEM}, nil, []string{
|
w("dropped\n")
|
||||||
|
}, []error{nil, nil, syscall.ENOMEM}, nil, []string{
|
||||||
":3",
|
":3",
|
||||||
}, []string{
|
}, []string{
|
||||||
"dropped 16777215 bytes of output",
|
"*(threshold multi partial) " + string(make([]byte, lpwSizeThreshold-2)),
|
||||||
|
"+(threshold multi partial) write threshold reached, output may be incomplete",
|
||||||
}, string(make([]byte, lpwSizeThreshold-2))},
|
}, string(make([]byte, lpwSizeThreshold-2))},
|
||||||
|
|
||||||
{"threshold exact", "(threshold exact) ", func(w func(s string)) {
|
{"threshold exact", "(threshold exact) ", func(w func(s string)) {
|
||||||
@ -439,7 +447,9 @@ func TestLinePrefixWriter(t *testing.T) {
|
|||||||
w("\n")
|
w("\n")
|
||||||
}, nil, nil, []string{
|
}, nil, nil, []string{
|
||||||
string(make([]byte, lpwSizeThreshold-1)),
|
string(make([]byte, lpwSizeThreshold-1)),
|
||||||
}, nil, ""},
|
}, []string{
|
||||||
|
"+(threshold exact) write threshold reached, output may be incomplete",
|
||||||
|
}, ""},
|
||||||
|
|
||||||
{"sample", "(dbus) ", func(w func(s string)) {
|
{"sample", "(dbus) ", func(w func(s string)) {
|
||||||
w("init: received setup parameters\n")
|
w("init: received setup parameters\n")
|
||||||
@ -595,16 +605,15 @@ func TestLinePrefixWriter(t *testing.T) {
|
|||||||
|
|
||||||
var pos int
|
var pos int
|
||||||
tc.f(func(s string) {
|
tc.f(func(s string) {
|
||||||
if _, err := out.Write([]byte(s)); err != nil {
|
_, err := out.Write([]byte(s))
|
||||||
if tc.wantErr != nil {
|
if tc.wantErr != nil {
|
||||||
if !reflect.DeepEqual(err, tc.wantErr[pos]) {
|
if !reflect.DeepEqual(err, tc.wantErr[pos]) {
|
||||||
t.Fatalf("Write: error = %v, want %v", err, tc.wantErr[pos])
|
t.Fatalf("Write: error = %v, want %v", err, tc.wantErr[pos])
|
||||||
}
|
}
|
||||||
} else {
|
} else if err != nil {
|
||||||
t.Fatalf("Write: unexpected error: %v", err)
|
t.Fatalf("Write: unexpected error: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
|
||||||
pos++
|
pos++
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -629,7 +638,7 @@ func TestLinePrefixWriter(t *testing.T) {
|
|||||||
wantDump[i] = tc.prefix + m
|
wantDump[i] = tc.prefix + m
|
||||||
}
|
}
|
||||||
for i, m := range tc.wantExt {
|
for i, m := range tc.wantExt {
|
||||||
wantDump[len(tc.want)+i] = tc.prefix + m
|
wantDump[len(tc.want)+i] = m
|
||||||
}
|
}
|
||||||
t.Run("dump", func(t *testing.T) {
|
t.Run("dump", func(t *testing.T) {
|
||||||
got := make([]string, 0, len(wantDump))
|
got := make([]string, 0, len(wantDump))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user