本文整理汇总了Golang中github.com/youtube/vitess/go/sync2.ServiceManager类的典型用法代码示例。如果您正苦于以下问题:Golang ServiceManager类的具体用法?Golang ServiceManager怎么用?Golang ServiceManager使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ServiceManager类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestChannel
func TestChannel(t *testing.T) {
logger := New("logger", 1)
lastValue := sync2.AtomicString{}
svm := sync2.ServiceManager{}
svm.Go(func(svc *sync2.ServiceContext) error {
ch := logger.Subscribe()
defer logger.Unsubscribe(ch)
for svc.IsRunning() {
lastValue.Set((<-ch).(*logMessage).Format(nil))
}
return nil
})
time.Sleep(10 * time.Millisecond)
if sz := logger.size.Get(); sz != 1 {
t.Errorf("want 1, got %d", sz)
}
logger.Send(&logMessage{"val2"})
time.Sleep(10 * time.Millisecond)
if lastValue.Get() != "val2\n" {
t.Errorf("want val2\\n, got %q", lastValue.Get())
}
go logger.Send(&logMessage{"val3"})
svm.Stop()
time.Sleep(10 * time.Millisecond)
if sz := logger.size.Get(); sz != 0 {
t.Errorf("want 0, got %d", sz)
}
}
开发者ID:chinna1986,项目名称:vitess,代码行数:31,代码来源:streamlog_test.go
示例2: WaitForChange
func (f *fileInfo) WaitForChange(svm *sync2.ServiceManager) error {
for {
// Stop waiting if we're shutting down
if svm.State() != sync2.SERVICE_RUNNING {
return io.EOF
}
time.Sleep(100 * time.Millisecond)
fi, err := f.handle.Stat()
if err != nil {
return fmt.Errorf("stat error: %v", err)
}
if fi.Size() != f.pos {
return nil
}
}
}
开发者ID:qinbo,项目名称:vitess,代码行数:16,代码来源:binlog_streamer.go
示例3: TestFileInfo
func TestFileInfo(t *testing.T) {
fname := path.Join(os.TempDir(), "binlog_streamer.test")
writer, err := os.Create(fname)
if err != nil {
t.Fatal(err)
}
defer os.Remove(fname)
var file fileInfo
err = file.Init(fname, 0)
if err != nil {
t.Fatal(err)
}
ch := make(chan []byte, 10)
var svm = sync2.ServiceManager{}
svm.Go(func(svc *sync2.ServiceContext) error {
for svm.State() == sync2.SERVICE_RUNNING {
file.WaitForChange(svc)
b := make([]byte, 128)
n, err := file.handle.Read(b)
if err != nil {
ch <- []byte(err.Error())
}
file.Set(file.lastPos + int64(n))
ch <- b[:n]
}
return nil
})
want := "Message1"
writer.WriteString(want)
writer.Sync()
got := string(<-ch)
if want != got {
t.Errorf("want %v, got %v", want, got)
}
want = "Message2"
writer.WriteString(want)
writer.Sync()
got = string(<-ch)
if want != got {
t.Errorf("want %v, got %v", want, got)
}
time.Sleep(200 * time.Millisecond)
want = "Message3"
writer.WriteString(want)
writer.Sync()
got = string(<-ch)
if want != got {
t.Errorf("want %v, got %v", want, got)
}
want = "EOF"
svm.Stop()
got = string(<-ch)
if want != got {
t.Errorf("want %v, got %v", want, got)
}
}
开发者ID:chinna1986,项目名称:vitess,代码行数:60,代码来源:binlog_file_streamer_test.go
示例4: TestChannel
func TestChannel(t *testing.T) {
logger := New("logger", 1)
lastValue := sync2.AtomicString{}
svm := sync2.ServiceManager{}
svm.Go(func(_ *sync2.ServiceManager) {
ch := logger.Subscribe(nil)
defer logger.Unsubscribe(ch)
for svm.State() == sync2.SERVICE_RUNNING {
lastValue.Set(<-ch)
}
})
time.Sleep(10 * time.Millisecond)
if sz := logger.size.Get(); sz != 1 {
t.Errorf("want 1, got %d", sz)
}
logger.Send(&logMessage{"val2"})
time.Sleep(10 * time.Millisecond)
if lastValue.Get() != "val2\n" {
t.Errorf("want val2\\n, got %q", lastValue.Get())
}
go logger.Send(&logMessage{"val3"})
svm.Stop()
time.Sleep(10 * time.Millisecond)
if sz := logger.size.Get(); sz != 0 {
t.Errorf("want 0, got %d", sz)
}
}
开发者ID:rn2dy,项目名称:vitess,代码行数:30,代码来源:streamlog_test.go
示例5: BenchmarkConnStreamerParseEvents
func BenchmarkConnStreamerParseEvents(b *testing.B) {
filename := testfiles.Locate("binlog_test/vt-0000062347-bin.000001")
var svm sync2.ServiceManager
count := 0
bls := &binlogConnStreamer{dbname: "vt_test_database", sendTransaction: func(tx *proto.BinlogTransaction) error {
count++
return nil
}}
for i := 0; i < b.N; i++ {
events := readEvents(b, filename)
svm.Go(func(svc *sync2.ServiceContext) error {
_, err := bls.parseEvents(svc, events)
return err
})
if err := svm.Join(); err != ServerEOF {
b.Errorf("%v", err)
}
}
b.Logf("%d transactions processed", count)
}
开发者ID:chinna1986,项目名称:vitess,代码行数:22,代码来源:benchmark_test.go
示例6: BenchmarkFileStreamerParseEvents
func BenchmarkFileStreamerParseEvents(b *testing.B) {
filename := testfiles.Locate("binlog_test/vt-0000062347-bin.000001")
var svm sync2.ServiceManager
count := 0
bls := newTestBinlogFileStreamer("vt_test_database", "", myproto.ReplicationPosition{}, func(tx *proto.BinlogTransaction) error {
count++
return nil
})
for i := 0; i < b.N; i++ {
if err := bls.file.Init(filename, 0); err != nil {
b.Fatalf("%v", err)
}
svm.Go(bls.run)
if err := svm.Join(); err != nil {
b.Errorf("%v", err)
}
bls.file.Close()
}
b.Logf("%d transactions processed", count)
}
开发者ID:chinna1986,项目名称:vitess,代码行数:22,代码来源:benchmark_test.go
示例7: TestHTTP
func TestHTTP(t *testing.T) {
l, err := net.Listen("tcp", ":0")
if err != nil {
t.Fatal(err)
}
addr := l.Addr().String()
go http.Serve(l, nil)
logger := New("logger", 1)
logger.ServeLogs("/log", func(params url.Values, x interface{}) string { return x.(*logMessage).Format(params) })
// This should not block
logger.Send(&logMessage{"val1"})
lastValue := sync2.AtomicString{}
svm := sync2.ServiceManager{}
svm.Go(func(svc *sync2.ServiceContext) error {
resp, err := http.Get(fmt.Sprintf("http://%s/log", addr))
if err != nil {
t.Fatal(err)
}
defer resp.Body.Close()
buf := make([]byte, 100)
for svc.IsRunning() {
n, err := resp.Body.Read(buf)
if err != nil {
t.Fatal(err)
}
lastValue.Set(string(buf[:n]))
}
return nil
})
time.Sleep(100 * time.Millisecond)
if sz := logger.size.Get(); sz != 1 {
t.Errorf("want 1, got %d", sz)
}
logger.Send(&logMessage{"val2"})
time.Sleep(100 * time.Millisecond)
if lastValue.Get() != "val2\n" {
t.Errorf("want val2\\n, got %q", lastValue.Get())
}
// This part of the test is flaky.
// Uncomment for one-time testing.
/*
// This send will unblock the http client
// which will allow it to see the stop request
// from svm.
go logger.Send(&logMessage{"val3"})
svm.Stop()
// You have to send a few times before the writer
// returns an error.
for i := 0; i < 10; i++ {
time.Sleep(100 * time.Millisecond)
logger.Send(&logMessage{"val4"})
}
time.Sleep(100 * time.Millisecond)
if sz := logger.size.Get(); sz != 0 {
t.Errorf("want 0, got %d", sz)
}
*/
}
开发者ID:chinna1986,项目名称:vitess,代码行数:63,代码来源:streamlog_test.go
注:本文中的github.com/youtube/vitess/go/sync2.ServiceManager类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论