From 6ad0a3628385877544501527cc218f3e986460eb Mon Sep 17 00:00:00 2001 From: zack olson Date: Fri, 20 Sep 2024 09:56:06 -0400 Subject: [PATCH] split tmutil call args across two batched calls --- ee/agent/timemachine/timemachine_darwin.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ee/agent/timemachine/timemachine_darwin.go b/ee/agent/timemachine/timemachine_darwin.go index fe431235f..a12e68549 100644 --- a/ee/agent/timemachine/timemachine_darwin.go +++ b/ee/agent/timemachine/timemachine_darwin.go @@ -33,10 +33,17 @@ func AddExclusions(ctx context.Context, k types.Knapsack) { launcher.pid */ - exclusionPatterns := []string{ + exclusionPatternsFirstBatch := []string{ "*.json", "*.json.gz", "*.db", + } + + addExclusionsFromPathPatterns(ctx, k, exclusionPatternsFirstBatch) + + // Attempting to run this with a single tmutil call we see a lot of tmutil failures logged with error "argument list too long". + // To avoid this we run in two separate batches, attempting to cut the post-glob argument list roughly in half + exclusionPatternsSecondBatch := []string{ "*.sqlite", "desktop_*", "*.pid", @@ -45,6 +52,10 @@ func AddExclusions(ctx context.Context, k types.Knapsack) { "osquery*", } + addExclusionsFromPathPatterns(ctx, k, exclusionPatternsSecondBatch) +} + +func addExclusionsFromPathPatterns(ctx context.Context, k types.Knapsack, exclusionPatterns []string) { var exclusionPaths []string for _, pattern := range exclusionPatterns { matches, err := filepath.Glob(filepath.Join(k.RootDirectory(), pattern))