Changeset 32efa2e for core


Ignore:
Timestamp:
Jun 15, 2017 3:48:22 PM (3 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
e21479a
Parents:
8216b68
Message:

DNS (ticket #1998):

  • Data: Cache hostname lookups in RouterAddress?
  • Job Queue: Make search jobs droppable
  • Router: Increase JVM DNS cache time
  • Util: Add negative DNS lookup cache, increase cache size
File:
1 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/util/Addresses.java

    r8216b68 r32efa2e  
    294294     */
    295295    private static final Map<String, byte[]> _IPAddress;
     296    private static final Map<String, Long> _negativeCache;
     297    private static final long NEG_CACHE_TIME = 60*60*1000L;
    296298
    297299    static {
     
    302304            long min = 256;
    303305            long max = 4096;
    304             // 1024 nominal for 128 MB
    305             size = (int) Math.max(min, Math.min(max, 1 + (maxMemory / (128*1024))));
     306            // 2048 nominal for 128 MB
     307            size = (int) Math.max(min, Math.min(max, 1 + (maxMemory / (64*1024))));
    306308        } else {
    307309            size = 32;
    308310        }
    309311        _IPAddress = new LHMCache<String, byte[]>(size);
     312        _negativeCache = new LHMCache<String, Long>(128);
    310313    }
    311314
     
    330333        }
    331334        if (rv == null) {
     335            synchronized(_negativeCache) {
     336                Long when = _negativeCache.get(host);
     337                if (when != null) {
     338                    if (when.longValue() > System.currentTimeMillis() - NEG_CACHE_TIME)
     339                        return null;
     340                    _negativeCache.remove(host);
     341                }
     342            }
    332343            try {
    333344                rv = InetAddress.getByName(host).getAddress();
     
    338349                    }
    339350                }
    340             } catch (UnknownHostException uhe) {}
     351                // else we do not cache hostnames here, we rely on the JVM
     352            } catch (UnknownHostException uhe) {
     353                synchronized(_negativeCache) {
     354                    _negativeCache.put(host, Long.valueOf(System.currentTimeMillis()));
     355                }
     356            }
    341357        }
    342358        return rv;
     
    358374        if (InetAddressUtils.isIPv4Address(host) || InetAddressUtils.isIPv6Address(host))
    359375            return getIP(host);
     376        synchronized(_negativeCache) {
     377            Long when = _negativeCache.get(host);
     378            if (when != null) {
     379                if (when.longValue() > System.currentTimeMillis() - NEG_CACHE_TIME)
     380                    return null;
     381                _negativeCache.remove(host);
     382            }
     383        }
    360384        byte[] rv = null;
    361385        try {
     
    373397                }
    374398            }
    375         } catch (UnknownHostException uhe) {}
     399        } catch (UnknownHostException uhe) {
     400            synchronized(_negativeCache) {
     401                _negativeCache.put(host, Long.valueOf(System.currentTimeMillis()));
     402            }
     403        }
    376404        return rv;
    377405    }
     
    403431            return Collections.singletonList(brv);
    404432        }
     433        synchronized(_negativeCache) {
     434            Long when = _negativeCache.get(host);
     435            if (when != null) {
     436                if (when.longValue() > System.currentTimeMillis() - NEG_CACHE_TIME)
     437                    return null;
     438                _negativeCache.remove(host);
     439            }
     440        }
    405441        try {
    406442            InetAddress[] addrs = InetAddress.getAllByName(host);
     
    412448            }
    413449            return rv;
    414         } catch (UnknownHostException uhe) {}
     450        } catch (UnknownHostException uhe) {
     451            synchronized(_negativeCache) {
     452                _negativeCache.put(host, Long.valueOf(System.currentTimeMillis()));
     453            }
     454        }
    415455        return null;
    416456    }
     
    552592        synchronized(_IPAddress) {
    553593            _IPAddress.clear();
     594        }
     595        synchronized(_negativeCache) {
     596            _negativeCache.clear();
    554597        }
    555598        if (_ifCache != null) {
Note: See TracChangeset for help on using the changeset viewer.