func()

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
}