mirror of
https://github.com/zrepl/zrepl.git
synced 2024-12-23 07:28:57 +01:00
10a14a8c50
package trace: - introduce the concept of tasks and spans, tracked as linked list within ctx - see package-level docs for an overview of the concepts - **main feature 1**: unique stack of task and span IDs - makes it easy to follow a series of log entries in concurrent code - **main feature 2**: ability to produce a chrome://tracing-compatible trace file - either via an env variable or a `zrepl pprof` subcommand - this is not a CPU profile, we already have go pprof for that - but it is very useful to visually inspect where the replication / snapshotter / pruner spends its time ( fixes #307 ) usage in package daemon/logging: - goal: every log entry should have a trace field with the ID stack from package trace - make `logging.GetLogger(ctx, Subsys)` the authoritative `logger.Logger` factory function - the context carries a linked list of injected fields which `logging.GetLogger` adds to the logger it returns - `logging.GetLogger` also uses package `trace` to get the task-and-span-stack and injects it into the returned logger's fields
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package tests
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/zrepl/zrepl/platformtest"
|
|
"github.com/zrepl/zrepl/zfs"
|
|
)
|
|
|
|
func BatchDestroy(ctx *platformtest.Context) {
|
|
|
|
platformtest.Run(ctx, platformtest.PanicErr, ctx.RootDataset, `
|
|
DESTROYROOT
|
|
CREATEROOT
|
|
+ "foo bar"
|
|
+ "foo bar@1"
|
|
+ "foo bar@2"
|
|
+ "foo bar@3"
|
|
R zfs hold zrepl_platformtest "${ROOTDS}/foo bar@2"
|
|
`)
|
|
|
|
reqs := []*zfs.DestroySnapOp{
|
|
&zfs.DestroySnapOp{
|
|
ErrOut: new(error),
|
|
Filesystem: fmt.Sprintf("%s/foo bar", ctx.RootDataset),
|
|
Name: "3",
|
|
},
|
|
&zfs.DestroySnapOp{
|
|
ErrOut: new(error),
|
|
Filesystem: fmt.Sprintf("%s/foo bar", ctx.RootDataset),
|
|
Name: "2",
|
|
},
|
|
}
|
|
zfs.ZFSDestroyFilesystemVersions(ctx, reqs)
|
|
if *reqs[0].ErrOut != nil {
|
|
panic("expecting no error")
|
|
}
|
|
err := (*reqs[1].ErrOut).Error()
|
|
if !strings.Contains(err, fmt.Sprintf("%s/foo bar@2", ctx.RootDataset)) {
|
|
panic(fmt.Sprintf("expecting error about being unable to destroy @2: %T\n%s", err, err))
|
|
}
|
|
|
|
platformtest.Run(ctx, platformtest.PanicErr, ctx.RootDataset, `
|
|
!N "foo bar@3"
|
|
!E "foo bar@1"
|
|
!E "foo bar@2"
|
|
R zfs release zrepl_platformtest "${ROOTDS}/foo bar@2"
|
|
- "foo bar@2"
|
|
- "foo bar@1"
|
|
- "foo bar"
|
|
`)
|
|
|
|
}
|