class CausalClusteringBackupStrategy extends LifecycleAdapter implements BackupStrategy {

    @Override
    public Fallible<BackupStageOutcome> performIncrementalBackup( DatabaseLayout databaseLayout, Config config,
                                                                  OptionalHostnamePort userProvidedAddress )
    {
        AdvertisedSocketAddress fromAddress = addressResolver.resolveCorrectCCAddress( config, userProvidedAddress );
        log.info( "Resolved address for catchup protocol is " + fromAddress );
        StoreId storeId;
        try
        {
            storeId = backupDelegator.fetchStoreId( fromAddress );
            log.info( "Remote store id is " + storeId );
        }
        catch ( StoreIdDownloadFailedException e )
        {
            return new Fallible<>( BackupStageOutcome.WRONG_PROTOCOL, e );
        }
        Optional<StoreId> expectedStoreId = readLocalStoreId( databaseLayout );
        if ( !expectedStoreId.isPresent() || !expectedStoreId.get().equals( storeId ) )
        {
            return new Fallible<>( BackupStageOutcome.FAILURE,
                    new StoreIdDownloadFailedException( format( "Remote store id was %s but local is %s", storeId, expectedStoreId ) ) );
        }
        return catchup( fromAddress, storeId, databaseLayout );
    }

      CausalClusteringBackupStrategy( BackupDelegator backupDelegator, AddressResolver addressResolver, LogProvider logProvider, StoreFiles storeFiles );

}