Files
Zach LeslieandGitHub be9d148a6b Add optional anonymous Tempo usage reporting (#1481)
* Import Loki usagestats package

* Begin implementing usagestats package

* Begin integrating backend into module init

* Add BuildVersion() to build package

* Update vendor

* Update backend.Raw interfaces for error handling and object deletion

* Add UsageReport dependency for main components

* Use backend.ErrDoesNotExist in place of interface extension

* Updates for tempo implementation

* Update tests

* Add metrics generator reporting

* Add replication_factor usage metric

* Add store configuration usage metrics

* Update vendor

* UsageReport requires MemberlistKV for the store

* Include ring kv store stat

* Include frontend version stats

* Include feature stats

* Include receiver stats

* Include missed feature stat

* Include docs on how to disable the usage report

* Update changelog

* Include Loki attribution in `usagestats` package

* Rename stats

* Fix stat reference

* Call out storage dependency for distributor

* Go mod tidy

* Raise log level of reporting message

* Take docs suggestions

* Move backoff defaults into config defaults

* Remove DeleteObject interface extension

* Include ErrBadSeedFile to indicate new seed generation should proceed

* Handle ErrBadSeedFile

* Update vendor

* Update vendor

* Update config handling to use prefix

* Tidy up for PR feedback
2022-07-29 09:48:12 -06:00

52 lines
1019 B
Go

// Copyright 2011 Evan Shaw. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build darwin dragonfly freebsd linux openbsd solaris netbsd
package mmap
import (
"golang.org/x/sys/unix"
)
func mmap(len int, inprot, inflags, fd uintptr, off int64) ([]byte, error) {
flags := unix.MAP_SHARED
prot := unix.PROT_READ
switch {
case inprot&COPY != 0:
prot |= unix.PROT_WRITE
flags = unix.MAP_PRIVATE
case inprot&RDWR != 0:
prot |= unix.PROT_WRITE
}
if inprot&EXEC != 0 {
prot |= unix.PROT_EXEC
}
if inflags&ANON != 0 {
flags |= unix.MAP_ANON
}
b, err := unix.Mmap(int(fd), off, len, prot, flags)
if err != nil {
return nil, err
}
return b, nil
}
func (m MMap) flush() error {
return unix.Msync([]byte(m), unix.MS_SYNC)
}
func (m MMap) lock() error {
return unix.Mlock([]byte(m))
}
func (m MMap) unlock() error {
return unix.Munlock([]byte(m))
}
func (m MMap) unmap() error {
return unix.Munmap([]byte(m))
}