[common] Extract OS-specific code into separate files.
This commit is contained in:
parent
6c70880476
commit
d6fc059c97
7 changed files with 174 additions and 52 deletions
|
@ -19,7 +19,6 @@ import "runtime"
|
|||
import "runtime/debug"
|
||||
import "sort"
|
||||
import "strings"
|
||||
import "syscall"
|
||||
import "time"
|
||||
|
||||
import "github.com/colinmarc/cdb"
|
||||
|
@ -75,22 +74,17 @@ func archiveFile (_context *context, _pathResolved string, _pathInArchive string
|
|||
var _fileDev uint64
|
||||
var _fileInode uint64
|
||||
var _fileSize uint64
|
||||
var _fileTimestamp [2]uint64
|
||||
var _fileTimestamp uint64
|
||||
if _stat, _error := os.Stat (_pathResolved); _error == nil {
|
||||
_stat := _stat.Sys()
|
||||
if _stat, _ok := _stat.(*syscall.Stat_t); _ok {
|
||||
_fileDev = uint64 (_stat.Dev)
|
||||
_fileInode = uint64 (_stat.Ino)
|
||||
_fileSize = uint64 (_stat.Size)
|
||||
_fileTimestamp = [2]uint64 { uint64 (_stat.Mtim.Sec), uint64 (_stat.Mtim.Nsec) }
|
||||
} else {
|
||||
return fmt.Errorf ("[6578d2d7] failed `stat`-ing: `%s`!", _pathResolved)
|
||||
_fileDev, _fileInode, _fileSize, _fileTimestamp, _error = statExtract (_stat)
|
||||
if _error != nil {
|
||||
return _error
|
||||
}
|
||||
} else {
|
||||
return _error
|
||||
}
|
||||
|
||||
_fileIdText := fmt.Sprintf ("%d.%d-%d-%d.%d", _fileDev, _fileInode, _fileSize, _fileTimestamp[0], _fileTimestamp[1])
|
||||
_fileIdText := fmt.Sprintf ("%d.%d.%d.%d", _fileDev, _fileInode, _fileSize, _fileTimestamp)
|
||||
_fileIdRaw := blake3.Sum256 ([]byte (_fileIdText))
|
||||
_fileId := hex.EncodeToString (_fileIdRaw[:])
|
||||
|
||||
|
@ -121,18 +115,16 @@ func archiveFile (_context *context, _pathResolved string, _pathInArchive string
|
|||
}
|
||||
defer _file.Close ()
|
||||
if _stat, _error := _file.Stat (); _error == nil {
|
||||
_stat := _stat.Sys()
|
||||
if _stat, _ok := _stat.(*syscall.Stat_t); _ok {
|
||||
if (
|
||||
(_fileDev != uint64 (_stat.Dev)) ||
|
||||
(_fileInode != uint64 (_stat.Ino)) ||
|
||||
(_fileSize != uint64 (_stat.Size)) ||
|
||||
(_fileTimestamp[0] != uint64 (_stat.Mtim.Sec)) ||
|
||||
(_fileTimestamp[1] != uint64 (_stat.Mtim.Nsec))) {
|
||||
return nil, fmt.Errorf ("[3a07643b] file changed while reading: `%s`!", _pathResolved)
|
||||
}
|
||||
} else {
|
||||
return nil, fmt.Errorf ("[4daf593a] failed `stat`-ing: `%s`!", _pathResolved)
|
||||
_fileDev_0, _fileInode_0, _fileSize_0, _fileTimestamp_0, _error := statExtract (_stat)
|
||||
if _error != nil {
|
||||
return nil, _error
|
||||
}
|
||||
if (
|
||||
(_fileDev != _fileDev_0) ||
|
||||
(_fileInode != _fileInode_0) ||
|
||||
(_fileSize != _fileSize_0) ||
|
||||
(_fileTimestamp != _fileTimestamp_0)) {
|
||||
return nil, fmt.Errorf ("[3a07643b] file changed while reading: `%s`!", _pathResolved)
|
||||
}
|
||||
} else {
|
||||
return nil, _error
|
||||
|
@ -144,16 +136,14 @@ func archiveFile (_context *context, _pathResolved string, _pathInArchive string
|
|||
return nil, _error
|
||||
}
|
||||
if _stat, _error := _file.Stat (); _error == nil {
|
||||
_stat := _stat.Sys()
|
||||
if _stat, _ok := _stat.(*syscall.Stat_t); _ok {
|
||||
if (
|
||||
(_fileSize != uint64 (_stat.Size)) ||
|
||||
(_fileTimestamp[0] != uint64 (_stat.Mtim.Sec)) ||
|
||||
(_fileTimestamp[1] != uint64 (_stat.Mtim.Nsec))) {
|
||||
return nil, fmt.Errorf ("[9689146e] file changed while reading: `%s`!", _pathResolved)
|
||||
}
|
||||
} else {
|
||||
return nil, fmt.Errorf ("[523fa3d1] failed `stat`-ing: `%s`!", _pathResolved)
|
||||
_, _, _fileSize_0, _fileTimestamp_0, _error := statExtract (_stat)
|
||||
if _error != nil {
|
||||
return nil, _error
|
||||
}
|
||||
if (
|
||||
(_fileSize != _fileSize_0) ||
|
||||
(_fileTimestamp != _fileTimestamp_0)) {
|
||||
return nil, fmt.Errorf ("[9689146e] file changed while reading: `%s`!", _pathResolved)
|
||||
}
|
||||
} else {
|
||||
return nil, _error
|
||||
|
|
26
sources/cmd/archiver/os-bsd.go
Normal file
26
sources/cmd/archiver/os-bsd.go
Normal file
|
@ -0,0 +1,26 @@
|
|||
|
||||
//go:build freebsd || darwin
|
||||
|
||||
|
||||
package archiver
|
||||
|
||||
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "syscall"
|
||||
|
||||
|
||||
|
||||
|
||||
func statExtract (_stat os.FileInfo) (_dev uint64, _inode uint64, _size uint64, _timestamp uint64, _error error) {
|
||||
if _stat, _ok := _stat.Sys () .(*syscall.Stat_t); _ok {
|
||||
_dev = uint64 (_stat.Dev)
|
||||
_inode = uint64 (_stat.Ino)
|
||||
_size = uint64 (_stat.Size)
|
||||
_timestamp = (uint64 (_stat.Mtimespec.Sec) * 1000000) + (uint64 (_stat.Mtimespec.Nsec) / 1000)
|
||||
} else {
|
||||
_error = fmt.Errorf ("[7739aed3] failed `stat`-ing`!")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
26
sources/cmd/archiver/os-linux.go
Normal file
26
sources/cmd/archiver/os-linux.go
Normal file
|
@ -0,0 +1,26 @@
|
|||
|
||||
//go:build linux || openbsd
|
||||
|
||||
|
||||
package archiver
|
||||
|
||||
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "syscall"
|
||||
|
||||
|
||||
|
||||
|
||||
func statExtract (_stat os.FileInfo) (_dev uint64, _inode uint64, _size uint64, _timestamp uint64, _error error) {
|
||||
if _stat, _ok := _stat.Sys () .(*syscall.Stat_t); _ok {
|
||||
_dev = uint64 (_stat.Dev)
|
||||
_inode = uint64 (_stat.Ino)
|
||||
_size = uint64 (_stat.Size)
|
||||
_timestamp = (uint64 (_stat.Mtim.Sec) * 1000000) + (uint64 (_stat.Mtim.Nsec) / 1000)
|
||||
} else {
|
||||
_error = fmt.Errorf ("[6578d2d7] failed `stat`-ing`!")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
35
sources/cmd/server/os-freebsd.go
Normal file
35
sources/cmd/server/os-freebsd.go
Normal file
|
@ -0,0 +1,35 @@
|
|||
|
||||
//go:build freebsd
|
||||
|
||||
|
||||
package server
|
||||
|
||||
|
||||
import "syscall"
|
||||
|
||||
|
||||
|
||||
func setrlimit (_limitMemory uint) (error) {
|
||||
{
|
||||
_limitMb := (2 * _limitMemory) + (1 * 1024)
|
||||
_limit := syscall.Rlimit {
|
||||
Cur : int64 (_limitMb) * 1024 * 1024,
|
||||
Max : int64 (_limitMb) * 1024 * 1024,
|
||||
}
|
||||
if _error := syscall.Setrlimit (syscall.RLIMIT_AS, &_limit); _error != nil {
|
||||
return _error
|
||||
}
|
||||
}
|
||||
{
|
||||
_limitMb := _limitMemory
|
||||
_limit := syscall.Rlimit {
|
||||
Cur : int64 (_limitMb) * 1024 * 1024,
|
||||
Max : int64 (_limitMb) * 1024 * 1024,
|
||||
}
|
||||
if _error := syscall.Setrlimit (syscall.RLIMIT_DATA, &_limit); _error != nil {
|
||||
return _error
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
36
sources/cmd/server/os-linux.go
Normal file
36
sources/cmd/server/os-linux.go
Normal file
|
@ -0,0 +1,36 @@
|
|||
|
||||
//go:build linux || darwin
|
||||
|
||||
|
||||
package server
|
||||
|
||||
|
||||
import "syscall"
|
||||
|
||||
|
||||
|
||||
|
||||
func setrlimit (_limitMemory uint) (error) {
|
||||
{
|
||||
_limitMb := (2 * _limitMemory) + (1 * 1024)
|
||||
_limit := syscall.Rlimit {
|
||||
Cur : uint64 (_limitMb) * 1024 * 1024,
|
||||
Max : uint64 (_limitMb) * 1024 * 1024,
|
||||
}
|
||||
if _error := syscall.Setrlimit (syscall.RLIMIT_AS, &_limit); _error != nil {
|
||||
return _error
|
||||
}
|
||||
}
|
||||
{
|
||||
_limitMb := _limitMemory
|
||||
_limit := syscall.Rlimit {
|
||||
Cur : uint64 (_limitMb) * 1024 * 1024,
|
||||
Max : uint64 (_limitMb) * 1024 * 1024,
|
||||
}
|
||||
if _error := syscall.Setrlimit (syscall.RLIMIT_DATA, &_limit); _error != nil {
|
||||
return _error
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
26
sources/cmd/server/os-openbsd.go
Normal file
26
sources/cmd/server/os-openbsd.go
Normal file
|
@ -0,0 +1,26 @@
|
|||
|
||||
//go:build openbsd
|
||||
|
||||
|
||||
package server
|
||||
|
||||
|
||||
import "syscall"
|
||||
|
||||
|
||||
|
||||
|
||||
func setrlimit (_limitMemory uint) (error) {
|
||||
{
|
||||
_limitMb := _limitMemory
|
||||
_limit := syscall.Rlimit {
|
||||
Cur : uint64 (_limitMb) * 1024 * 1024,
|
||||
Max : uint64 (_limitMb) * 1024 * 1024,
|
||||
}
|
||||
if _error := syscall.Setrlimit (syscall.RLIMIT_DATA, &_limit); _error != nil {
|
||||
return _error
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
@ -898,25 +898,8 @@ func main_0 () (error) {
|
|||
if !_quiet && _isMaster {
|
||||
log.Printf ("[ii] [2c130d70] limiting memory to %d MiB;\n", _limitMemory)
|
||||
}
|
||||
{
|
||||
_limitMb := (2 * _limitMemory) + (1 * 1024)
|
||||
_limit := syscall.Rlimit {
|
||||
Cur : uint64 (_limitMb) * 1024 * 1024,
|
||||
Max : uint64 (_limitMb) * 1024 * 1024,
|
||||
}
|
||||
if _error := syscall.Setrlimit (syscall.RLIMIT_AS, &_limit); _error != nil {
|
||||
AbortError (_error, "[4da96378] failed to configure memory limit!")
|
||||
}
|
||||
}
|
||||
{
|
||||
_limitMb := _limitMemory
|
||||
_limit := syscall.Rlimit {
|
||||
Cur : uint64 (_limitMb) * 1024 * 1024,
|
||||
Max : uint64 (_limitMb) * 1024 * 1024,
|
||||
}
|
||||
if _error := syscall.Setrlimit (syscall.RLIMIT_DATA, &_limit); _error != nil {
|
||||
AbortError (_error, "[f661b4fe] failed to configure memory limit!")
|
||||
}
|
||||
if _error := setrlimit (_limitMemory); _error != nil {
|
||||
AbortError (_error, "[4da96378] failed to configure memory limit!")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue