(quoted post by Gavin Andresen)

5 messages BitcoinTalk Gavin Andresen, agaumoney, lachesis, Jeff Garzik, Satoshi Nakamoto July 27, 2010 — September 12, 2010

I’ve been working on adding -port= / -rpcport= command line / config file options to bitcoin. The idea is to let you run multiple copies of bitcoind on one machine; I need this because I’m planning on having at least two Bitcoin-related web services (the Bitcoin Faucet and a service to be named later), I want them to have completely separate wallets, but I don’t want to rent multiple servers to host them.

Usage looks like this: Code:$ ./bitcoind getbalance # The TEST network Faucet bitcoind 40616.66159265000 $ ./bitcoind -datadir=/home/bitcoin/.bitcoinTEST2 getbalance 1000.000000000000 $ cat /home/bitcoin/.bitcoinTEST2/bitcoin.conf rpcpassword=… port=18666 rpcport=18665

Satoshi pointed out that allowing bitcoin/bitcoind to run on a non-standard port could be dangerous, because if misconfigured two bitcoins might both open and write to the same database. To prevent that, the /db.log file is used as a lock so only one bitcoin can access the same datadir at a time (uses boost::interprocess::file_lock, which is purported to be cross-platform and well-behaved, even if bitcoin crashes).

Issues that came up as I was doing this:

I left a call to wxSingleInstanceChecker in the Windows GUI code, so no multiple-gui-bitcoins-listening-on-different-ports on Windows. I don’t do Windows…

I didn’t bother making the error handling graceful if you point two bitcoins at the same datadir (you get a runtime exception “Cannot lock db.log, is bitcoin already running?”).

Patches are at http://pastebin.com/2e4hfXSS; I’ve only tested on Linux so far, anybody willing to try this on Windows?

agaumoney July 27, 2010 Source · Permalink

Quote from: gavinandresen on July 27, 2010, 02:08:17 PM

I’ve been working on adding -port= / -rpcport= command line / config file options to bitcoin

Nice. In addition it would be good to have an -ip= option for what address to bind the port. (rpcport binds to 127.0.0.1 but currently port binds to 0.0.0.0 which is all IP addresses on the machine. On my multi-homed system I’d like to bind bitcoin to the external address different from the bitcoin(s) that binds to the internal address(es).)

lachesis August 10, 2010 Source · Permalink

Do you have an updated version of this patch for SVN revision 125? Also, does Bitcoin open the BerkeleyDB as exclusive, precluding the need for a file lock?It does not — did my own tests.

Quote from: lachesis on August 10, 2010, 03:24:55 PM

Do you have an updated version of this patch for SVN revision 125? Also, does Bitcoin open the BerkeleyDB as exclusive, precluding the need for a file lock?It does not — did my own tests.

It does open with DB_PRIVATE.

http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/envopen.html

Satoshi Nakamoto September 12, 2010 Source · Permalink

Quote from: lachesis on August 10, 2010, 03:24:55 PM

Also, does Bitcoin open the BerkeleyDB as exclusive, precluding the need for a file lock?It does not — did my own tests.

Is there a way to open BerkeleyDB exclusive?

DB_PRIVATE is the worst of both worlds.  DB_PRIVATE is not exclusive, but it does make it get screwed up if another process tries to access it at the same time.

I’ve dropped the DB_PRIVATE flag in rev 153.