public List<String> getStoreRestoreFactories(String storeName) {
    List<String> storeRestoreManagers;
    if (containsKey(String.format(STORE_RESTORE_FACTORIES, storeName))) {
      storeRestoreManagers = getList(String.format(STORE_RESTORE_FACTORIES, storeName), new ArrayList<>());
    } else {
      storeRestoreManagers = getJobStoreRestoreFactories();
      // for backwards compatibility if changelog is enabled, we use default Kafka backup factory
      if (storeRestoreManagers.isEmpty() && getChangelogStream(storeName).isPresent()) {
        storeRestoreManagers = DEFAULT_RESTORE_FACTORIES;
      }
    }
    return storeRestoreManagers;
  }
Restore state backend factory follows the precedence:

1. If stores.store-name.restore.factories config key exists for the store-name, that value is used
2. If stores.restore.factories is set for the job, that value is used
3. If stores.store-name.changelog is set for store-name, the default Kafka changelog state backend factory
4. Otherwise no restore factories will be configured for the store

Note that 2 takes precedence over 3 enables job based migration off of Changelog restores
@return List of restore factories for the store in order of restoration precedence
samza-core/src/main/java/org/apache/samza/config/StorageConfig.java