aboutsummaryrefslogtreecommitdiff
path: root/core/helpers.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/helpers.go')
-rw-r--r--core/helpers.go102
1 files changed, 0 insertions, 102 deletions
diff --git a/core/helpers.go b/core/helpers.go
deleted file mode 100644
index 82a0150af..000000000
--- a/core/helpers.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package core
-
-import (
- "bytes"
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "os/exec"
- "runtime"
- "strconv"
- "strings"
- "sync"
-)
-
-// isLocalhost returns true if host looks explicitly like a localhost address.
-func isLocalhost(host string) bool {
- return host == "localhost" || host == "::1" || strings.HasPrefix(host, "127.")
-}
-
-// checkFdlimit issues a warning if the OS max file descriptors is below a recommended minimum.
-func checkFdlimit() {
- const min = 4096
-
- // Warn if ulimit is too low for production sites
- if runtime.GOOS == "linux" || runtime.GOOS == "darwin" {
- out, err := exec.Command("sh", "-c", "ulimit -n").Output() // use sh because ulimit isn't in Linux $PATH
- if err == nil {
- // Note that an error here need not be reported
- lim, err := strconv.Atoi(string(bytes.TrimSpace(out)))
- if err == nil && lim < min {
- fmt.Printf("Warning: File descriptor limit %d is too low for production sites. At least %d is recommended. Set with \"ulimit -n %d\".\n", lim, min, min)
- }
- }
- }
-}
-
-// signalSuccessToParent tells the parent our status using pipe at index 3.
-// If this process is not a restart, this function does nothing.
-// Calling this function once this process has successfully initialized
-// is vital so that the parent process can unblock and kill itself.
-// This function is idempotent; it executes at most once per process.
-func signalSuccessToParent() {
- signalParentOnce.Do(func() {
- if IsRestart() {
- ppipe := os.NewFile(3, "") // parent is reading from pipe at index 3
- _, err := ppipe.Write([]byte("success")) // we must send some bytes to the parent
- if err != nil {
- log.Printf("[ERROR] Communicating successful init to parent: %v", err)
- }
- ppipe.Close()
- }
- })
-}
-
-// signalParentOnce is used to make sure that the parent is only
-// signaled once; doing so more than once breaks whatever socket is
-// at fd 4 (the reason for this is still unclear - to reproduce,
-// call Stop() and Start() in succession at least once after a
-// restart, then try loading first host of Corefile in the browser).
-// Do not use this directly - call signalSuccessToParent instead.
-var signalParentOnce sync.Once
-
-// corefileGob maps bind address to index of the file descriptor
-// in the Files array passed to the child process. It also contains
-// the corefile contents and other state needed by the new process.
-// Used only during graceful restarts where a new process is spawned.
-type corefileGob struct {
- ListenerFds map[string]uintptr
- Corefile Input
- OnDemandTLSCertsIssued int32
-}
-
-// IsRestart returns whether this process is, according
-// to env variables, a fork as part of a graceful restart.
-func IsRestart() bool {
- return os.Getenv("COREDNS_RESTART") == "true"
-}
-
-// writePidFile writes the process ID to the file at PidFile, if specified.
-func writePidFile() error {
- pid := []byte(strconv.Itoa(os.Getpid()) + "\n")
- return ioutil.WriteFile(PidFile, pid, 0644)
-}
-
-// CorefileInput represents a Corefile as input
-// and is simply a convenient way to implement
-// the Input interface.
-type CorefileInput struct {
- Filepath string
- Contents []byte
- RealFile bool
-}
-
-// Body returns c.Contents.
-func (c CorefileInput) Body() []byte { return c.Contents }
-
-// Path returns c.Filepath.
-func (c CorefileInput) Path() string { return c.Filepath }
-
-// IsFile returns true if the original input was a real file on the file system.
-func (c CorefileInput) IsFile() bool { return c.RealFile }