in component/block_cache/stream.go [77:122]
func (st *Stream) Configure(_ bool) error {
log.Trace("Stream::Configure : %s", st.Name())
conf := StreamOptions{}
err := config.UnmarshalKey(compStream, &conf)
if err != nil {
log.Err("Stream::Configure : config error [invalid config attributes]")
return fmt.Errorf("config error in %s [%s]", st.Name(), err.Error())
}
err = config.UnmarshalKey("read-only", &conf.readOnly)
if err != nil {
log.Err("Stream::Configure : config error [unable to obtain read-only]")
return fmt.Errorf("config error in %s [%s]", st.Name(), err.Error())
}
if config.IsSet(compStream + ".max-blocks-per-file") {
conf.BufferSize = conf.BlockSize * uint64(conf.MaxBlocksPerFile)
}
if config.IsSet(compStream+".stream-cache-mb") && conf.BufferSize > 0 {
conf.CachedObjLimit = conf.StreamCacheMb / conf.BufferSize
if conf.CachedObjLimit == 0 {
conf.CachedObjLimit = 1
}
}
if uint64((conf.BufferSize*conf.CachedObjLimit)*mb) > memory.FreeMemory() {
log.Err("Stream::Configure : config error, not enough free memory for provided configuration")
return errors.New("not enough free memory for provided stream configuration")
}
log.Info("Stream to Block Cache::Configure : Buffer size %v, Block size %v, Handle limit %v, FileCaching %v, Read-only %v, StreamCacheMb %v, MaxBlocksPerFile %v",
conf.BufferSize, conf.BlockSize, conf.CachedObjLimit, conf.FileCaching, conf.readOnly, conf.StreamCacheMb, conf.MaxBlocksPerFile)
if conf.BlockSize > 0 {
config.Set(compName+".block-size-mb", fmt.Sprint(conf.BlockSize))
}
if conf.MaxBlocksPerFile > 0 {
config.Set(compName+".prefetch", fmt.Sprint(conf.MaxBlocksPerFile))
}
if conf.BufferSize*conf.CachedObjLimit > 0 {
config.Set(compName+".mem-size-mb", fmt.Sprint(conf.BufferSize*conf.CachedObjLimit))
}
return nil
}