Changeset 1bd71ab


Ignore:
Timestamp:
Sep 1, 2011 11:59:20 PM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
30702e9
Parents:
d7a4e03
Message:

cache country codes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/transport/GeoIP.java

    rd7a4e03 r1bd71ab  
    4343    private final RouterContext _context;
    4444    private final Map<String, String> _codeToName;
     45    /** code to itself to prevent String proliferation */
     46    private final Map<String, String> _codeCache;
    4547    private final Map<Long, String> _IPToCountry;
    4648    private final Set<Long> _pendingSearch;
     
    5254        _context = context;
    5355        _log = context.logManager().getLog(GeoIP.class);
    54         _codeToName = new ConcurrentHashMap();
     56        _codeToName = new ConcurrentHashMap(256);
     57        _codeCache = new ConcurrentHashMap(256);
    5558        _IPToCountry = new ConcurrentHashMap();
    5659        _pendingSearch = new ConcurrentHashSet();
     
    161164                    }
    162165                    String[] s = line.split(",");
    163                     _codeToName.put(s[0].toLowerCase(), s[1]);
     166                    String lc = s[0].toLowerCase();
     167                    _codeToName.put(lc, s[1]);
     168                    _codeCache.put(lc, lc);
    164169                } catch (IndexOutOfBoundsException ioobe) {
    165170                }
     
    202207        File GeoFile = new File(_context.getBaseDir(), GEOIP_DIR_DEFAULT);
    203208        GeoFile = new File(GeoFile, GEOIP_FILE_DEFAULT);
    204         if (GeoFile == null || (!GeoFile.exists())) {
     209        if (!GeoFile.exists()) {
    205210            if (_log.shouldLog(Log.WARN))
    206211                _log.warn("GeoIP file not found: " + GeoFile.getAbsolutePath());
     
    227232                    }
    228233                    while (idx < search.length && search[idx].longValue() >= ip1 && search[idx].longValue() <= ip2) {
    229                         rv[idx++] = s[2].toLowerCase();
     234                        String lc = s[2].toLowerCase();
     235                        // replace the new string with the identical one from the cache
     236                        String cached = _codeCache.get(lc);
     237                        if (cached == null)
     238                            cached = lc;
     239                        rv[idx++] = cached;
    230240                    }
    231241                } catch (IndexOutOfBoundsException ioobe) {
     
    241251        }
    242252
    243         if (_log.shouldLog(Log.WARN)) {
    244             _log.warn("GeoIP processing finished, time: " + (_context.clock().now() - start));
     253        if (_log.shouldLog(Log.INFO)) {
     254            _log.info("GeoIP processing finished, time: " + (_context.clock().now() - start));
    245255        }
    246256        return rv;
     
    292302
    293303    /**
    294      * Get the country for an IP
    295      * @return lower-case code, generally two letters.
     304     * Get the country for an IP from the cache.
     305     * @return lower-case code, generally two letters, or null.
    296306     */
    297307    public String get(String ip) {
     
    307317    }
    308318
     319    /**
     320     * Get the country for an IP from the cache.
     321     * @return lower-case code, generally two letters, or null.
     322     */
    309323    public String get(byte ip[]) {
    310324        if (ip.length != 4)
     
    324338    }
    325339
     340    /**
     341     * Get the country for a country code
     342     * @param two-letter lower case code
     343     * @return untranslated name or null
     344     */
    326345    public String fullName(String code) {
    327346        return _codeToName.get(code);
Note: See TracChangeset for help on using the changeset viewer.