mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-05 16:00:40 +01:00
rpc: Add specific error code for "wallet already loaded"
This commit is contained in:
parent
43f3ada27b
commit
a6739cc868
3 changed files with 15 additions and 3 deletions
|
@ -79,6 +79,7 @@ enum RPCErrorCode
|
||||||
RPC_WALLET_ALREADY_UNLOCKED = -17, //!< Wallet is already unlocked
|
RPC_WALLET_ALREADY_UNLOCKED = -17, //!< Wallet is already unlocked
|
||||||
RPC_WALLET_NOT_FOUND = -18, //!< Invalid wallet specified
|
RPC_WALLET_NOT_FOUND = -18, //!< Invalid wallet specified
|
||||||
RPC_WALLET_NOT_SPECIFIED = -19, //!< No wallet specified (error when there are multiple wallets loaded)
|
RPC_WALLET_NOT_SPECIFIED = -19, //!< No wallet specified (error when there are multiple wallets loaded)
|
||||||
|
RPC_WALLET_ALREADY_LOADED = -35, //!< This same wallet is already loaded
|
||||||
|
|
||||||
//! Backwards compatible aliases
|
//! Backwards compatible aliases
|
||||||
RPC_WALLET_INVALID_ACCOUNT_NAME = RPC_WALLET_INVALID_LABEL_NAME,
|
RPC_WALLET_INVALID_ACCOUNT_NAME = RPC_WALLET_INVALID_LABEL_NAME,
|
||||||
|
|
|
@ -2615,7 +2615,18 @@ static RPCHelpMan loadwallet()
|
||||||
if (!wallet) {
|
if (!wallet) {
|
||||||
// Map bad format to not found, since bad format is returned when the
|
// Map bad format to not found, since bad format is returned when the
|
||||||
// wallet directory exists, but doesn't contain a data file.
|
// wallet directory exists, but doesn't contain a data file.
|
||||||
RPCErrorCode code = status == DatabaseStatus::FAILED_NOT_FOUND || status == DatabaseStatus::FAILED_BAD_FORMAT ? RPC_WALLET_NOT_FOUND : RPC_WALLET_ERROR;
|
RPCErrorCode code = RPC_WALLET_ERROR;
|
||||||
|
switch (status) {
|
||||||
|
case DatabaseStatus::FAILED_NOT_FOUND:
|
||||||
|
case DatabaseStatus::FAILED_BAD_FORMAT:
|
||||||
|
code = RPC_WALLET_NOT_FOUND;
|
||||||
|
break;
|
||||||
|
case DatabaseStatus::FAILED_ALREADY_LOADED:
|
||||||
|
code = RPC_WALLET_ALREADY_LOADED;
|
||||||
|
break;
|
||||||
|
default: // RPC_WALLET_ERROR is returned for all other cases.
|
||||||
|
break;
|
||||||
|
}
|
||||||
throw JSONRPCError(code, error.original);
|
throw JSONRPCError(code, error.original);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -304,12 +304,12 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||||
if self.options.descriptors:
|
if self.options.descriptors:
|
||||||
assert_raises_rpc_error(-4, "Wallet file verification failed. SQLiteDatabase: Unable to obtain an exclusive lock on the database, is it being used by another bitcoind?", self.nodes[0].loadwallet, wallet_names[0])
|
assert_raises_rpc_error(-4, "Wallet file verification failed. SQLiteDatabase: Unable to obtain an exclusive lock on the database, is it being used by another bitcoind?", self.nodes[0].loadwallet, wallet_names[0])
|
||||||
else:
|
else:
|
||||||
assert_raises_rpc_error(-4, "Wallet file verification failed. Refusing to load database. Data file '{}' is already loaded.".format(path), self.nodes[0].loadwallet, wallet_names[0])
|
assert_raises_rpc_error(-35, "Wallet file verification failed. Refusing to load database. Data file '{}' is already loaded.".format(path), self.nodes[0].loadwallet, wallet_names[0])
|
||||||
|
|
||||||
# This tests the default wallet that BDB makes, so SQLite wallet doesn't need to test this
|
# This tests the default wallet that BDB makes, so SQLite wallet doesn't need to test this
|
||||||
# Fail to load duplicate wallets by different ways (directory and filepath)
|
# Fail to load duplicate wallets by different ways (directory and filepath)
|
||||||
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", "wallet.dat")
|
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", "wallet.dat")
|
||||||
assert_raises_rpc_error(-4, "Wallet file verification failed. Refusing to load database. Data file '{}' is already loaded.".format(path), self.nodes[0].loadwallet, 'wallet.dat')
|
assert_raises_rpc_error(-35, "Wallet file verification failed. Refusing to load database. Data file '{}' is already loaded.".format(path), self.nodes[0].loadwallet, 'wallet.dat')
|
||||||
|
|
||||||
# Only BDB doesn't open duplicate wallet files. SQLite does not have this limitation. While this may be desired in the future, it is not necessary
|
# Only BDB doesn't open duplicate wallet files. SQLite does not have this limitation. While this may be desired in the future, it is not necessary
|
||||||
# Fail to load if one wallet is a copy of another
|
# Fail to load if one wallet is a copy of another
|
||||||
|
|
Loading…
Add table
Reference in a new issue