code: func (bk *Backend) CreateVal(bucket []string, key string, val []byte, ttl time.Duration) error {
  	// Open the bucket to work on the items.
  	b, err := bk.openBucket(bk.flatten(bucket), os.O_CREATE|os.O_RDWR)
  	if err != nil {
  		return trace.Wrap(err)
  	}
  	defer b.Close()
  
  	// If the key exists and is not expired, return trace.AlreadyExists.
  	item, ok := b.getItem(key)
  	if ok && !bk.isExpired(item) {
  		return trace.AlreadyExists("key already exists")
  	}
  
  	// Otherwise, update the item in the bucket.
  	b.updateItem(key, val, ttl)
  
  	return nil
  }
docs: // CreateVal creates a key/value pair with the given TTL in the bucket. If
  // the key already exists in the bucket, trace.AlreadyExists is returned.