code: func New(config Config) (*Cache, error) {
  	if err := config.CheckAndSetDefaults(); err != nil {
  		return nil, trace.Wrap(err)
  	}
  	wrapper := backend.NewWrapper(config.Backend)
  	ctx, cancel := context.WithCancel(config.Context)
  	cs := &Cache{
  		wrapper:            wrapper,
  		ctx:                ctx,
  		cancel:             cancel,
  		Config:             config,
  		trustCache:         local.NewCAService(wrapper),
  		clusterConfigCache: local.NewClusterConfigurationService(wrapper),
  		provisionerCache:   local.NewProvisioningService(wrapper),
  		usersCache:         local.NewIdentityService(wrapper),
  		accessCache:        local.NewAccessService(wrapper),
  		presenceCache:      local.NewPresenceService(wrapper),
  		eventsCache:        local.NewEventsService(config.Backend),
  		Entry: log.WithFields(log.Fields{
  			trace.Component: config.Component,
  		}),
  	}
  	collections, err := setupCollections(cs, config.Watches)
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  	cs.collections = collections
  
  	err = cs.fetch()
  	if err != nil {
  		// "only recent" behavior does not tolerate
  		// stale data, so it has to initialize itself
  		// with recent data on startup or fail
  		if cs.OnlyRecent.Enabled {
  			return nil, trace.Wrap(err)
  		}
  	}
  	go cs.update()
  	return cs, nil
  }
docs: // New creates a new instance of Cache