2021-05-23 01:03:13 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
2021-06-27 12:51:28 +00:00
|
|
|
"github.com/chrislusf/seaweedfs/weed/glog"
|
2021-05-23 01:03:13 +00:00
|
|
|
"github.com/chrislusf/seaweedfs/weed/pb"
|
|
|
|
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
|
|
|
"google.golang.org/grpc"
|
|
|
|
"strconv"
|
2021-06-27 12:51:28 +00:00
|
|
|
"time"
|
2021-05-23 01:03:13 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
2021-09-11 09:21:55 +00:00
|
|
|
dir = flag.String("dir", "/tmp", "directory to create files")
|
|
|
|
n = flag.Int("n", 100, "the number of metadata")
|
|
|
|
tailFiler = flag.String("filer", "localhost:8888", "the filer address")
|
|
|
|
isWrite = flag.Bool("write", false, "only write")
|
|
|
|
writeInterval = flag.Duration("writeInterval", 0, "write interval, e.g., 1s")
|
2021-05-23 01:03:13 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
if *isWrite {
|
|
|
|
startGenerateMetadata()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
expected := 0
|
|
|
|
startSubscribeMetadata(func(event *filer_pb.SubscribeMetadataResponse) error {
|
|
|
|
if event.Directory != *dir {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
name := event.EventNotification.NewEntry.Name
|
2021-06-27 12:51:28 +00:00
|
|
|
glog.V(0).Infof("=> %s ts:%+v", name, time.Unix(0, event.TsNs))
|
2021-05-23 01:03:13 +00:00
|
|
|
id := name[4:]
|
|
|
|
if x, err := strconv.Atoi(id); err == nil {
|
|
|
|
if x != expected {
|
|
|
|
return fmt.Errorf("Expected file%d Actual %s\n", expected, name)
|
|
|
|
}
|
|
|
|
expected++
|
|
|
|
} else {
|
|
|
|
return err
|
|
|
|
}
|
2021-06-27 12:51:28 +00:00
|
|
|
time.Sleep(10 * time.Millisecond)
|
2021-05-23 01:03:13 +00:00
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func startGenerateMetadata() {
|
2021-09-13 05:47:52 +00:00
|
|
|
pb.WithFilerClient(pb.ServerAddress(*tailFiler), grpc.WithInsecure(), func(client filer_pb.SeaweedFilerClient) error {
|
2021-05-23 01:03:13 +00:00
|
|
|
|
|
|
|
for i := 0; i < *n; i++ {
|
|
|
|
name := fmt.Sprintf("file%d", i)
|
2021-09-11 09:21:55 +00:00
|
|
|
glog.V(0).Infof("write %s/%s", *dir, name)
|
2021-05-23 01:03:13 +00:00
|
|
|
if err := filer_pb.CreateEntry(client, &filer_pb.CreateEntryRequest{
|
|
|
|
Directory: *dir,
|
|
|
|
Entry: &filer_pb.Entry{
|
|
|
|
Name: name,
|
|
|
|
},
|
|
|
|
}); err != nil {
|
|
|
|
fmt.Printf("create entry %s: %v\n", name, err)
|
|
|
|
return err
|
|
|
|
}
|
2021-09-11 09:21:55 +00:00
|
|
|
if *writeInterval > 0 {
|
|
|
|
time.Sleep(*writeInterval)
|
|
|
|
}
|
2021-05-23 01:03:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func startSubscribeMetadata(eachEntryFunc func(event *filer_pb.SubscribeMetadataResponse) error) {
|
|
|
|
|
2021-09-13 05:47:52 +00:00
|
|
|
tailErr := pb.FollowMetadata(pb.ServerAddress(*tailFiler), grpc.WithInsecure(), "tail", *dir, nil, 0, 0, eachEntryFunc, false)
|
2021-05-23 01:03:13 +00:00
|
|
|
|
|
|
|
if tailErr != nil {
|
|
|
|
fmt.Printf("tail %s: %v\n", *tailFiler, tailErr)
|
|
|
|
}
|
|
|
|
}
|