@cryptotaxi247 / kubo / commits / 13de031b4

code cleanup and better naming of methods

Jeromy committed Mar 18, 2015 at 21:48 UTC 13de031b442f6699bafad49d330e05f3004b4ce1
5 files changed +103 -43
fuse/ipns/ipns_test.go
+27 -10
@@ -74,13 +74,23 @@ func verifyFile(t *testing.T, path string, data []byte) {
74 }
75 defer fi.Close()
76
77 - out, err := ioutil.ReadAll(fi)
78 - if err != nil {
79 - t.Fatal(err)
80 - }
77 + buf := make([]byte, 1024)
78 + offset := 0
79 + for {
80 + n, err := fi.Read(buf)
81 + if err != nil {
82 + t.Fatal(err)
83 + }
84 +
85 + if !bytes.Equal(buf[:n], data[offset:offset+n]) {
86 + t.Fatal("Data not equal")
87 + }
88
82 - if !bytes.Equal(out, data) {
83 - t.Fatal("Data not equal")
89 + if n < len(buf) {
90 + break
91 + }
92 +
93 + offset += n
94 }
95 }
96
@@ -130,16 +140,23 @@ func setupIpnsTest(t *testing.T, node *core.IpfsNode) (*core.IpfsNode, *fstest.M
140 }
141
142 func TestIpnsLocalLink(t *testing.T) {
133 - _, mnt := setupIpnsTest(t, nil)
143 + nd, mnt := setupIpnsTest(t, nil)
144 defer mnt.Close()
145 name := mnt.Dir + "/local"
146
137 - finfo, err := os.Stat(name)
147 + _, err := os.Stat(name)
148 + if err != nil {
149 + t.Fatal(err)
150 + }
151 +
152 + linksto, err := os.Readlink(name)
153 if err != nil {
154 t.Fatal(err)
155 }
156
142 - t.Log(finfo.Name())
157 + if linksto != nd.Identity.Pretty() {
158 + t.Fatal("Link invalid")
159 + }
160 }
161
162 // Test writing a file and reading it back
@@ -189,7 +206,7 @@ func TestFilePersistence(t *testing.T) {
206 }
207 }
208
192 -func TestDeeperDirs(t *testing.T) {
209 +func TestMultipleDirs(t *testing.T) {
210 node, mnt := setupIpnsTest(t, nil)
211
212 t.Log("make a top level dir")
fuse/ipns/ipns_unix.go
+63 -20
@@ -239,7 +239,9 @@ func (s *Directory) Lookup(ctx context.Context, name string) (fs.Node, error) {
239 case *nsfs.File:
240 return &File{fi: child}, nil
241 default:
242 - panic("system has proven to be insane")
242 + // NB: if this happens, we do not want to continue, unpredictable behaviour
243 + // may occur.
244 + panic("invalid type found under directory. programmer error.")
245 }
246 }
247
@@ -272,42 +274,83 @@ func (dir *Directory) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
274 }
275
276 func (fi *File) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error {
275 - _, err := fi.fi.Seek(req.Offset, os.SEEK_SET)
276 - if err != nil {
277 - return err
278 - }
277 + errs := make(chan error, 1)
278 + go func() {
279 + _, err := fi.fi.Seek(req.Offset, os.SEEK_SET)
280 + if err != nil {
281 + errs <- err
282 + return
283 + }
284
280 - fisize, err := fi.fi.Size()
281 - if err != nil {
285 + fisize, err := fi.fi.Size()
286 + if err != nil {
287 + errs <- err
288 + return
289 + }
290 +
291 + readsize := min(req.Size, int(fisize-req.Offset))
292 + n, err := io.ReadFull(fi.fi, resp.Data[:readsize])
293 + resp.Data = resp.Data[:n]
294 + errs <- err
295 + }()
296 +
297 + select {
298 + case <-ctx.Done():
299 + return ctx.Err()
300 + case err := <-errs:
301 return err
302 }
284 -
285 - readsize := min(req.Size, int(fisize-req.Offset))
286 - n, err := io.ReadFull(fi.fi, resp.Data[:readsize])
287 - resp.Data = resp.Data[:n]
288 - return err // may be non-nil / not succeeded
303 }
304
305 func (fi *File) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) error {
292 - wrote, err := fi.fi.WriteAt(req.Data, req.Offset)
293 - if err != nil {
306 + errs := make(chan error, 1)
307 + go func() {
308 + wrote, err := fi.fi.WriteAt(req.Data, req.Offset)
309 + if err != nil {
310 + errs <- err
311 + }
312 + resp.Size = wrote
313 + errs <- nil
314 + }()
315 +
316 + select {
317 + case err := <-errs:
318 return err
319 + case <-ctx.Done():
320 + return ctx.Err()
321 }
296 - resp.Size = wrote
297 -
298 - return nil
322 }
323
324 func (fi *File) Flush(ctx context.Context, req *fuse.FlushRequest) error {
302 - return fi.fi.Close()
325 + errs := make(chan error, 1)
326 + go func() {
327 + errs <- fi.fi.Close()
328 + }()
329 + select {
330 + case err := <-errs:
331 + return err
332 + case <-ctx.Done():
333 + return ctx.Err()
334 + }
335 }
336
337 +// Fsync flushes the content in the file to disk, but does not
338 +// update the dag tree internally
339 func (fi *File) Fsync(ctx context.Context, req *fuse.FsyncRequest) error {
306 - return fi.fi.Flush()
340 + errs := make(chan error, 1)
341 + go func() {
342 + errs <- fi.fi.Sync()
343 + }()
344 + select {
345 + case err := <-errs:
346 + return err
347 + case <-ctx.Done():
348 + return ctx.Err()
349 + }
350 }
351
352 func (fi *File) Forget() {
310 - err := fi.fi.Flush()
353 + err := fi.fi.Sync()
354 if err != nil {
355 log.Debug("Forget file error: ", err)
356 }
ipnsfs/file.go
+4 -4
@@ -57,7 +57,7 @@ func (fi *File) Close() error {
57 fi.Lock()
58 defer fi.Unlock()
59 if fi.hasChanges {
60 - err := fi.mod.Flush()
60 + err := fi.mod.Sync()
61 if err != nil {
62 return err
63 }
@@ -80,11 +80,11 @@ func (fi *File) Close() error {
80 return nil
81 }
82
83 -// Flush flushes the changes in the file to disk
84 -func (fi *File) Flush() error {
83 +// Sync flushes the changes in the file to disk
84 +func (fi *File) Sync() error {
85 fi.Lock()
86 defer fi.Unlock()
87 - return fi.mod.Flush()
87 + return fi.mod.Sync()
88 }
89
90 // Seek implements io.Seeker
unixfs/mod/dagmodifier.go
+8 -8
@@ -80,7 +80,7 @@ func (dm *DagModifier) WriteAt(b []byte, offset int64) (int, error) {
80 }
81 }
82
83 - err = dm.Flush()
83 + err = dm.Sync()
84 if err != nil {
85 return 0, err
86 }
@@ -133,7 +133,7 @@ func (dm *DagModifier) Write(b []byte) (int, error) {
133 }
134 dm.curWrOff += uint64(n)
135 if dm.wrBuf.Len() > writebufferSize {
136 - err := dm.Flush()
136 + err := dm.Sync()
137 if err != nil {
138 return n, err
139 }
@@ -156,8 +156,8 @@ func (dm *DagModifier) Size() (int64, error) {
156 return int64(pbn.GetFilesize()), nil
157 }
158
159 -// Flush writes changes to this dag to disk
160 -func (dm *DagModifier) Flush() error {
159 +// Sync writes changes to this dag to disk
160 +func (dm *DagModifier) Sync() error {
161 // No buffer? Nothing to do
162 if dm.wrBuf == nil {
163 return nil
@@ -315,7 +315,7 @@ func (dm *DagModifier) appendData(node *mdag.Node, blks <-chan []byte) (*mdag.No
315
316 // Read data from this dag starting at the current offset
317 func (dm *DagModifier) Read(b []byte) (int, error) {
318 - err := dm.Flush()
318 + err := dm.Sync()
319 if err != nil {
320 return 0, err
321 }
@@ -347,7 +347,7 @@ func (dm *DagModifier) Read(b []byte) (int, error) {
347
348 // GetNode gets the modified DAG Node
349 func (dm *DagModifier) GetNode() (*mdag.Node, error) {
350 - err := dm.Flush()
350 + err := dm.Sync()
351 if err != nil {
352 return nil, err
353 }
@@ -360,7 +360,7 @@ func (dm *DagModifier) HasChanges() bool {
360 }
361
362 func (dm *DagModifier) Seek(offset int64, whence int) (int64, error) {
363 - err := dm.Flush()
363 + err := dm.Sync()
364 if err != nil {
365 return 0, err
366 }
@@ -389,7 +389,7 @@ func (dm *DagModifier) Seek(offset int64, whence int) (int64, error) {
389 }
390
391 func (dm *DagModifier) Truncate(size int64) error {
392 - err := dm.Flush()
392 + err := dm.Sync()
393 if err != nil {
394 return err
395 }
unixfs/mod/dagmodifier_test.go
+1 -1
@@ -246,7 +246,7 @@ func TestMultiWriteAndFlush(t *testing.T) {
246 if n != 1 {
247 t.Fatal("Somehow wrote the wrong number of bytes! (n != 1)")
248 }
249 - err = dagmod.Flush()
249 + err = dagmod.Sync()
250 if err != nil {
251 t.Fatal(err)
252 }