apache/druid · error · IllegalArgumentException

Cannot load data from location

Error message

Cannot load data from location [%s]. Data pulling from [%s] not supported

What it means

Even when a finder exists for the URI scheme, cache generation requires a finder that implements URIDataPuller (i.e. actually supports pulling data). If the resolved finder cannot pull, generateCache() throws this IAE saying pulling from that scheme is not supported.

Solutions

  1. Use a URI scheme whose finder implements URIDataPuller (file, http, s3 with the lookups extension).
  2. If you implemented a custom finder, make it implement URIDataPuller or use it only for version detection.
  3. Check extension versions — an outdated extension may provide a non-pulling finder.

Example fix

// before
final URI uri = URI.create("custom://bucket/data"); // finder lacks URIDataPuller
// after
final URI uri = URI.create("https://bucket/data"); // supported puller
Defensive patterns

Strategy: type-guard

Validate before calling

SearchableVersionedDataFinder<URI> finder = pullers.get(URI.create(uri).getScheme());
boolean canPull = finder instanceof URIDataPuller;

Type guard

boolean supportsPulling(Object finder) { return finder instanceof URIDataPuller; }

Try / catch

try { scheduler.schedule(uriNamespace); } catch (IllegalArgumentException e) { if (e.getMessage().contains("Data pulling from")) { /* switch to a pulling scheme/extension */ } else { throw e; } }

Prevention

When it happens

Trigger: generateCache() casting the scheme-resolved SearchableVersionedDataFinder to URIDataPuller when the instance does not implement it — a finder registered for the scheme that is read-only/version-inspecting only.

Common situations: Custom or third-party URI finder registered for the scheme without URIDataPuller support; misconfiguration where a non-pulling finder shadows the expected one; using static-lookup mode with a URI that requires pulling.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/cd642adb6c8dfd4c. Report an issue: GitHub.

Appendix: source

Thrown at extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/UriCacheGenerator.java:86

  public String generateCache(
      final UriExtractionNamespace extractionNamespace,
      final CacheScheduler.EntryImpl<UriExtractionNamespace> entryId,
      @Nullable final String lastVersion,
      final CacheHandler cache
  ) throws Exception
  {
    final boolean doSearch = extractionNamespace.getUriPrefix() != null;
    final URI originalUri = doSearch ? extractionNamespace.getUriPrefix() : extractionNamespace.getUri();
    final SearchableVersionedDataFinder<URI> pullerRaw = pullers.get(originalUri.getScheme());
    if (pullerRaw == null) {
      throw new IAE(
          "Unknown loader type[%s].  Known types are %s",
          originalUri.getScheme(),
          pullers.keySet()
      );
    }
    if (!(pullerRaw instanceof URIDataPuller)) {
      throw new IAE(
          "Cannot load data from location [%s]. Data pulling from [%s] not supported",
          originalUri,
          originalUri.getScheme()
      );
    }
    final URIDataPuller puller = (URIDataPuller) pullerRaw;
    final URI uri;
    if (doSearch) {
      final Pattern versionRegex;

      if (extractionNamespace.getFileRegex() != null) {
        versionRegex = Pattern.compile(extractionNamespace.getFileRegex());
      } else {
        versionRegex = null;
      }
      uri = pullerRaw.getLatestVersion(
          extractionNamespace.getUriPrefix(),
          versionRegex

View on GitHub (pinned to 9b90983fd2)