removed sqlite addrs.dat, replacing it with a text file per network. should be much...
authorForrest Voight <forrest@forre.st>
Thu, 8 Dec 2011 22:47:42 +0000 (17:47 -0500)
committerForrest Voight <forrest@forre.st>
Thu, 8 Dec 2011 22:47:42 +0000 (17:47 -0500)
p2pool/main.py
p2pool/p2p.py
p2pool/util/db.py [deleted file]
p2pool/util/dicts.py

index 18b850f..d17c952 100644 (file)
@@ -8,7 +8,6 @@ import datetime
 import itertools
 import os
 import random
-import sqlite3
 import struct
 import sys
 import time
@@ -23,7 +22,7 @@ from nattraverso import portmapper, ipdiscover
 
 import bitcoin.p2p as bitcoin_p2p, bitcoin.getwork as bitcoin_getwork, bitcoin.data as bitcoin_data
 from bitcoin import worker_interface
-from util import db, expiring_dict, jsonrpc, variable, deferral, math
+from util import expiring_dict, jsonrpc, variable, deferral, math
 from . import p2p, skiplists, networks
 import p2pool, p2pool.data as p2pool_data
 
@@ -314,11 +313,21 @@ def main(args, net):
         if net.NAME == 'litecoin':
             nodes.add(((yield reactor.resolve('liteco.in')), net.P2P_PORT))
         
+        addrs = {}
+        try:
+            addrs = dict(eval(x) for x in open(os.path.join(os.path.dirname(sys.argv[0]), net.NAME + '_addrs.txt')))
+        except:
+            print "error reading addrs"
+        
+        def save_addrs():
+            open(os.path.join(os.path.dirname(sys.argv[0]), net.NAME + '_addrs.txt'), 'w').writelines(repr(x) + '\n' for x in addrs.iteritems())
+        task.LoopingCall(save_addrs).start(60)
+        
         p2p_node = p2p.Node(
             current_work=current_work,
             port=args.p2pool_port,
             net=net,
-            addr_store=db.SQLiteDict(sqlite3.connect(os.path.join(os.path.dirname(sys.argv[0]), 'addrs.dat'), isolation_level=None), net.NAME),
+            addr_store=addrs,
             preferred_addrs=set(map(parse, args.p2pool_nodes)) | nodes,
         )
         p2p_node.handle_shares = p2p_shares
index e9c969d..87c2ef1 100644 (file)
@@ -233,29 +233,6 @@ class ClientFactory(protocol.ClientFactory):
     def clientConnectionLost(self, connector, reason):
         self.node.attempt_ended(connector)
 
-addrdb_key = bitcoin_data.ComposedType([
-    ('address', bitcoin_data.IPV6AddressType()),
-    ('port', bitcoin_data.StructType('>H')),
-])
-addrdb_value = bitcoin_data.ComposedType([
-    ('services', bitcoin_data.StructType('<Q')),
-    ('first_seen', bitcoin_data.StructType('<Q')),
-    ('last_seen', bitcoin_data.StructType('<Q')),
-])
-
-class AddrStore(dicts.DictWrapper):
-    def encode_key(self, (address, port)):
-        return addrdb_key.pack(dict(address=address, port=port))
-    def decode_key(self, encoded_key):
-        k = addrdb_key.unpack(encoded_key)
-        return k['address'], k['port']
-    
-    def encode_value(self, (services, first_seen, last_seen)):
-        return addrdb_value.pack(dict(services=services, first_seen=first_seen, last_seen=last_seen))
-    def decode_value(self, encoded_value):
-        v = addrdb_value.unpack(encoded_value)
-        return v['services'], v['first_seen'], v['last_seen']
-
 class Node(object):
     def __init__(self, current_work, port, net, addr_store=None, preferred_addrs=set(), desired_peers=10, max_attempts=30, preferred_storage=1000):
         if addr_store is None:
@@ -263,7 +240,7 @@ class Node(object):
         
         self.port = port
         self.net = net
-        self.addr_store = AddrStore(addr_store)
+        self.addr_store = addr_store
         self.preferred_addrs = preferred_addrs
         self.desired_peers = desired_peers
         self.max_attempts = max_attempts
diff --git a/p2pool/util/db.py b/p2pool/util/db.py
deleted file mode 100644 (file)
index d09010b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-from __future__ import division
-
-class SQLiteDict(object):
-    def __init__(self, db, table):
-        self._db = db
-        self._table = table
-        
-        self._db.execute('CREATE TABLE IF NOT EXISTS %s(key BLOB PRIMARY KEY NOT NULL, value BLOB NOT NULL)' % (self._table,))
-    
-    def __len__(self):
-        return self._db.execute('SELECT COUNT(key) FROM %s' % (self._table,)).fetchone()[0]
-    
-    def __iter__(self):
-        for row in self._db.execute('SELECT key FROM %s' % (self._table,)):
-            yield str(row[0])
-    def iterkeys(self):
-        return iter(self)
-    def keys(self):
-        return list(self)
-    
-    def itervalues(self):
-        for row in self._db.execute('SELECT value FROM %s' % (self._table,)):
-            yield str(row[0])
-    def values(self):
-        return list(self.itervalues)
-    
-    def iteritems(self):
-        for row in self._db.execute('SELECT key, value FROM %s' % (self._table,)):
-            yield (str(row[0]), str(row[1]))
-    def items(self):
-        return list(self.iteritems())
-    
-    def __setitem__(self, key, value):
-        self._db.execute('INSERT OR REPLACE INTO %s (key, value) VALUES (?, ?)' % (self._table,), (buffer(key), buffer(value)))
-    
-    def __getitem__(self, key):
-        row = self._db.execute('SELECT value FROM %s WHERE key=?' % (self._table,), (buffer(key),)).fetchone()
-        if row is None:
-            raise KeyError(key)
-        else:
-            return str(row[0])
-    
-    def __delitem__(self, key):
-        self._db.execute('DELETE FROM %s WHERE key=?' % (self._table,), (buffer(key),))
index 2e01ad7..786e383 100644 (file)
@@ -1,49 +1,3 @@
-class DictWrapper(object):
-    def encode_key(self, key):
-        return key
-    def decode_key(self, encoded_key):
-        return encoded_key
-    def encode_value(self, value):
-        return value
-    def decode_value(self, encoded_value):
-        return encoded_value
-    
-    def __init__(self, inner):
-        self.inner = inner
-    
-    def __len__(self):
-        return len(self.inner)
-    
-    def __contains__(self, key):
-        return self.encode_key(key) in self.inner
-    
-    def __getitem__(self, key):
-        return self.decode_value(self.inner[self.encode_key(key)])
-    def __setitem__(self, key, value):
-        self.inner[self.encode_key(key)] = self.encode_value(value)
-    def __delitem__(self, key):
-        del self.inner[self.encode_key(key)]
-    
-    def __iter__(self):
-        for encoded_key in self.inner:
-            yield self.decode_key(encoded_key)
-    def iterkeys(self):
-        return iter(self)
-    def keys(self):
-        return list(self.iterkeys())
-    
-    def itervalue(self):
-        for encoded_value in self.inner.itervalues():
-            yield self.decode_value(encoded_value)
-    def values(self):
-        return list(self.itervalue())
-    
-    def iteritems(self):
-        for key, value in self.inner.iteritems():
-            yield self.decode_key(key), self.decode_value(value)
-    def items(self):
-        return list(self.iteritems())
-
 def update_dict(d, **replace):
     d = d.copy()
     for k, v in replace.iteritems():