docs: @Override
      protected void setup()  {
          // Delete any failed snapshot deletions on Windows - see CASSANDRA-9658
          if (FBUtilities.isWindows)
              WindowsFailedSnapshotTracker.deleteOldSnapshots();
  
          ThreadAwareSecurityManager.install();
  
          Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
              StorageMetrics.exceptions.inc();
              logger.error("Exception in thread {}", t, e);
              Tracing.trace("Exception in thread {}", t, e);
              for (Throwable e2 = e; e2 != null; e2 = e2.getCause())
              {
                  JVMStabilityInspector.inspectThrowable(e2);
  
                  if (e2 instanceof FSError)
                  {
                      if (e2 != e) // make sure FSError gets logged exactly once.
                          logger.error("Exception in thread {}", t, e2);
                      FileUtils.handleFSError((FSError) e2);
                  }
  
                  if (e2 instanceof CorruptSSTableException)
                  {
                      if (e2 != e)
                          logger.error("Exception in thread " + t, e2);
                      FileUtils.handleCorruptSSTable((CorruptSSTableException) e2);
                  }
              }
          });
  
          // Populate token metadata before flushing, for token-aware sstable partitioning (#6696)
          StorageService.instance.populateTokenMetadata();
  
          // load schema from disk
          Schema.instance.loadFromDisk();
  
          // clean up debris in the rest of the keyspaces
          for (String keyspaceName : Schema.instance.getKeyspaces())
          {
              // Skip system as we've already cleaned it
              if (keyspaceName.equals(SchemaConstants.SYSTEM_KEYSPACE_NAME))
                  continue;
  
              for (CFMetaData cfm : Schema.instance.getTablesAndViews(keyspaceName))
              {
                  try
                  {
                      ColumnFamilyStore.scrubDataDirectories(cfm);
                  }
                  catch (StartupException e)
                  {
                      exitOrFail(e.returnCode, e.getMessage(), e.getCause());
                  }
              }
          }
  
          Keyspace.setInitialized();
  
          // initialize keyspaces
          for (String keyspaceName : Schema.instance.getKeyspaces())
          {
              if (logger.isDebugEnabled())
                  logger.debug("opening keyspace {}", keyspaceName);
              // disable auto compaction until commit log replay ends
              for (ColumnFamilyStore cfs : Keyspace.open(keyspaceName).getColumnFamilyStores())
              {
                  for (ColumnFamilyStore store : cfs.concatWithIndexes())
                  {
                      store.disableAutoCompaction();
                  }
              }
          }
  
  
          try
          {
              loadRowAndKeyCacheAsync().get();
          }
          catch (Throwable t)
          {
              JVMStabilityInspector.inspectThrowable(t);
              logger.warn("Error loading key or row cache", t);
          }
  
          // replay the log if necessary
          try
          {
              CommitLog.instance.recoverSegmentsOnDisk();
          }
          catch (IOException e)
          {
              throw new RuntimeException(e);
          }
  
          // Re-populate token metadata after commit log recover (new peers might be loaded onto system keyspace #10293)
          StorageService.instance.populateTokenMetadata();
  
          // Disable auto compaction
          for (Keyspace keyspace : Keyspace.all())
          {
              for (ColumnFamilyStore cfs : keyspace.getColumnFamilyStores())
              {
                  for (final ColumnFamilyStore store : cfs.concatWithIndexes())
                  {
                      if (store.getCompactionStrategyManager().shouldBeEnabled())
                          store.disableAutoCompaction();
                  }
              }
          }
  
          SystemKeyspace.finishStartup();
  
          // start server internals
          StorageService.instance.registerDaemon(this);
          try
          {
              StorageService.instance.initServer();
          }
          catch (ConfigurationException e)
          {
              System.err.println(e.getMessage() + "\nFatal configuration error; unable to start server.  See log for stacktrace.");
              exitOrFail(1, "Fatal configuration error", e);
          }
  
          // Native transport
          nativeTransportService = new NativeTransportService();
  
          completeSetup();
      }