use renameio to write files atomically
This commit is contained in:
parent
f67d4ec93f
commit
8df6329209
@ -21,11 +21,11 @@ import (
|
||||
"fmt"
|
||||
"go/format"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
|
||||
"github.com/google/gopacket/layers"
|
||||
"github.com/google/gopacket/pcap"
|
||||
"github.com/google/renameio"
|
||||
)
|
||||
|
||||
// udp and (port 67 or port 68) # dhcpv4
|
||||
@ -57,7 +57,7 @@ func main() {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := ioutil.WriteFile("GENERATED_filterexpr.go", gofmt, 0644); err != nil {
|
||||
if err := renameio.WriteFile("GENERATED_filterexpr.go", gofmt, 0644); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ import (
|
||||
|
||||
"github.com/google/gopacket"
|
||||
"github.com/google/gopacket/layers"
|
||||
"github.com/google/renameio"
|
||||
"github.com/jpillora/backoff"
|
||||
"github.com/rtr7/router7/internal/dhcp4"
|
||||
"github.com/rtr7/router7/internal/notify"
|
||||
@ -83,7 +84,7 @@ func logic() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := ioutil.WriteFile(leasePath, b, 0644); err != nil {
|
||||
if err := renameio.WriteFile(leasePath, b, 0644); err != nil {
|
||||
return fmt.Errorf("persisting lease to %s: %v", leasePath, err)
|
||||
}
|
||||
buf := gopacket.NewSerializeBuffer()
|
||||
@ -94,7 +95,7 @@ func logic() error {
|
||||
},
|
||||
c.Ack,
|
||||
)
|
||||
if err := ioutil.WriteFile(ackFn, buf.Bytes(), 0644); err != nil {
|
||||
if err := renameio.WriteFile(ackFn, buf.Bytes(), 0644); err != nil {
|
||||
return fmt.Errorf("persisting DHCPACK to %s: %v", ackFn, err)
|
||||
}
|
||||
if err := notify.Process("/user/netconfigd", syscall.SIGUSR1); err != nil {
|
||||
|
@ -27,6 +27,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gokrazy/gokrazy"
|
||||
"github.com/google/renameio"
|
||||
"github.com/krolaw/dhcp4"
|
||||
"github.com/krolaw/dhcp4/conn"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
@ -125,8 +126,7 @@ func logic() error {
|
||||
errs <- err
|
||||
return
|
||||
}
|
||||
// TODO: write atomically
|
||||
if err := ioutil.WriteFile("/perm/dhcp4d/leases.json", b, 0644); err != nil {
|
||||
if err := renameio.WriteFile("/perm/dhcp4d/leases.json", b, 0644); err != nil {
|
||||
errs <- err
|
||||
}
|
||||
updateNonExpired(leases)
|
||||
|
@ -26,6 +26,7 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/google/renameio"
|
||||
"github.com/rtr7/router7/internal/dhcp6"
|
||||
"github.com/rtr7/router7/internal/notify"
|
||||
"github.com/rtr7/router7/internal/teelogger"
|
||||
@ -34,8 +35,8 @@ import (
|
||||
var log = teelogger.NewConsole()
|
||||
|
||||
func logic() error {
|
||||
const configPath = "/perm/dhcp6/wire/lease.json"
|
||||
if err := os.MkdirAll(filepath.Dir(configPath), 0755); err != nil {
|
||||
const leasePath = "/perm/dhcp6/wire/lease.json"
|
||||
if err := os.MkdirAll(filepath.Dir(leasePath), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -64,7 +65,7 @@ func logic() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := ioutil.WriteFile(configPath, b, 0644); err != nil {
|
||||
if err := renameio.WriteFile(leasePath, b, 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := notify.Process("/user/netconfigd", syscall.SIGUSR1); err != nil {
|
||||
|
@ -30,6 +30,7 @@ import (
|
||||
"github.com/google/nftables"
|
||||
"github.com/google/nftables/binaryutil"
|
||||
"github.com/google/nftables/expr"
|
||||
"github.com/google/renameio"
|
||||
"github.com/vishvananda/netlink"
|
||||
"golang.org/x/sys/unix"
|
||||
|
||||
@ -287,7 +288,7 @@ func applyInterfaces(dir, root string) error {
|
||||
if err := os.Remove(fn); err != nil && !os.IsNotExist(err) {
|
||||
return err
|
||||
}
|
||||
if err := ioutil.WriteFile(fn, b, 0644); err != nil {
|
||||
if err := renameio.WriteFile(fn, b, 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user