From b87879fd425258c3b5ef518fca1f6e87e49ac745 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Wed, 19 Jun 2013 16:06:06 +0200 Subject: [PATCH] Rename the Locks class to Threading in preparation for more stuff. --- .../com/google/bitcoin/core/AbstractBlockChain.java | 4 ++-- .../main/java/com/google/bitcoin/core/MemoryPool.java | 4 ++-- core/src/main/java/com/google/bitcoin/core/Peer.java | 4 ++-- .../main/java/com/google/bitcoin/core/PeerGroup.java | 4 ++-- .../src/main/java/com/google/bitcoin/core/Wallet.java | 4 ++-- .../protocols/channels/PaymentChannelClient.java | 4 ++-- .../protocols/channels/PaymentChannelServer.java | 4 ++-- .../channels/StoredPaymentChannelClientStates.java | 4 ++-- .../channels/StoredPaymentChannelServerStates.java | 4 ++-- .../bitcoin/protocols/niowrapper/ProtobufServer.java | 4 ++-- .../java/com/google/bitcoin/store/SPVBlockStore.java | 4 ++-- .../bitcoin/utils/{Locks.java => Threading.java} | 4 ++-- .../protocols/channels/ChannelConnectionTest.java | 11 ++++++++--- 13 files changed, 32 insertions(+), 27 deletions(-) rename core/src/main/java/com/google/bitcoin/utils/{Locks.java => Threading.java} (97%) diff --git a/core/src/main/java/com/google/bitcoin/core/AbstractBlockChain.java b/core/src/main/java/com/google/bitcoin/core/AbstractBlockChain.java index 4dfd1077..220971fd 100644 --- a/core/src/main/java/com/google/bitcoin/core/AbstractBlockChain.java +++ b/core/src/main/java/com/google/bitcoin/core/AbstractBlockChain.java @@ -18,7 +18,7 @@ package com.google.bitcoin.core; import com.google.bitcoin.store.BlockStore; import com.google.bitcoin.store.BlockStoreException; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; @@ -77,7 +77,7 @@ import static com.google.common.base.Preconditions.*; */ public abstract class AbstractBlockChain { private static final Logger log = LoggerFactory.getLogger(AbstractBlockChain.class); - protected ReentrantLock lock = Locks.lock("blockchain"); + protected ReentrantLock lock = Threading.lock("blockchain"); /** Keeps a map of block hashes to StoredBlocks. */ private final BlockStore blockStore; diff --git a/core/src/main/java/com/google/bitcoin/core/MemoryPool.java b/core/src/main/java/com/google/bitcoin/core/MemoryPool.java index 9d3eacae..aecc53f9 100644 --- a/core/src/main/java/com/google/bitcoin/core/MemoryPool.java +++ b/core/src/main/java/com/google/bitcoin/core/MemoryPool.java @@ -16,7 +16,7 @@ package com.google.bitcoin.core; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +45,7 @@ import static com.google.common.base.Preconditions.checkState; */ public class MemoryPool { private static final Logger log = LoggerFactory.getLogger(MemoryPool.class); - protected ReentrantLock lock = Locks.lock("mempool"); + protected ReentrantLock lock = Threading.lock("mempool"); // For each transaction we may have seen: // - only its hash in an inv packet diff --git a/core/src/main/java/com/google/bitcoin/core/Peer.java b/core/src/main/java/com/google/bitcoin/core/Peer.java index a3eea59f..bb4fa828 100644 --- a/core/src/main/java/com/google/bitcoin/core/Peer.java +++ b/core/src/main/java/com/google/bitcoin/core/Peer.java @@ -18,7 +18,7 @@ package com.google.bitcoin.core; import com.google.bitcoin.store.BlockStore; import com.google.bitcoin.store.BlockStoreException; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -55,7 +55,7 @@ public class Peer { private static final Logger log = LoggerFactory.getLogger(Peer.class); - protected final ReentrantLock lock = Locks.lock("peer"); + protected final ReentrantLock lock = Threading.lock("peer"); private final NetworkParameters params; private final AbstractBlockChain blockChain; diff --git a/core/src/main/java/com/google/bitcoin/core/PeerGroup.java b/core/src/main/java/com/google/bitcoin/core/PeerGroup.java index 3c345867..1f0661ef 100644 --- a/core/src/main/java/com/google/bitcoin/core/PeerGroup.java +++ b/core/src/main/java/com/google/bitcoin/core/PeerGroup.java @@ -20,7 +20,7 @@ package com.google.bitcoin.core; import com.google.bitcoin.core.Peer.PeerHandler; import com.google.bitcoin.discovery.PeerDiscovery; import com.google.bitcoin.discovery.PeerDiscoveryException; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.base.Preconditions; import com.google.common.collect.Sets; import com.google.common.util.concurrent.*; @@ -71,7 +71,7 @@ public class PeerGroup extends AbstractIdleService implements TransactionBroadca private static final int DEFAULT_CONNECTIONS = 4; private static final Logger log = LoggerFactory.getLogger(PeerGroup.class); - protected final ReentrantLock lock = Locks.lock("peergroup"); + protected final ReentrantLock lock = Threading.lock("peergroup"); // These lists are all thread-safe so do not have to be accessed under the PeerGroup lock. // Addresses to try to connect to, excluding active peers. diff --git a/core/src/main/java/com/google/bitcoin/core/Wallet.java b/core/src/main/java/com/google/bitcoin/core/Wallet.java index 379f3c0b..f16896b4 100644 --- a/core/src/main/java/com/google/bitcoin/core/Wallet.java +++ b/core/src/main/java/com/google/bitcoin/core/Wallet.java @@ -22,7 +22,7 @@ import com.google.bitcoin.crypto.KeyCrypter; import com.google.bitcoin.crypto.KeyCrypterException; import com.google.bitcoin.crypto.KeyCrypterScrypt; import com.google.bitcoin.store.WalletProtobufSerializer; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.*; @@ -83,7 +83,7 @@ public class Wallet implements Serializable, BlockChainListener { private static final Logger log = LoggerFactory.getLogger(Wallet.class); private static final long serialVersionUID = 2L; - protected final ReentrantLock lock = Locks.lock("wallet"); + protected final ReentrantLock lock = Threading.lock("wallet"); // The various pools below give quick access to wallet-relevant transactions by the state they're in: // diff --git a/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelClient.java b/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelClient.java index d5d9c26f..f7da556e 100644 --- a/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelClient.java +++ b/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelClient.java @@ -4,7 +4,7 @@ import java.math.BigInteger; import java.util.concurrent.locks.ReentrantLock; import com.google.bitcoin.core.*; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.annotations.VisibleForTesting; import com.google.protobuf.ByteString; import net.jcip.annotations.GuardedBy; @@ -28,7 +28,7 @@ public class PaymentChannelClient { //TODO: Update JavaDocs with notes for communication over stateless protocols private static final org.slf4j.Logger log = LoggerFactory.getLogger(PaymentChannelClient.class); - protected final ReentrantLock lock = Locks.lock("channelclient"); + protected final ReentrantLock lock = Threading.lock("channelclient"); /** * Implements the connection between this client and the server, providing an interface which allows messages to be diff --git a/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelServer.java b/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelServer.java index f3d96665..a5106f54 100644 --- a/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelServer.java +++ b/core/src/main/java/com/google/bitcoin/protocols/channels/PaymentChannelServer.java @@ -4,7 +4,7 @@ import java.math.BigInteger; import java.util.concurrent.locks.ReentrantLock; import com.google.bitcoin.core.*; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.util.concurrent.MoreExecutors; import com.google.protobuf.ByteString; import net.jcip.annotations.GuardedBy; @@ -28,7 +28,7 @@ public class PaymentChannelServer { //TODO: Update JavaDocs with notes for communication over stateless protocols private static final org.slf4j.Logger log = LoggerFactory.getLogger(PaymentChannelServer.class); - protected final ReentrantLock lock = Locks.lock("channelserver"); + protected final ReentrantLock lock = Threading.lock("channelserver"); // The step in the initialization process we are in, some of this is duplicated in the PaymentChannelServerState private enum InitStep { diff --git a/core/src/main/java/com/google/bitcoin/protocols/channels/StoredPaymentChannelClientStates.java b/core/src/main/java/com/google/bitcoin/protocols/channels/StoredPaymentChannelClientStates.java index 283ad700..a631b00f 100644 --- a/core/src/main/java/com/google/bitcoin/protocols/channels/StoredPaymentChannelClientStates.java +++ b/core/src/main/java/com/google/bitcoin/protocols/channels/StoredPaymentChannelClientStates.java @@ -25,7 +25,7 @@ import java.util.TimerTask; import java.util.concurrent.locks.ReentrantLock; import com.google.bitcoin.core.*; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.HashMultimap; import net.jcip.annotations.GuardedBy; @@ -46,7 +46,7 @@ public class StoredPaymentChannelClientStates implements WalletExtension { private Wallet containingWallet; private final TransactionBroadcaster announcePeerGroup; - protected final ReentrantLock lock = Locks.lock("StoredPaymentChannelClientStates"); + protected final ReentrantLock lock = Threading.lock("StoredPaymentChannelClientStates"); /** * Creates a new StoredPaymentChannelClientStates and associates it with the given {@link Wallet} and diff --git a/core/src/main/java/com/google/bitcoin/protocols/channels/StoredPaymentChannelServerStates.java b/core/src/main/java/com/google/bitcoin/protocols/channels/StoredPaymentChannelServerStates.java index be3344d1..14c6f5c0 100644 --- a/core/src/main/java/com/google/bitcoin/protocols/channels/StoredPaymentChannelServerStates.java +++ b/core/src/main/java/com/google/bitcoin/protocols/channels/StoredPaymentChannelServerStates.java @@ -21,7 +21,7 @@ import java.util.*; import java.util.concurrent.locks.ReentrantLock; import com.google.bitcoin.core.*; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.annotations.VisibleForTesting; import net.jcip.annotations.GuardedBy; @@ -41,7 +41,7 @@ public class StoredPaymentChannelServerStates implements WalletExtension { private final Timer channelTimeoutHandler = new Timer(); - private final ReentrantLock lock = Locks.lock("StoredPaymentChannelServerStates"); + private final ReentrantLock lock = Threading.lock("StoredPaymentChannelServerStates"); /** * The offset between the refund transaction's lock time and the time channels will be automatically closed. diff --git a/core/src/main/java/com/google/bitcoin/protocols/niowrapper/ProtobufServer.java b/core/src/main/java/com/google/bitcoin/protocols/niowrapper/ProtobufServer.java index 1b43003a..e4a95f78 100644 --- a/core/src/main/java/com/google/bitcoin/protocols/niowrapper/ProtobufServer.java +++ b/core/src/main/java/com/google/bitcoin/protocols/niowrapper/ProtobufServer.java @@ -27,7 +27,7 @@ import java.nio.channels.spi.SelectorProvider; import java.util.Iterator; import java.util.concurrent.locks.ReentrantLock; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import com.google.common.annotations.VisibleForTesting; import org.slf4j.LoggerFactory; @@ -50,7 +50,7 @@ public class ProtobufServer { private static final int BUFFER_SIZE_UPPER_BOUND = 65536; private class ConnectionHandler extends MessageWriteTarget { - private final ReentrantLock lock = Locks.lock("protobufServerConnectionHandler"); + private final ReentrantLock lock = Threading.lock("protobufServerConnectionHandler"); private final ByteBuffer dbuf; private final SocketChannel channel; private final ProtobufParser parser; diff --git a/core/src/main/java/com/google/bitcoin/store/SPVBlockStore.java b/core/src/main/java/com/google/bitcoin/store/SPVBlockStore.java index cb38ddb2..42618b5e 100644 --- a/core/src/main/java/com/google/bitcoin/store/SPVBlockStore.java +++ b/core/src/main/java/com/google/bitcoin/store/SPVBlockStore.java @@ -17,7 +17,7 @@ package com.google.bitcoin.store; import com.google.bitcoin.core.*; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.utils.Threading; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +53,7 @@ public class SPVBlockStore implements BlockStore { protected int numHeaders; protected NetworkParameters params; - protected ReentrantLock lock = Locks.lock("SPVBlockStore"); + protected ReentrantLock lock = Threading.lock("SPVBlockStore"); // The entire ring-buffer is mmapped and accessing it should be as fast as accessing regular memory once it's // faulted in. Unfortunately, in theory practice and theory are the same. In practice they aren't. diff --git a/core/src/main/java/com/google/bitcoin/utils/Locks.java b/core/src/main/java/com/google/bitcoin/utils/Threading.java similarity index 97% rename from core/src/main/java/com/google/bitcoin/utils/Locks.java rename to core/src/main/java/com/google/bitcoin/utils/Threading.java index 892c9b9d..3758d0d0 100644 --- a/core/src/main/java/com/google/bitcoin/utils/Locks.java +++ b/core/src/main/java/com/google/bitcoin/utils/Threading.java @@ -25,7 +25,7 @@ import static com.google.common.base.Preconditions.checkState; /** * A wrapper around explicit lock creation that lets you control whether bitcoinj performs cycle detection or not. */ -public class Locks { +public class Threading { static { // Default policy goes here. If you want to change this, use one of the static methods before @@ -54,7 +54,7 @@ public class Locks { } public static void setPolicy(CycleDetectingLockFactory.Policy policy) { - Locks.policy = policy; + Threading.policy = policy; factory = CycleDetectingLockFactory.newInstance(policy); } diff --git a/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java b/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java index 707724e7..27f98a87 100644 --- a/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java +++ b/core/src/test/java/com/google/bitcoin/protocols/channels/ChannelConnectionTest.java @@ -17,7 +17,12 @@ package com.google.bitcoin.protocols.channels; import com.google.bitcoin.core.*; -import com.google.bitcoin.utils.Locks; +import com.google.bitcoin.protocols.niowrapper.ProtobufParser; +import com.google.bitcoin.protocols.niowrapper.ProtobufParserFactory; +import com.google.bitcoin.protocols.niowrapper.ProtobufServer; +import com.google.bitcoin.utils.Threading; +import org.bitcoin.paymentchannel.Protos; +import org.junit.Before; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import com.google.protobuf.ByteString; @@ -83,13 +88,13 @@ public class ChannelConnectionTest extends TestWithWallet { // Because there are no separate threads in the tests here (we call back into client/server in server/client // handlers), we have lots of lock cycles. A normal user shouldn't have this issue as they are probably not both // client+server running in the same thread. - Locks.warnOnLockCycles(); + Threading.warnOnLockCycles(); } @After public void checkFail() { assertFalse(fail.get()); - Locks.throwOnLockCycles(); + Threading.throwOnLockCycles(); } @Test