@Override protected Map<Schema,Map<Schema,ResolvingDecoder>> initialValue() { return new WeakIdentityHashMap<>(); } };
protected Map<Schema,Map<Schema,ResolvingDecoder>> initialValue() { return new WeakIdentityHashMap<Schema,Map<Schema,ResolvingDecoder>>(); } };
/** Gets a resolving decoder for use by this GenericDatumReader. * Unstable API. * Currently uses a thread local cache to prevent constructing the * resolvers too often, because that is very expensive. */ protected final ResolvingDecoder getResolver(Schema actual, Schema expected) throws IOException { Thread currThread = Thread.currentThread(); ResolvingDecoder resolver; if (currThread == creator && creatorResolver != null) { return creatorResolver; } Map<Schema,ResolvingDecoder> cache = RESOLVER_CACHE.get().get(actual); if (cache == null) { cache = new WeakIdentityHashMap<>(); RESOLVER_CACHE.get().put(actual, cache); } resolver = cache.get(expected); if (resolver == null) { resolver = DecoderFactory.get().resolvingDecoder( Schema.applyAliases(actual, expected), expected, null); cache.put(expected, resolver); } if (currThread == creator){ creatorResolver = resolver; } return resolver; }
/** Gets a resolving decoder for use by this GenericDatumReader. * Unstable API. * Currently uses a thread local cache to prevent constructing the * resolvers too often, because that is very expensive. */ protected final ResolvingDecoder getResolver(Schema actual, Schema expected) throws IOException { Thread currThread = Thread.currentThread(); ResolvingDecoder resolver; if (currThread == creator && creatorResolver != null) { return creatorResolver; } Map<Schema,ResolvingDecoder> cache = RESOLVER_CACHE.get().get(actual); if (cache == null) { cache = new WeakIdentityHashMap<Schema,ResolvingDecoder>(); RESOLVER_CACHE.get().put(actual, cache); } resolver = cache.get(expected); if (resolver == null) { resolver = DecoderFactory.get().resolvingDecoder( Schema.applyAliases(actual, expected), expected, null); cache.put(expected, resolver); } if (currThread == creator){ creatorResolver = resolver; } return resolver; }
protected Map<Schema,Map<Schema,ResolvingDecoder>> initialValue() { return new WeakIdentityHashMap<Schema,Map<Schema,ResolvingDecoder>>(); } };
protected Map<Schema,Map<Schema,ResolvingDecoder>> initialValue() { return new WeakIdentityHashMap<Schema,Map<Schema,ResolvingDecoder>>(); } };
protected Map<Schema,Map<Schema,ResolvingDecoder>> initialValue() { return new WeakIdentityHashMap<Schema,Map<Schema,ResolvingDecoder>>(); } };
private ResolvingDecoder getResolver(Schema actual, Schema expected) throws IOException { ResolvingDecoder resolver = threadResolver.get(); if (resolver != null) return resolver; Map<Schema,ResolvingDecoder> cache = RESOLVER_CACHE.get().get(actual); if (cache == null) { cache = new WeakIdentityHashMap<Schema,ResolvingDecoder>(); RESOLVER_CACHE.get().put(actual, cache); } resolver = cache.get(expected); if (resolver == null) { resolver = new ResolvingDecoder(Schema.applyAliases(actual, expected), expected, null); cache.put(expected, resolver); } threadResolver.set(resolver); return resolver; }
/** Gets a resolving decoder for use by this GenericDatumReader. * Unstable API. * Currently uses a thread local cache to prevent constructing the * resolvers too often, because that is very expensive. */ protected final ResolvingDecoder getResolver(Schema actual, Schema expected) throws IOException { Thread currThread = Thread.currentThread(); ResolvingDecoder resolver; if (currThread == creator && creatorResolver != null) { return creatorResolver; } Map<Schema,ResolvingDecoder> cache = RESOLVER_CACHE.get().get(actual); if (cache == null) { cache = new WeakIdentityHashMap<Schema,ResolvingDecoder>(); RESOLVER_CACHE.get().put(actual, cache); } resolver = cache.get(expected); if (resolver == null) { resolver = DecoderFactory.get().resolvingDecoder( Schema.applyAliases(actual, expected), expected, null); cache.put(expected, resolver); } if (currThread == creator){ creatorResolver = resolver; } return resolver; }
/** Gets a resolving decoder for use by this GenericDatumReader. * Unstable API. * Currently uses a thread local cache to prevent constructing the * resolvers too often, because that is very expensive. */ protected final ResolvingDecoder getResolver(Schema actual, Schema expected) throws IOException { Thread currThread = Thread.currentThread(); ResolvingDecoder resolver; if (currThread == creator && creatorResolver != null) { return creatorResolver; } Map<Schema,ResolvingDecoder> cache = RESOLVER_CACHE.get().get(actual); if (cache == null) { cache = new WeakIdentityHashMap<Schema,ResolvingDecoder>(); RESOLVER_CACHE.get().put(actual, cache); } resolver = cache.get(expected); if (resolver == null) { resolver = DecoderFactory.get().resolvingDecoder( Schema.applyAliases(actual, expected), expected, null); cache.put(expected, resolver); } if (currThread == creator){ creatorResolver = resolver; } return resolver; }