Skip to content

Commit ec64c15

Browse files
authored
Merge pull request #862 from kernelkit/dagger-mem-usage
Dagger memory usage
2 parents 219c610 + 429c4f1 commit ec64c15

File tree

3 files changed

+71
-17
lines changed

3 files changed

+71
-17
lines changed

src/confd/bin/dagger

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -84,50 +84,80 @@ EOF
8484
done
8585
}
8686

87-
do_exec()
87+
maybe_get_current()
88+
{
89+
echo $([ -f "$basedir/current" ] && cat "$basedir/current" || true)
90+
[ ! "$current" ] || [ -d "$basedir/$current" ] \
91+
|| abort "Current generation does not exist"
92+
}
93+
94+
get_current()
8895
{
89-
local action="$1"
9096
local current=
9197

92-
current=$([ -f "$basedir/current" ] && cat "$basedir/current")
98+
current=$(maybe_get_current)
9399
[ "$current" ] && [ -d "$basedir/$current" ] \
94100
|| abort "Current generation does not exist"
95101

96-
action_exec "$1" "$basedir/$current"
102+
echo "$current"
97103
}
98104

99-
do_abandon()
105+
get_next()
100106
{
101107
local next=
102108

103109
next=$([ -f "$basedir/next" ] && cat "$basedir/next" || true)
104110
[ "$next" ] && [ -d "$basedir/$next" ] \
105111
|| abort "Next generation does not exist"
106112

107-
mv "$basedir/$next" "$basedir/$next-ABANDONED-$(date +%F-%T)"
108-
rm "$basedir/next"
109-
inform info "Abandoned generation $next"
113+
echo "$next"
110114
}
111115

112-
do_evolve()
116+
do_exec()
113117
{
114-
local current=
115-
local next=
118+
local action="$1"
116119

117-
current=$([ -f "$basedir/current" ] && cat "$basedir/current" || true)
118-
[ ! "$current" ] || [ -d "$basedir/$current" ] \
119-
|| abort "Current generation does not exist"
120+
action_exec "$1" "$basedir/$(get_current)"
121+
}
120122

121-
next=$([ -f "$basedir/next" ] && cat "$basedir/next" || true)
122-
[ "$next" ] && [ -d "$basedir/$next" ] \
123-
|| abort "Next generation does not exist"
123+
do_abandon()
124+
{
125+
local next=$(get_next)
126+
127+
date +%F-%T >"$basedir/$next/ABANDONED"
128+
129+
mv "$basedir/next" "$basedir/current"
130+
inform info "Abandoned generation $next"
131+
}
132+
133+
do_evolve()
134+
{
135+
local current=$(maybe_get_current)
136+
local next=$(get_next)
137+
local ar=
124138

125139
[ "$current" ] && action_exec exit "$basedir/$current"
126140

127141
action_exec init "$basedir/$next"
128142

129143
mv "$basedir/next" "$basedir/current"
130144
inform info "Evolved to generation $next"
145+
146+
if [ "$current" ]; then
147+
ar="$current.tar.gz"
148+
[ -f "$basedir/$current/ABANDONED" ] && ar="$current-ABANDONED.tar.gz"
149+
150+
(cd "$basedir" && tar caf "$ar.tar.gz" "$current")
151+
rm -rf "$basedir/$current"
152+
fi
153+
}
154+
155+
do_prune()
156+
{
157+
local keep=${1:-10}
158+
159+
cd "$basedir"
160+
rm -f old=$(ls -rv *.tar.gz | tail "+$((keep + 1))")
131161
}
132162

133163
usage()
@@ -158,6 +188,10 @@ Commands:
158188
exec <action>
159189
Run the specified action of the current generation.
160190
191+
prune [<num-generations>]
192+
Remove all but the last <num-generations>, or 10 by default,
193+
archived generations.
194+
161195
help
162196
Show this message.
163197
@@ -201,6 +235,9 @@ case $cmd in
201235
"exec")
202236
do_exec "$@"
203237
;;
238+
"prune")
239+
do_prune "$@"
240+
;;
204241

205242
*)
206243
usage && exit 1

src/confd/src/dagger.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,23 @@ int dagger_evolve(struct dagger *d)
114114
return exitcode;
115115
}
116116

117+
static int dagger_prune(struct dagger *d)
118+
{
119+
int exitcode;
120+
121+
exitcode = systemf("dagger -C %s prune", d->path);
122+
DEBUG("dagger(%d->%d): prune: exitcode=%d\n",
123+
d->current, d->next, exitcode);
124+
125+
return exitcode;
126+
}
127+
117128
int dagger_evolve_or_abandon(struct dagger *d)
118129
{
119130
int exitcode, err;
120131

121132
exitcode = dagger_evolve(d);
133+
dagger_prune(d);
122134
if (!exitcode)
123135
return 0;
124136

src/confd/src/ietf-interfaces.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,11 @@ static int netdag_exit_reload(struct dagger *net)
304304
{
305305
FILE *initctl;
306306

307+
if (systemf("runlevel >/dev/null 2>&1"))
308+
/* If we are still bootstrapping, there is nothing to
309+
* reload. */
310+
return 0;
311+
307312
/* We may end up writing this file multiple times, e.g. if
308313
* multiple services are disabled in the same config cycle,
309314
* but since the contents of the file are static it doesn't

0 commit comments

Comments
 (0)