Changeset 44446d7


Ignore:
Timestamp:
Jan 1, 2009 1:54:42 PM (12 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
ef99834
Parents:
a616a5f
Message:

convert db to concurrent

File:
1 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java

    ra616a5f r44446d7  
    1010
    1111import java.util.Date;
     12import java.util.concurrent.ConcurrentHashMap;
    1213import java.util.HashMap;
    1314import java.util.HashSet;
     
    2627class TransientDataStore implements DataStore {
    2728    private Log _log;
    28     private Map _data; // hash --> DataStructure
     29    private Map<Hash, DataStructure> _data;
    2930    protected RouterContext _context;
    3031   
     
    3233        _context = ctx;
    3334        _log = ctx.logManager().getLog(TransientDataStore.class);
    34         _data = new HashMap(1024);
     35        _data = new ConcurrentHashMap(1024);
    3536        if (_log.shouldLog(Log.INFO))
    3637            _log.info("Data Store initialized");
     
    3839   
    3940    public void restart() {
    40         synchronized (_data) {
    41             _data.clear();
    42         }
     41        _data.clear();
    4342    }
    4443   
    4544    public Set getKeys() {
    46         synchronized (_data) {
    47             return new HashSet(_data.keySet());
    48         }
     45        return new HashSet(_data.keySet());
    4946    }
    5047   
    5148    public DataStructure get(Hash key) {
    52         synchronized (_data) {
    53             return (DataStructure)_data.get(key);
    54         }
     49        return _data.get(key);
    5550    }
    5651   
    5752    public boolean isKnown(Hash key) {
    58         synchronized (_data) {
    59             return _data.containsKey(key);
    60         }
     53        return _data.containsKey(key);
    6154    }
    6255
    6356    public int countLeaseSets() {
    6457        int count = 0;
    65         synchronized (_data) {
    66             for (Iterator iter = _data.values().iterator(); iter.hasNext();) {
    67                 DataStructure data = (DataStructure)iter.next();
    68                 if (data instanceof LeaseSet)
    69                     count++;
    70             }
     58        for (DataStructure d : _data.values()) {
     59            if (d instanceof LeaseSet)
     60                count++;
    7161        }
    7262        return count;
     
    8272        if (_log.shouldLog(Log.DEBUG))
    8373            _log.debug("Storing key " + key);
    84         Object old = null;
    85         synchronized (_data) {
    86             old = _data.put(key, data);
    87         }
     74        DataStructure old = null;
     75        old = _data.put(key, data);
    8876        if (data instanceof RouterInfo) {
    8977            _context.profileManager().heardAbout(key);
     
    9684                    if (_log.shouldLog(Log.DEBUG))
    9785                        _log.debug("Number of router options for " + key + ": " + ri.getOptions().size() + " (old one had: " + ori.getOptions().size() + ")", new Exception("Updated routerInfo"));
    98                     synchronized (_data) {
    99                         _data.put(key, old);
    100                     }
     86                    _data.put(key, old);
    10187                } else if (ri.getPublished() > _context.clock().now() + MAX_FUTURE_PUBLISH_DATE) {
    10288                    if (_log.shouldLog(Log.INFO))
     
    10490                    if (_log.shouldLog(Log.DEBUG))
    10591                        _log.debug("Number of router options for " + key + ": " + ri.getOptions().size() + " (old one had: " + ori.getOptions().size() + ")", new Exception("Updated routerInfo"));
    106                     synchronized (_data) {
    107                         _data.put(key, old);
    108                     }
     92                    _data.put(key, old);
    10993                } else {
    11094                    if (_log.shouldLog(Log.INFO))
     
    126110                    if (_log.shouldLog(Log.INFO))
    127111                        _log.info("Almost clobbered an old leaseSet! " + key + ": [old published on " + new Date(ols.getEarliestLeaseDate()) + " new on " + new Date(ls.getEarliestLeaseDate()) + "]");
    128                     synchronized (_data) {
    129                         _data.put(key, old);
    130                     }
     112                    _data.put(key, old);
    131113                } else if (ls.getEarliestLeaseDate() > _context.clock().now() + MAX_FUTURE_EXPIRATION_DATE) {
    132114                    if (_log.shouldLog(Log.INFO))
    133115                        _log.info("Hmm, someone tried to give us something with the expiration date really far in the future (" + new Date(ls.getEarliestLeaseDate()) + "), dropping it");
    134                     synchronized (_data) {
    135                         _data.put(key, old);
    136                     }
     116                    _data.put(key, old);
    137117                }
    138118            }
     
    151131        StringBuffer buf = new StringBuffer();
    152132        buf.append("Transient DataStore: ").append(_data.size()).append("\nKeys: ");
    153         Map data = new HashMap();
    154         synchronized (_data) {
    155             data.putAll(_data);
    156         }
    157         for (Iterator iter = data.keySet().iterator(); iter.hasNext();) {
    158             Hash key = (Hash)iter.next();
    159             DataStructure dp = (DataStructure)data.get(key);
     133        for (Map.Entry<Hash, DataStructure> e : _data.entrySet()) {
     134            Hash key = e.getKey();
     135            DataStructure dp = e.getValue();
    160136            buf.append("\n\t*Key:   ").append(key.toString()).append("\n\tContent: ").append(dp.toString());
    161137        }
     
    169145
    170146    public DataStructure remove(Hash key) {
    171         synchronized (_data) {
    172             if (_log.shouldLog(Log.DEBUG))
    173                 _log.debug("Removing key " + key.toBase64());
    174             return (DataStructure)_data.remove(key);
    175         }
     147        if (_log.shouldLog(Log.DEBUG))
     148            _log.debug("Removing key " + key.toBase64());
     149        return _data.remove(key);
    176150    }
    177151}
Note: See TracChangeset for help on using the changeset viewer.