aboutsummaryrefslogtreecommitdiff
path: root/src/db.cpp
AgeCommit message (Collapse)Author
2012-11-04Remove -detachdb and stop's detach argument.Pieter Wuille
As the only BDB database left is the wallet, and it is always detached. Also remove IsChainFile() predicate and related chainfile-specific logic.
2012-10-20Merge pull request #1916 from jgarzik/caddrdb-bugGregory Maxwell
Fix: CAddrMan: verify pchMessageStart file marker, before reading address data
2012-10-20LevelDB block and coin databasesPieter Wuille
Split off CBlockTreeDB and CCoinsViewDB into txdb-*.{cpp,h} files, implemented by either LevelDB or BDB. Based on code from earlier commits by Mike Hearn in his leveldb branch.
2012-10-20Use singleton block tree database instancePieter Wuille
2012-10-20Prepare database format for multi-stage block processingPieter Wuille
This commit adds a status field and a transaction counter to the block indexes.
2012-10-20Automatically reorganize at startup to best known blockPieter Wuille
Given that the block tree database (chain.dat) and the active chain database (coins.dat) are entirely separate now, it becomes legal to swap one with another instance without affecting the other. This commit introduces a check in the startup code that detects the presence of a better chain in chain.dat that has not been activated yet, and does so efficiently (in batch, while reusing the blk???.dat files).
2012-10-20Batch block connection during IBDPieter Wuille
During the initial block download (or -loadblock), delay connection of new blocks a bit, and perform them in a single action. This reduces the load on the database engine, as subsequent blocks often update an earlier block's transaction already.
2012-10-20UltraprunePieter Wuille
This switches bitcoin's transaction/block verification logic to use a "coin database", which contains all unredeemed transaction output scripts, amounts and heights. The name ultraprune comes from the fact that instead of a full transaction index, we only (need to) keep an index with unspent outputs. For now, the blocks themselves are kept as usual, although they are only necessary for serving, rescanning and reorganizing. The basic datastructures are CCoins (representing the coins of a single transaction), and CCoinsView (representing a state of the coins database). There are several implementations for CCoinsView. A dummy, one backed by the coins database (coins.dat), one backed by the memory pool, and one that adds a cache on top of it. FetchInputs, ConnectInputs, ConnectBlock, DisconnectBlock, ... now operate on a generic CCoinsView. The block switching logic now builds a single cached CCoinsView with changes to be committed to the database before any changes are made. This means no uncommitted changes are ever read from the database, and should ease the transition to another database layer which does not support transactions (but does support atomic writes), like LevelDB. For the getrawtransaction() RPC call, access to a txid-to-disk index would be preferable. As this index is not necessary or even useful for any other part of the implementation, it is not provided. Instead, getrawtransaction() uses the coin database to find the block height, and then scans that block to find the requested transaction. This is slow, but should suffice for debug purposes.
2012-10-20Multiple blocks per filePieter Wuille
Change the block storage layer again, this time with multiple files per block, but tracked by txindex.dat database entries. The file format is exactly the same as the earlier blk00001.dat, but with smaller files (128 MiB for now). The database entries track how many bytes each block file already uses, how many blocks are in it, which range of heights is present and which range of dates.
2012-10-20One file per blockPieter Wuille
Refactor of the block storage code, which now stores one file per block. This will allow easier pruning, as blocks can be removed individually.
2012-10-08Handle corrupt wallets gracefully.Gavin Andresen
Corrupt wallets used to cause a DB_RUNRECOVERY uncaught exception and a crash. This commit does three things: 1) Runs a BDB verify early in the startup process, and if there is a low-level problem with the database: + Moves the bad wallet.dat to wallet.timestamp.bak + Runs a 'salvage' operation to get key/value pairs, and writes them to a new wallet.dat + Continues with startup. 2) Much more tolerant of serialization errors. All errors in deserialization are reported by tolerated EXCEPT for errors related to reading keypairs or master key records-- those are reported and then shut down, so the user can get help (or recover from a backup). 3) Adds a new -salvagewallet option, which: + Moves the wallet.dat to wallet.timestamp.bak + extracts ONLY keypairs and master keys into a new wallet.dat + soft-sets -rescan, to recreate transaction history This was tested by randomly corrupting testnet wallets using a little python script I wrote (https://gist.github.com/3812689)
2012-10-08Handle incompatible BDB environmentsGavin Andresen
Before, opening a -datadir that was created with a new version of Berkeley DB would result in an un-caught DB_RUNRECOVERY exception. After these changes, the error is caught and the user is told that there is a problem and is told how to try to recover from it.
2012-10-08CAddrMan: verify pchMessageStart file marker, before reading address dataJeff Garzik
This avoids the case where you read the address data, before noticing it is the wrong network.
2012-09-18Trim trailing whitespace for src/*.{h,cpp}Jeff Garzik
2012-08-27Removed duplicated lockxanatos
Around line 167 there is already a LOCK(bitdb.cs_db) that covers everything. Re-locking is useless.
2012-07-11Run BDB disk-less for test_bitcoinLuke Dashjr
2012-07-05Merge pull request #1304 from rebroad/ShowBlockTimestampJeff Garzik
Show block timestamp
2012-06-20Remove CTxDB::ReadOwnerTxes.Pieter Wuille
It seems it wasn't ever used since 0.1.5.
2012-05-29Show the timestamp for the block.R E Broadley
wrap lines
2012-05-23Refactor: add IsChainFile helper. LoadBlockIndex() code movement.Jeff Garzik
2012-05-22Merge branch 'dbenv' into tmpJeff Garzik
Conflicts: src/db.cpp
2012-05-22Prevent crashes due to missing or corrupted database recordsJeff Garzik
Any problems seen during deserialization will throw an uncaught exception, crashing the entire bitcoin process. Properly return an error instead, so that we may at least log the error and gracefully shutdown other portions of the app.
2012-05-21BDB: restore DB_PRIVATE flag to environmentJeff Garzik
Satoshi's commits fdbf76d and c8ad9b8 (SVN import) removed the DB_PRIVATE flag from the environment. In part, this enables processes other than bitcoind to examine the active database environment. However, this incurs a slight performance penalty versus working entirely within application memory (DB_PRIVATE). Because bitcointools and other direct-BDB-accessing tools are not used by the vast majority of users, prefer to default with DB_PRIVATE with the option of disabling it if needed via -privdb=0.
2012-05-20Merge pull request #1354 from fanquake/masterPieter Wuille
Update Header Licenses
2012-05-19Further CDBEnv encapsulation work.Jeff Garzik
2012-05-19CDB::CDB: properly initialize activeTxn to NULLJeff Garzik
2012-05-19Remove unused nested BDB transaction supportJeff Garzik
2012-05-19Encapsulate BDB environment inside new CDBEnv classJeff Garzik
Cleans up and organizes several scattered functions and variables related to the BDB env. Class CDBInit() existed to provide a guaranteed-via-C++-destructor cleanup of the db environment. A formal CDBEnv class provides all of this inside a single wrapper.
2012-05-19Default to DB_TXN_WRITE_NOSYNC for all transactional operationsJeff Garzik
* This is safer than DB_TXN_NOSYNC, and does not appear to impact performance. * Applying this to the dbenv is necessary to avoid many fdatasync(2) calls on db 5.x * We carefully and thoroughly flush databases upon shutdown and other important events already.
2012-05-18Update License in File HeadersFordy
I originally created a pull to replace the "COPYING" in crypter.cpp and crypter.h, but it turned out that COPYING was actually the correct file.
2012-05-17Report how long DBFlush took.R E Broadley
2012-05-17Merge pull request #1316 from jgarzik/dead-codeJeff Garzik
Remove dead code: CTxDB::EraseBlockIndex(), CBlockIndex::EraseBlockFromDisk()
2012-05-16CAddrDB: Replace BDB-managed addr.dat with internally managed peers.datJeff Garzik
2012-05-15Remove dead code: CTxDB::EraseBlockIndex(), CBlockIndex::EraseBlockFromDisk()Jeff Garzik
2012-05-08Merge pull request #883 from sipa/loadblockGregory Maxwell
Add -loadblock to load from an external blk000?.dat file
2012-04-26Make lsn_reset ("detach databases") optional and off by default.Pieter Wuille
Add an option -detachdb (and entry in OptionDialog), without which no lsn_reset is called on addr.dat and blkindex.dat. That means these files cannot be moved to a new environment, but shutdown can be significantly faster. The wallet file is always lsn_reset'ed. -detachdb corresponds to the old behaviour, though it is off by default now to speed up shutdowns.
2012-04-23Change signed->unsigned at 3 code sitesJeff Garzik
This resolves signed/unsigned comparison warnings.
2012-04-22-loadblock to load from an external blk000?.dat filePieter Wuille
2012-04-18Added ability to respond to signals during Block Loading stage.R E Broadley
2012-04-17Merge pull request #1114 from sipa/lesssyncPieter Wuille
Reduce sync frequency for blkindex.dat
2012-04-17Further reduce header dependenciesPieter Wuille
This commit removes the dependency of serialize.h on PROTOCOL_VERSION, and makes this parameter required instead of implicit. This is much saner, as it makes the places where changing a version number can have an influence obvious.
2012-04-17Move CWalletDB code to new walletdb module.Jeff Garzik
In addition to standard code separation, this change opens the door to fixing several include inter-dependencies.
2012-04-17Remove headers.hPieter Wuille
2012-04-17Reduce sync frequency for blkindex.datPieter Wuille
Since auto-remove-db-logs was enabled, each time a CTxDB was closed outside of the initial download window, it causes a checkpoint + log cleanup. This is overkill, so reduce the sync frequency to once per minute at most.
2012-04-15fix warnings: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]Wladimir J. van der Laan
2012-04-11Use filesystem::path instead of manual string tinkeringPieter Wuille
Where possible, use boost::filesystem::path instead of std::string or char* for filenames. This avoids a lot of manual string tinkering, in favor of path::operator/. GetDataDir is also reworked significantly, it now only keeps two cached directory names (the network-specific data dir, and the root data dir), which are decided through a parameter instead of pre-initialized global variables. Finally, remove the "upgrade from 0.1.5" case where a debug.log in the current directory has to be removed.
2012-04-11Remove path.make_preferred() calls, and fix compiler error in bitcoinrpc RE: ↵Gavin Andresen
boost::system
2012-04-09Merge pull request #1052 from sipa/scopedlocksPieter Wuille
Use scoped locks instead of CRITICAL_BLOCK
2012-04-09Use scoped locks instead of CRITICAL_BLOCKPieter Wuille
2012-04-06updated db.cpp to use make_preferred()Philip Kaufmann