code: func (s *Server) Open() error {
  	s.logger.Printf("open server")
  
  	// Log startup
  	err := s.holder.logStartup()
  	if err != nil {
  		log.Println(errors.Wrap(err, "logging startup"))
  	}
  
  	// Initialize id-key storage.
  	if err := s.holder.translateFile.Open(); err != nil {
  		return errors.Wrap(err, "opening TranslateFile")
  	}
  
  	// Open Cluster management.
  	if err := s.cluster.waitForStarted(); err != nil {
  		return errors.Wrap(err, "opening Cluster")
  	}
  
  	// Open holder.
  	if err := s.holder.Open(); err != nil {
  		return errors.Wrap(err, "opening Holder")
  	}
  	if err := s.cluster.setNodeState(nodeStateReady); err != nil {
  		return errors.Wrap(err, "setting nodeState")
  	}
  
  	// Listen for joining nodes.
  	// This needs to start after the Holder has opened so that nodes can join
  	// the cluster without waiting for data to load on the coordinator. Before
  	// this starts, the joins are queued up in the Cluster.joiningLeavingNodes
  	// buffered channel.
  	s.cluster.listenForJoins()
  
  	s.syncer.Holder = s.holder
  	s.syncer.Node = s.cluster.Node
  	s.syncer.Cluster = s.cluster
  	s.syncer.Closing = s.closing
  	s.syncer.Stats = s.holder.Stats.WithTags("HolderSyncer")
  
  	// Start background monitoring.
  	s.wg.Add(3)
  	go func() { defer s.wg.Done(); s.monitorAntiEntropy() }()
  	go func() { defer s.wg.Done(); s.monitorRuntime() }()
  	go func() { defer s.wg.Done(); s.monitorDiagnostics() }()
  
  	return nil
  }
docs: // Open opens and initializes the server.