* add new error funcs which take a ctx and deprecate existing funcs * use context where available when writing error events * remove circular internal/errors pkg dep * suppress some chatty errors using errors.WithoutEvent() * convert auth oidc funcs to take context where needed to write events Co-authored-by: Jim <jlambert@hashicorp.com>
39 lines
786 B
Go
39 lines
786 B
Go
package event
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"sync"
|
|
)
|
|
|
|
// serializedWriter uses a mutext to serializes all writes to its io.Writer
|
|
type serializedWriter struct {
|
|
l *sync.Mutex
|
|
w io.Writer
|
|
}
|
|
|
|
// Write uses a mutex to serialize all writes
|
|
func (s *serializedWriter) Write(p []byte) (int, error) {
|
|
const op = "event.(serializedWriter).Write"
|
|
if s == nil {
|
|
return 0, fmt.Errorf("%s: missing serialized writer: %w", op, ErrInvalidParameter)
|
|
}
|
|
if s.l == nil {
|
|
return 0, fmt.Errorf("%s: missing lock: %w", op, ErrInvalidParameter)
|
|
}
|
|
if s.w == nil {
|
|
return 0, fmt.Errorf("%s: missing writer: %w", op, ErrInvalidParameter)
|
|
}
|
|
|
|
s.l.Lock()
|
|
defer s.l.Unlock()
|
|
reader := bytes.NewReader(p)
|
|
|
|
n, err := reader.WriteTo(s.w)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return int(n), err
|
|
}
|