Author

Topic: Problem with armoryd.py (Read 1465 times)

newbie
Activity: 3
Merit: 0
October 13, 2014, 01:48:48 AM
#3
Which version are you running?

Thanks but after further debugging, i finally figured out that although it appears to be stuck, it is actually performing the checkWallet() and the iteration through all the addresses (70k+ address) is just taking a considerable amount of time without any debugging messages showing the actual progress.

When disabling the checkWallet() call, i got the other errors mentioned above since the lastChecked was not set correctly so to fix that especially during my tests and since it is very time consuming while restarting the RPC client after minor modifications i added an extra argument that disables the checkWallet() call and sets lastChecked to the current time.

Code:
      if skipWalletCheck:
      self.lastChecked = RightNow()
      else:
      self.checkWallet()

Although this will stay only for testing, is there any possibility that it could create any future problems down the road? The wallet getting corrupted is not really a concern since it is a testing wallet on Testnet.
sr. member
Activity: 255
Merit: 250
Senior Developer - Armory
October 10, 2014, 11:05:00 AM
#2
Which version are you running?
newbie
Activity: 3
Merit: 0
October 10, 2014, 04:06:05 AM
#1
Trying to run armoryd.py on Ubuntu gives me errors when database is build using a wallet with 50k+ addresses. If i run armory the databases are build fine even with the given wallet, full consistency check on the wallet says that the wallet is fine but when trying to run the armoryd.py RPC deamon it goes up to the point of checking the db and never goes on:
whith the console output using the debug flags staying at:

Quote
(WARNING) armoryd.py:2832 - Active wallet is set to ******
(INFO) armoryd.py:2840 - Initialising RPC server on port 18225

Around line 2890 if i try some debugging, i see 1 printed but 2 never comes up:

Code:
   
def start(self):
      #run a wallet consistency check before starting the BDM
      LOGINFO("1 ")

      self.checkWallet()
      LOGINFO("2 ")

Digging further into the checkWallet() with some debugging:

Code:
   def checkWallet(self):
      LOGINFO('locking wallet')
      if self.lock.acquire(False):
         LOGINFO('wallet locked')

         wltStatus = PyBtcWalletRecovery().ProcessWallet(None, self.curWlt, \
                                                         Mode=5)
         LOGINFO('status checked: ' + str(wltStatus))

i get this:

Quote
(INFO) armoryd.py:2840 - Initialising RPC server on port 18225
(INFO) armoryd.py:3076 - locking wallet
(INFO) armoryd.py:3078 - wallet locked

If i comment out the self.checkWallet() function call to make the execution continue, then i get the following errors:

Quote
(INFO) Networking.py:348 - Handshake finished, connection open!
(ERROR) armoryd.py:3199 - Error in heartbeat function
Traceback (most recent call last):
  File "armoryd..py", line 3110, in Heartbeat
    nextCheck = self.lastChecked + self.checkStep
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
(ERROR) armoryd..py:3201 - Error Type:
(ERROR) armoryd..py:3202 - Error Value: unsupported operand type(s) for +: 'NoneType' and 'int'
(ERROR) armoryd..py:3199 - Error in heartbeat function

I am just wondering is this a limitation of the RPC client, is the database and/or wallet somehow corrupted, is this taking too much time without me noticing or some other problem?
 
Any help would be greatly appreciated and thanks for a great solution Armory!!
Jump to: