func createCache() ybc.Cacher { config := ybc.Config{ MaxItemsCount: ybc.SizeT(*maxItemsCount), DataFileSize: ybc.SizeT(*cacheSize) * ybc.SizeT(1024*1024), } var err error var cache ybc.Cacher cacheFilesPath_ := strings.Split(*cacheFilesPath, ",") cacheFilesCount := len(cacheFilesPath_) logMessage("Opening data files. This can take a while for the first time if files are big") if cacheFilesCount < 2 { if cacheFilesPath_[0] != "" { config.DataFile = cacheFilesPath_[0] + ".cdn-booster.data" config.IndexFile = cacheFilesPath_[0] + ".cdn-booster.index" } cache, err = config.OpenCache(true) if err != nil { logFatal("Cannot open cache: [%s]", err) } } else if cacheFilesCount > 1 { config.MaxItemsCount /= ybc.SizeT(cacheFilesCount) config.DataFileSize /= ybc.SizeT(cacheFilesCount) var configs ybc.ClusterConfig configs = make([]*ybc.Config, cacheFilesCount) for i := 0; i < cacheFilesCount; i++ { cfg := config cfg.DataFile = cacheFilesPath_[i] + ".cdn-booster.data" cfg.IndexFile = cacheFilesPath_[i] + ".cdn-booster.index" configs[i] = &cfg } cache, err = configs.OpenCluster(true) if err != nil { logFatal("Cannot open cache cluster: [%s]", err) } } logMessage("Data files have been opened") return cache }
func main() { iniflags.Parse() runtime.GOMAXPROCS(*goMaxProcs) syncInterval_ := *syncInterval if syncInterval_ <= 0 { syncInterval_ = ybc.ConfigDisableSync } config := ybc.Config{ MaxItemsCount: ybc.SizeT(*maxItemsCount), DataFileSize: ybc.SizeT(*cacheSize) * ybc.SizeT(1024*1024), HotItemsCount: ybc.SizeT(*hotItemsCount), HotDataSize: ybc.SizeT(*hotDataSize), DeHashtableSize: *deHashtableSize, SyncInterval: syncInterval_, } var cache ybc.Cacher var err error cacheFilesPath_ := strings.Split(*cacheFilesPath, ",") cacheFilesCount := len(cacheFilesPath_) log.Printf("Opening data files. This can take a while for the first time if files are big\n") if cacheFilesCount < 2 { if cacheFilesPath_[0] != "" { config.DataFile = cacheFilesPath_[0] + ".go-memcached.data" config.IndexFile = cacheFilesPath_[0] + ".go-memcached.index" } cache, err = config.OpenCache(true) if err != nil { log.Fatalf("Cannot open cache: [%s]", err) } } else if cacheFilesCount > 1 { config.MaxItemsCount /= ybc.SizeT(cacheFilesCount) config.DataFileSize /= ybc.SizeT(cacheFilesCount) var configs ybc.ClusterConfig configs = make([]*ybc.Config, cacheFilesCount) for i := 0; i < cacheFilesCount; i++ { cfg := config cfg.DataFile = cacheFilesPath_[i] + ".go-memcached.data" cfg.IndexFile = cacheFilesPath_[i] + ".go-memcached.index" configs[i] = &cfg } cache, err = configs.OpenCluster(true) if err != nil { log.Fatalf("Cannot open cache cluster: [%s]", err) } } defer cache.Close() log.Printf("Data files have been opened\n") s := memcache.Server{ Cache: cache, ListenAddr: *listenAddr, ReadBufferSize: *readBufferSize, WriteBufferSize: *writeBufferSize, OSReadBufferSize: *osReadBufferSize, OSWriteBufferSize: *osWriteBufferSize, } log.Printf("Starting the server") if err := s.Serve(); err != nil { log.Fatalf("Cannot serve traffic: [%s]", err) } }