func init() { if !util.Exist(sitemapPath) { err := os.MkdirAll(sitemapPath, 0777) if err != nil { panic(err) } } }
func openDB(dbpath string, create bool) (pbdb *LevelDb, err error) { var db LevelDb var tlDb *leveldb.DB var dbversion int32 defer func() { if err == nil { db.lDb = tlDb pbdb = &db } }() if create == true { if !util.Exist(dbpath) { err = os.Mkdir(dbpath, 0750) if err != nil { logger.Errorf("mkdir failed %v %v", dbpath, err) os.Exit(-1) } } } else { _, err = os.Stat(dbpath) if err != nil { err = DbDoesNotExist return } } needVersionFile := false verfile := dbpath + ".ver" fi, ferr := os.Open(verfile) if ferr == nil { defer fi.Close() ferr = binary.Read(fi, binary.LittleEndian, &dbversion) if ferr != nil { dbversion = ^0 } } else { if create == true { needVersionFile = true dbversion = CurrentDBVersion } } myCache := cache.NewEmptyCache() opts := &opt.Options{ BlockCache: myCache, MaxOpenFiles: 256, Compression: opt.NoCompression, } switch dbversion { case 0: opts = &opt.Options{} case 1: // uses defaults from above default: err = fmt.Errorf("unsupported db version %v", dbversion) return } tlDb, err = leveldb.OpenFile(dbpath, opts) if err != nil { return } // If we opened the database successfully on 'create' // update the if needVersionFile { fo, ferr := os.Create(verfile) if ferr != nil { // TODO(design) close and delete database? err = ferr return } defer fo.Close() err = binary.Write(fo, binary.LittleEndian, dbversion) if err != nil { return } } return }