Merge "veyron/services/mgmt/logreader: Remove dependency on stubs"
diff --git a/services/mgmt/logreader/impl/logdir_invoker.go b/services/mgmt/logreader/impl/logdir_invoker.go
index ae1d44d..be4a741 100644
--- a/services/mgmt/logreader/impl/logdir_invoker.go
+++ b/services/mgmt/logreader/impl/logdir_invoker.go
@@ -7,7 +7,6 @@
"veyron/lib/glob"
"veyron2/ipc"
- "veyron2/services/mounttable"
"veyron2/services/mounttable/types"
"veyron2/vlog"
)
@@ -22,28 +21,25 @@
}
// NewLogDirectoryInvoker is the invoker factory.
-func NewLogDirectoryInvoker(root, suffix string) *logDirectoryInvoker {
- return &logDirectoryInvoker{
- root: path.Clean(root),
- suffix: suffix,
- }
+func NewLogDirectoryInvoker(root, suffix string) ipc.Invoker {
+ return ipc.ReflectInvoker(&logDirectoryInvoker{path.Clean(root), suffix})
}
// Glob streams the name of all the objects that match pattern.
-func (i *logDirectoryInvoker) Glob(context ipc.ServerContext, pattern string, stream mounttable.GlobbableServiceGlobStream) error {
+func (i *logDirectoryInvoker) Glob(call ipc.ServerCall, pattern string) error {
vlog.VI(1).Infof("%v.Glob(%v)", i.suffix, pattern)
g, err := glob.Parse(pattern)
if err != nil {
return err
}
i.root = path.Join(i.root, i.suffix)
- return i.globStep("", g, true, stream)
+ return i.globStep("", g, true, call)
}
// globStep applies a glob recursively.
-func (i *logDirectoryInvoker) globStep(name string, g *glob.Glob, isDir bool, stream mounttable.GlobbableServiceGlobStream) error {
+func (i *logDirectoryInvoker) globStep(name string, g *glob.Glob, isDir bool, call ipc.ServerCall) error {
if g.Len() == 0 && !isDir {
- if err := stream.SendStream().Send(types.MountEntry{Name: name}); err != nil {
+ if err := call.Send(types.MountEntry{Name: name}); err != nil {
return err
}
}
@@ -72,7 +68,7 @@
continue
}
if ok, left := g.MatchInitialSegment(fileName); ok {
- if err := i.globStep(path.Join(name, fileName), left, file.IsDir(), stream); err != nil {
+ if err := i.globStep(path.Join(name, fileName), left, file.IsDir(), call); err != nil {
return err
}
}
diff --git a/services/mgmt/logreader/impl/logdir_invoker_test.go b/services/mgmt/logreader/impl/logdir_invoker_test.go
index 192959d..f47e546 100644
--- a/services/mgmt/logreader/impl/logdir_invoker_test.go
+++ b/services/mgmt/logreader/impl/logdir_invoker_test.go
@@ -23,8 +23,7 @@
}
func (d *logDirectoryDispatcher) Lookup(suffix, _ string) (ipc.Invoker, security.Authorizer, error) {
- invoker := ipc.ReflectInvoker(mounttable.NewServerGlobbable(impl.NewLogDirectoryInvoker(d.root, suffix)))
- return invoker, nil, nil
+ return impl.NewLogDirectoryInvoker(d.root, suffix), nil, nil
}
func TestLogDirectory(t *testing.T) {
diff --git a/services/mgmt/logreader/impl/logfile_invoker.go b/services/mgmt/logreader/impl/logfile_invoker.go
index a6820ea..951458d 100644
--- a/services/mgmt/logreader/impl/logfile_invoker.go
+++ b/services/mgmt/logreader/impl/logfile_invoker.go
@@ -7,7 +7,6 @@
"path"
"veyron2/ipc"
- "veyron2/services/mgmt/logreader"
"veyron2/services/mgmt/logreader/types"
"veyron2/vlog"
)
@@ -22,15 +21,12 @@
}
// NewLogFileInvoker is the invoker factory.
-func NewLogFileInvoker(root, suffix string) *logFileInvoker {
- return &logFileInvoker{
- root: path.Clean(root),
- suffix: suffix,
- }
+func NewLogFileInvoker(root, suffix string) ipc.Invoker {
+ return ipc.ReflectInvoker(&logFileInvoker{path.Clean(root), suffix})
}
// Size returns the size of the log file, in bytes.
-func (i *logFileInvoker) Size(context ipc.ServerContext) (int64, error) {
+func (i *logFileInvoker) Size(call ipc.ServerCall) (int64, error) {
vlog.VI(1).Infof("%v.Size()", i.suffix)
fname, err := translateNameToFilename(i.root, i.suffix)
if err != nil {
@@ -51,7 +47,7 @@
}
// ReadLog returns log entries from the log file.
-func (i *logFileInvoker) ReadLog(context ipc.ServerContext, startpos int64, numEntries int32, follow bool, stream logreader.LogFileServiceReadLogStream) (int64, error) {
+func (i *logFileInvoker) ReadLog(call ipc.ServerCall, startpos int64, numEntries int32, follow bool) (int64, error) {
vlog.VI(1).Infof("%v.ReadLog(%v, %v, %v)", i.suffix, startpos, numEntries, follow)
fname, err := translateNameToFilename(i.root, i.suffix)
if err != nil {
@@ -64,11 +60,10 @@
}
return 0, errOperationFailed
}
- reader := newFollowReader(context, f, startpos, follow)
+ reader := newFollowReader(call, f, startpos, follow)
if numEntries == types.AllEntries {
numEntries = int32(math.MaxInt32)
}
- sender := stream.SendStream()
for n := int32(0); n < numEntries; n++ {
line, offset, err := reader.readLine()
if err == io.EOF && n > 0 {
@@ -80,7 +75,7 @@
if err != nil {
return reader.tell(), errOperationFailed
}
- if err := sender.Send(types.LogEntry{Position: offset, Line: line}); err != nil {
+ if err := call.Send(types.LogEntry{Position: offset, Line: line}); err != nil {
return reader.tell(), err
}
}
diff --git a/services/mgmt/logreader/impl/logfile_invoker_test.go b/services/mgmt/logreader/impl/logfile_invoker_test.go
index 8980595..a2c3399 100644
--- a/services/mgmt/logreader/impl/logfile_invoker_test.go
+++ b/services/mgmt/logreader/impl/logfile_invoker_test.go
@@ -22,8 +22,7 @@
}
func (d *logFileDispatcher) Lookup(suffix, _ string) (ipc.Invoker, security.Authorizer, error) {
- invoker := ipc.ReflectInvoker(logreader.NewServerLogFile(impl.NewLogFileInvoker(d.root, suffix)))
- return invoker, nil, nil
+ return impl.NewLogFileInvoker(d.root, suffix), nil, nil
}
func writeAndSync(t *testing.T, w *os.File, s string) {
diff --git a/services/mgmt/logreader/impl/reader.go b/services/mgmt/logreader/impl/reader.go
index 7db874f..29c8698 100644
--- a/services/mgmt/logreader/impl/reader.go
+++ b/services/mgmt/logreader/impl/reader.go
@@ -14,7 +14,7 @@
// - it aborts when the parent RPC is canceled.
type followReader struct {
reader io.ReadSeeker
- ctx ipc.ServerContext
+ call ipc.ServerCall
offset int64
follow bool
err error
@@ -22,11 +22,11 @@
}
// newFollowReader is the factory for followReader.
-func newFollowReader(ctx ipc.ServerContext, reader io.ReadSeeker, startpos int64, follow bool) *followReader {
+func newFollowReader(call ipc.ServerCall, reader io.ReadSeeker, startpos int64, follow bool) *followReader {
_, err := reader.Seek(startpos, 0)
return &followReader{
reader: reader,
- ctx: ctx,
+ call: call,
offset: startpos,
follow: follow,
err: err,
@@ -43,9 +43,9 @@
return 0, f.err
}
for {
- if f.ctx != nil {
+ if f.call != nil {
select {
- case <-f.ctx.Done():
+ case <-f.call.Done():
return 0, errCanceled
default:
}