Cleanup RBE logs directory
RBE logs directory is currently messy: 1. We use RBE_output_dir variable to specify where rbe_metrics.txt / rbe_metrics.pb file should go to. 2. We use proxy_log_dir to specify where *.rpl / *.rpi (detailed per action info log file) should go to. 3. We use RBE_log_dir to specify where reproxy.* / bootstrap.* log files should go to. Ideally, all RBE related logs should go to one single directory. In this CL, I'm creating a temporary log directory under out/soong/.temp/rbe/ where all RBE related log files per build would go to. The log dir prefix is also being set to the same prefix as the socket address file. Test: Ran a sample build with `m libc` and ensured that logs are getting cleared across rebuilds and that `rbe_metrics.pb` file is properly generated and being copied to the right location (i.e., from out/soong/.temp/rbe/<rand> to out/ dir) Bug: b/233382420 Change-Id: I46bd38d50419cb9e54e8202d24222979e47ff5ca
This commit is contained in:
@@ -19,12 +19,14 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"android/soong/shared"
|
||||
@@ -42,6 +44,15 @@ const (
|
||||
envConfigFetchTimeout = 10 * time.Second
|
||||
)
|
||||
|
||||
var (
|
||||
rbeRandPrefix int
|
||||
)
|
||||
|
||||
func init() {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
rbeRandPrefix = rand.Intn(1000)
|
||||
}
|
||||
|
||||
type Config struct{ *configImpl }
|
||||
|
||||
type configImpl struct {
|
||||
@@ -1144,34 +1155,25 @@ func (c *configImpl) StartRBE() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (c *configImpl) rbeLogDir() string {
|
||||
for _, f := range []string{"RBE_log_dir", "FLAG_log_dir"} {
|
||||
func (c *configImpl) rbeProxyLogsDir() string {
|
||||
for _, f := range []string{"RBE_proxy_log_dir", "FLAG_output_dir"} {
|
||||
if v, ok := c.environ.Get(f); ok {
|
||||
return v
|
||||
}
|
||||
}
|
||||
if c.Dist() {
|
||||
return c.LogsDir()
|
||||
}
|
||||
return c.OutDir()
|
||||
buildTmpDir := shared.TempDirForOutDir(c.SoongOutDir())
|
||||
return filepath.Join(buildTmpDir, "rbe")
|
||||
}
|
||||
|
||||
func (c *configImpl) rbeStatsOutputDir() string {
|
||||
for _, f := range []string{"RBE_output_dir", "FLAG_output_dir"} {
|
||||
if v, ok := c.environ.Get(f); ok {
|
||||
return v
|
||||
func (c *configImpl) shouldCleanupRBELogsDir() bool {
|
||||
// Perform a log directory cleanup only when the log directory
|
||||
// is auto created by the build rather than user-specified.
|
||||
for _, f := range []string{"RBE_proxy_log_dir", "FLAG_output_dir"} {
|
||||
if _, ok := c.environ.Get(f); ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return c.rbeLogDir()
|
||||
}
|
||||
|
||||
func (c *configImpl) rbeLogPath() string {
|
||||
for _, f := range []string{"RBE_log_path", "FLAG_log_path"} {
|
||||
if v, ok := c.environ.Get(f); ok {
|
||||
return v
|
||||
}
|
||||
}
|
||||
return fmt.Sprintf("text://%v/reproxy_log.txt", c.rbeLogDir())
|
||||
return true
|
||||
}
|
||||
|
||||
func (c *configImpl) rbeExecRoot() string {
|
||||
@@ -1223,6 +1225,23 @@ func (c *configImpl) rbeAuth() (string, string) {
|
||||
return "RBE_use_application_default_credentials", "true"
|
||||
}
|
||||
|
||||
func (c *configImpl) rbeSockAddr(dir string) (string, error) {
|
||||
maxNameLen := len(syscall.RawSockaddrUnix{}.Path)
|
||||
base := fmt.Sprintf("reproxy_%v.sock", rbeRandPrefix)
|
||||
|
||||
name := filepath.Join(dir, base)
|
||||
if len(name) < maxNameLen {
|
||||
return name, nil
|
||||
}
|
||||
|
||||
name = filepath.Join("/tmp", base)
|
||||
if len(name) < maxNameLen {
|
||||
return name, nil
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("cannot generate a proxy socket address shorter than the limit of %v", maxNameLen)
|
||||
}
|
||||
|
||||
func (c *configImpl) UseRemoteBuild() bool {
|
||||
return c.UseGoma() || c.UseRBE()
|
||||
}
|
||||
|
Reference in New Issue
Block a user