From d8eb08f9d9cf7918cd679a18a4a10b4ebe9c598a Mon Sep 17 00:00:00 2001 From: zakkor Date: Sun, 11 Sep 2022 10:03:00 +0300 Subject: [PATCH 1/4] Revert "Merge pull request #30 from seh-msft/rwalk_fix" This reverts commit 72aa6a6b1a664bf7fba53a428bce9f2d77175904, reversing changes made to 0320e6f6d7b1569ef749a76337347e36e2a72461. --- conn.go | 4 ---- go.mod | 5 ----- go.sum | 2 -- internal/qidpool/pool.go | 1 - request.go | 4 ++-- walk.go | 8 +------- 6 files changed, 3 insertions(+), 21 deletions(-) delete mode 100644 go.mod delete mode 100644 go.sum diff --git a/conn.go b/conn.go index bcbc21e..aa632ac 100644 --- a/conn.go +++ b/conn.go @@ -161,10 +161,6 @@ func (c *conn) qid(name string, qtype uint8) styxproto.Qid { return c.qidpool.Put(name, qtype) } -func (c *conn) getQid(name string, qtype uint8) (styxproto.Qid, bool) { - return c.qidpool.Get(name) -} - // All request contexts must have their cancel functions // called, to free up resources in the context. Returns false // if the tag is already cancelled diff --git a/go.mod b/go.mod deleted file mode 100644 index 7b14752..0000000 --- a/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module aqwari.net/net/styx - -go 1.16 - -require aqwari.net/retry v0.0.0-20180428204214-1281ce5d8df0 diff --git a/go.sum b/go.sum deleted file mode 100644 index 88e95d4..0000000 --- a/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -aqwari.net/retry v0.0.0-20180428204214-1281ce5d8df0 h1:BeD6U5TNwhMWxeydyi5xqpaNZx1MWl5QTcW4w7Mxf+Y= -aqwari.net/retry v0.0.0-20180428204214-1281ce5d8df0/go.mod h1:XSNyyoM+OSg3vRmROPrS1lEpV7q/I9J1HAKMMxdUkU4= diff --git a/internal/qidpool/pool.go b/internal/qidpool/pool.go index 84ef385..5489782 100644 --- a/internal/qidpool/pool.go +++ b/internal/qidpool/pool.go @@ -42,7 +42,6 @@ func (p *Pool) Put(name string, qtype uint8) styxproto.Qid { m[name] = qid } }) - p.m.Put(name, qid) return qid } diff --git a/request.go b/request.go index c7be0e9..d9aed12 100644 --- a/request.go +++ b/request.go @@ -1,10 +1,11 @@ package styx import ( - "context" "os" "path" + "context" + "aqwari.net/net/styx/internal/styxfile" "aqwari.net/net/styx/internal/sys" "aqwari.net/net/styx/styxproto" @@ -265,7 +266,6 @@ func (t Tcreate) Rcreate(rwc interface{}, err error) { } if dir, ok := rwc.(Directory); t.Mode.IsDir() && ok { - f = styxfile.NewDir(dir, path.Join(t.Path(), t.Name), t.session.conn.qidpool) } else { f, err = styxfile.New(rwc) diff --git a/walk.go b/walk.go index de66bf4..91c3a60 100644 --- a/walk.go +++ b/walk.go @@ -1,7 +1,6 @@ package styx import ( - "errors" "fmt" "os" "path" @@ -181,12 +180,7 @@ func (t Twalk) Rwalk(info os.FileInfo, err error) { var mode os.FileMode if err == nil { mode = info.Mode() - fqid, found := t.session.conn.getQid(t.Path(), styxfile.QidType(styxfile.Mode9P(mode))) - if !found { - err = errors.New("rwalk did not find file") - } else { - qid = fqid - } + qid = t.session.conn.qid(t.Path(), styxfile.QidType(styxfile.Mode9P(mode))) } t.walk.filled[t.index] = 1 elem := walkElem{qid: qid, index: t.index, err: err} From c13ee8213bc39127efdc65052293ce243e7a3fd8 Mon Sep 17 00:00:00 2001 From: zakkor Date: Sun, 11 Sep 2022 11:26:22 +0300 Subject: [PATCH 2/4] qidpool: Remove superfluous `threadsafe.Map.Put` call If the name already existed, then there's no need to Put it, otherwise it gets set inside the Do call, which also means there's no need to Put it. --- internal/qidpool/pool.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/qidpool/pool.go b/internal/qidpool/pool.go index 5489782..5cfbc19 100644 --- a/internal/qidpool/pool.go +++ b/internal/qidpool/pool.go @@ -42,7 +42,6 @@ func (p *Pool) Put(name string, qtype uint8) styxproto.Qid { m[name] = qid } }) - p.m.Put(name, qid) return qid } From 94e4c88d22d8558830e6cba4dfdb2dc12bfbe545 Mon Sep 17 00:00:00 2001 From: zakkor Date: Sun, 11 Sep 2022 11:26:45 +0300 Subject: [PATCH 3/4] go.mod init --- go.mod | 5 +++++ go.sum | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 go.mod create mode 100644 go.sum diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..05d4ff7 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module aqwari.net/net/styx + +go 1.19 + +require aqwari.net/retry v0.0.0-20180428204214-1281ce5d8df0 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..88e95d4 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +aqwari.net/retry v0.0.0-20180428204214-1281ce5d8df0 h1:BeD6U5TNwhMWxeydyi5xqpaNZx1MWl5QTcW4w7Mxf+Y= +aqwari.net/retry v0.0.0-20180428204214-1281ce5d8df0/go.mod h1:XSNyyoM+OSg3vRmROPrS1lEpV7q/I9J1HAKMMxdUkU4= From 069bcea3e84b96cc71f272475541ef48ea6d5c7c Mon Sep 17 00:00:00 2001 From: zakkor Date: Sun, 11 Sep 2022 11:28:06 +0300 Subject: [PATCH 4/4] Add test that verifies no Qid gets created after an unsuccessful Twalk --- server_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/server_test.go b/server_test.go index f88a461..cd3710b 100644 --- a/server_test.go +++ b/server_test.go @@ -488,6 +488,34 @@ func TestWalk(t *testing.T) { } } +func TestWalkNonexistent(t *testing.T) { + srv := testServer{test: t} + srv.callback = func(req, rsp styxproto.Msg) { + if _, ok := req.(styxproto.Twalk); ok { + if _, ok := rsp.(styxproto.Rerror); !ok { + t.Errorf("expected Rerror response to nonexistent Twalk, instead got: %T", rsp) + } + } + } + srv.handler = HandlerFunc(func(s *Session) { + for s.Next() { + switch req := s.Request().(type) { + case Twalk: + t.Logf("Twalk %s", req.Path()) + req.Rwalk(nil, errors.New("not found")) + // If the walk resulted in an error, then no Qid should have been created for this path + if _, ok := s.conn.qidpool.Get(req.Path()); ok { + t.Error("qid was created when it shouldn't have been") + } + } + } + }) + + srv.runMsg(func(enc *styxproto.Encoder) { + enc.Twalk(1, 0, 1, "nonexistent") + }) +} + func blankQid() styxproto.Qid { buf := make([]byte, styxproto.QidLen) qid, _, err := styxproto.NewQid(buf, 0, 0, 0)