code: func Open(path string, l log.Logger, r prometheus.Registerer, opts *Options) (*tsdb.DB, error) {
  	if opts.MinBlockDuration > opts.MaxBlockDuration {
  		opts.MaxBlockDuration = opts.MinBlockDuration
  	}
  	// Start with smallest block duration and create exponential buckets until the exceed the
  	// configured maximum block duration.
  	rngs := tsdb.ExponentialBlockRanges(int64(time.Duration(opts.MinBlockDuration).Seconds()*1000), 10, 3)
  
  	for i, v := range rngs {
  		if v > int64(time.Duration(opts.MaxBlockDuration).Seconds()*1000) {
  			rngs = rngs[:i]
  			break
  		}
  	}
  
  	db, err := tsdb.Open(path, l, r, &tsdb.Options{
  		WALSegmentSize:         int(opts.WALSegmentSize),
  		RetentionDuration:      uint64(time.Duration(opts.RetentionDuration).Seconds() * 1000),
  		MaxBytes:               int64(opts.MaxBytes),
  		BlockRanges:            rngs,
  		NoLockfile:             opts.NoLockfile,
  		AllowOverlappingBlocks: opts.AllowOverlappingBlocks,
  	})
  	if err != nil {
  		return nil, err
  	}
  	registerMetrics(db, r)
  
  	return db, nil
  }
docs: // Open returns a new storage backed by a TSDB database that is configured for Prometheus.