| 49 | } |
| 50 | |
| 51 | func (f *fileDB) newFile() error { |
| 52 | err := syscall.EEXIST |
| 53 | |
| 54 | for ; err == syscall.EEXIST; time.Sleep(time.Millisecond) { |
| 55 | name := fmt.Sprintf("%s/%s/%x.dat", f.root, util.FileBlockPath, time.Now().UnixNano()) |
| 56 | file, err := os.Create(name) |
| 57 | if err == nil { |
| 58 | f.master = &cacheFile{name: name, file: file, last: time.Now().Add(closeInterval)} |
| 59 | f.cache[name] = f.master |
| 60 | return nil |
| 61 | } |
| 62 | log.Debugf("create file %s error:%s", name, err) |
| 63 | } |
| 64 | |
| 65 | return err |
| 66 | } |
| 67 | |
| 68 | func (f *fileDB) close(name string) { |
| 69 | if c, ok := f.cache[name]; ok { |