code: func startCompactorOnce(c storagebackend.TransportConfig, interval time.Duration) (func(), error) {
  	lock.Lock()
  	defer lock.Unlock()
  
  	key := fmt.Sprintf("%v", c) // gives: {[server1 server2] keyFile certFile caFile}
  	if compactor, foundBefore := compactors[key]; !foundBefore || compactor.interval > interval {
  		compactorClient, err := newETCD3Client(c)
  		if err != nil {
  			return nil, err
  		}
  
  		if foundBefore {
  			// replace compactor
  			compactor.cancel()
  			compactor.client.Close()
  		} else {
  			// start new compactor
  			compactor = &runningCompactor{}
  			compactors[key] = compactor
  		}
  
  		ctx, cancel := context.WithCancel(context.Background())
  
  		compactor.interval = interval
  		compactor.cancel = cancel
  		compactor.client = compactorClient
  
  		etcd3.StartCompactor(ctx, compactorClient, interval)
  	}
  
  	compactors[key].refs++
  
  	return func() {
  		lock.Lock()
  		defer lock.Unlock()
  
  		compactor := compactors[key]
  		compactor.refs--
  		if compactor.refs == 0 {
  			compactor.cancel()
  			compactor.client.Close()
  			delete(compactors, key)
  		}
  	}, nil
  }
docs: // startCompactorOnce start one compactor per transport. If the interval get smaller on repeated calls, the
  // compactor is replaced. A destroy func is returned. If all destroy funcs with the same transport are called,
  // the compactor is stopped.