Removed database locking.

This commit is contained in:
akwizgran
2016-02-05 17:49:49 +00:00
parent 0c392e8b78
commit 623707af0f
3 changed files with 506 additions and 949 deletions

View File

@@ -30,27 +30,23 @@ import java.util.Map;
* obtained by calling {@link #startTransaction()}. Every transaction must be * obtained by calling {@link #startTransaction()}. Every transaction must be
* terminated by calling either {@link #abortTransaction(T)} or * terminated by calling either {@link #abortTransaction(T)} or
* {@link #commitTransaction(T)}, even if an exception is thrown. * {@link #commitTransaction(T)}, even if an exception is thrown.
* <p>
* Read-write locking is provided by the DatabaseComponent implementation.
*/ */
interface Database<T> { interface Database<T> {
/** /**
* Opens the database and returns true if the database already existed. * Opens the database and returns true if the database already existed.
* <p>
* Locking: write.
*/ */
boolean open() throws DbException; boolean open() throws DbException;
/** /**
* Prevents new transactions from starting, waits for all current * Prevents new transactions from starting, waits for all current
* transactions to finish, and closes the database. * transactions to finish, and closes the database.
* <p>
* Locking: write.
*/ */
void close() throws DbException, IOException; void close() throws DbException, IOException;
/** Starts a new transaction and returns an object representing it. */ /**
* Starts a new transaction and returns an object representing it.
*/
T startTransaction() throws DbException; T startTransaction() throws DbException;
/** /**
@@ -65,59 +61,39 @@ interface Database<T> {
*/ */
void commitTransaction(T txn) throws DbException; void commitTransaction(T txn) throws DbException;
/**
* Returns the number of transactions started since the transaction count
* was last reset.
*/
int getTransactionCount();
/** Resets the transaction count. */
void resetTransactionCount();
/** /**
* Stores a contact associated with the given local and remote pseudonyms, * Stores a contact associated with the given local and remote pseudonyms,
* and returns an ID for the contact. * and returns an ID for the contact.
* <p>
* Locking: write.
*/ */
ContactId addContact(T txn, Author remote, AuthorId local) ContactId addContact(T txn, Author remote, AuthorId local)
throws DbException; throws DbException;
/** /**
* Stores a group. * Stores a group.
* <p>
* Locking: write.
*/ */
void addGroup(T txn, Group g) throws DbException; void addGroup(T txn, Group g) throws DbException;
/** /**
* Stores a local pseudonym. * Stores a local pseudonym.
* <p>
* Locking: write.
*/ */
void addLocalAuthor(T txn, LocalAuthor a) throws DbException; void addLocalAuthor(T txn, LocalAuthor a) throws DbException;
/** /**
* Stores a message. * Stores a message.
* <p>
* Locking: write.
*/ */
void addMessage(T txn, Message m, Validity validity, boolean shared) void addMessage(T txn, Message m, Validity validity, boolean shared)
throws DbException; throws DbException;
/** /**
* Records that a message has been offered by the given contact. * Records that a message has been offered by the given contact.
* <p>
* Locking: write.
*/ */
void addOfferedMessage(T txn, ContactId c, MessageId m) throws DbException; void addOfferedMessage(T txn, ContactId c, MessageId m) throws DbException;
/** /**
* Initialises the status of the given message with respect to the given * Initialises the status of the given message with respect to the given
* contact. * contact.
* <p> *
* Locking: write. * @param ack whether the message needs to be acknowledged.
* @param ack whether the message needs to be acknowledged.
* @param seen whether the contact has seen the message. * @param seen whether the contact has seen the message.
*/ */
void addStatus(T txn, ContactId c, MessageId m, boolean ack, boolean seen) void addStatus(T txn, ContactId c, MessageId m, boolean ack, boolean seen)
@@ -125,76 +101,56 @@ interface Database<T> {
/** /**
* Stores a transport. * Stores a transport.
* <p>
* Locking: write.
*/ */
void addTransport(T txn, TransportId t, int maxLatency) void addTransport(T txn, TransportId t, int maxLatency)
throws DbException; throws DbException;
/** /**
* Stores transport keys for a newly added contact. * Stores transport keys for a newly added contact.
* <p>
* Locking: write.
*/ */
void addTransportKeys(T txn, ContactId c, TransportKeys k) void addTransportKeys(T txn, ContactId c, TransportKeys k)
throws DbException; throws DbException;
/** /**
* Makes a group visible to the given contact. * Makes a group visible to the given contact.
* <p>
* Locking: write.
*/ */
void addVisibility(T txn, ContactId c, GroupId g) throws DbException; void addVisibility(T txn, ContactId c, GroupId g) throws DbException;
/** /**
* Returns true if the database contains the given contact for the given * Returns true if the database contains the given contact for the given
* local pseudonym. * local pseudonym.
* <p>
* Locking: read.
*/ */
boolean containsContact(T txn, AuthorId remote, AuthorId local) boolean containsContact(T txn, AuthorId remote, AuthorId local)
throws DbException; throws DbException;
/** /**
* Returns true if the database contains the given contact. * Returns true if the database contains the given contact.
* <p>
* Locking: read.
*/ */
boolean containsContact(T txn, ContactId c) throws DbException; boolean containsContact(T txn, ContactId c) throws DbException;
/** /**
* Returns true if the database contains the given group. * Returns true if the database contains the given group.
* <p>
* Locking: read.
*/ */
boolean containsGroup(T txn, GroupId g) throws DbException; boolean containsGroup(T txn, GroupId g) throws DbException;
/** /**
* Returns true if the database contains the given local pseudonym. * Returns true if the database contains the given local pseudonym.
* <p>
* Locking: read.
*/ */
boolean containsLocalAuthor(T txn, AuthorId a) throws DbException; boolean containsLocalAuthor(T txn, AuthorId a) throws DbException;
/** /**
* Returns true if the database contains the given message. * Returns true if the database contains the given message.
* <p>
* Locking: read.
*/ */
boolean containsMessage(T txn, MessageId m) throws DbException; boolean containsMessage(T txn, MessageId m) throws DbException;
/** /**
* Returns true if the database contains the given transport. * Returns true if the database contains the given transport.
* <p>
* Locking: read.
*/ */
boolean containsTransport(T txn, TransportId t) throws DbException; boolean containsTransport(T txn, TransportId t) throws DbException;
/** /**
* Returns true if the database contains the given group and the group is * Returns true if the database contains the given group and the group is
* visible to the given contact. * visible to the given contact.
* <p>
* Locking: read.
*/ */
boolean containsVisibleGroup(T txn, ContactId c, GroupId g) boolean containsVisibleGroup(T txn, ContactId c, GroupId g)
throws DbException; throws DbException;
@@ -202,16 +158,12 @@ interface Database<T> {
/** /**
* Returns true if the database contains the given message and the message * Returns true if the database contains the given message and the message
* is visible to the given contact. * is visible to the given contact.
* <p>
* Locking: read.
*/ */
boolean containsVisibleMessage(T txn, ContactId c, MessageId m) boolean containsVisibleMessage(T txn, ContactId c, MessageId m)
throws DbException; throws DbException;
/** /**
* Returns the number of messages offered by the given contact. * Returns the number of messages offered by the given contact.
* <p>
* Locking: read.
*/ */
int countOfferedMessages(T txn, ContactId c) throws DbException; int countOfferedMessages(T txn, ContactId c) throws DbException;
@@ -234,36 +186,26 @@ interface Database<T> {
/** /**
* Returns the contact with the given ID. * Returns the contact with the given ID.
* <p>
* Locking: read.
*/ */
Contact getContact(T txn, ContactId c) throws DbException; Contact getContact(T txn, ContactId c) throws DbException;
/** /**
* Returns the IDs of all contacts. * Returns the IDs of all contacts.
* <p>
* Locking: read.
*/ */
Collection<ContactId> getContactIds(T txn) throws DbException; Collection<ContactId> getContactIds(T txn) throws DbException;
/** /**
* Returns all contacts. * Returns all contacts.
* <p>
* Locking: read.
*/ */
Collection<Contact> getContacts(T txn) throws DbException; Collection<Contact> getContacts(T txn) throws DbException;
/** /**
* Returns all contacts associated with the given local pseudonym. * Returns all contacts associated with the given local pseudonym.
* <p>
* Locking: read.
*/ */
Collection<ContactId> getContacts(T txn, AuthorId a) throws DbException; Collection<ContactId> getContacts(T txn, AuthorId a) throws DbException;
/** /**
* Returns the unique ID for this device. * Returns the unique ID for this device.
* <p>
* Locking: read.
*/ */
DeviceId getDeviceId(T txn) throws DbException; DeviceId getDeviceId(T txn) throws DbException;
@@ -276,59 +218,43 @@ interface Database<T> {
/** /**
* Returns the group with the given ID. * Returns the group with the given ID.
* <p>
* Locking: read.
*/ */
Group getGroup(T txn, GroupId g) throws DbException; Group getGroup(T txn, GroupId g) throws DbException;
/** /**
* Returns the metadata for the given group. * Returns the metadata for the given group.
* <p>
* Locking: read.
*/ */
Metadata getGroupMetadata(T txn, GroupId g) throws DbException; Metadata getGroupMetadata(T txn, GroupId g) throws DbException;
/** /**
* Returns all groups belonging to the given client. * Returns all groups belonging to the given client.
* <p>
* Locking: read.
*/ */
Collection<Group> getGroups(T txn, ClientId c) throws DbException; Collection<Group> getGroups(T txn, ClientId c) throws DbException;
/** /**
* Returns the local pseudonym with the given ID. * Returns the local pseudonym with the given ID.
* <p>
* Locking: read.
*/ */
LocalAuthor getLocalAuthor(T txn, AuthorId a) throws DbException; LocalAuthor getLocalAuthor(T txn, AuthorId a) throws DbException;
/** /**
* Returns all local pseudonyms. * Returns all local pseudonyms.
* <p>
* Locking: read.
*/ */
Collection<LocalAuthor> getLocalAuthors(T txn) throws DbException; Collection<LocalAuthor> getLocalAuthors(T txn) throws DbException;
/** /**
* Returns the metadata for all messages in the given group. * Returns the metadata for all messages in the given group.
* <p>
* Locking: read.
*/ */
Map<MessageId, Metadata> getMessageMetadata(T txn, GroupId g) Map<MessageId, Metadata> getMessageMetadata(T txn, GroupId g)
throws DbException; throws DbException;
/** /**
* Returns the metadata for the given message. * Returns the metadata for the given message.
* <p>
* Locking: read.
*/ */
Metadata getMessageMetadata(T txn, MessageId m) throws DbException; Metadata getMessageMetadata(T txn, MessageId m) throws DbException;
/** /**
* Returns the status of all messages in the given group with respect * Returns the status of all messages in the given group with respect
* to the given contact. * to the given contact.
* <p>
* Locking: read
*/ */
Collection<MessageStatus> getMessageStatus(T txn, ContactId c, GroupId g) Collection<MessageStatus> getMessageStatus(T txn, ContactId c, GroupId g)
throws DbException; throws DbException;
@@ -336,8 +262,6 @@ interface Database<T> {
/** /**
* Returns the status of the given message with respect to the given * Returns the status of the given message with respect to the given
* contact. * contact.
* <p>
* Locking: read
*/ */
MessageStatus getMessageStatus(T txn, ContactId c, MessageId m) MessageStatus getMessageStatus(T txn, ContactId c, MessageId m)
throws DbException; throws DbException;
@@ -345,8 +269,6 @@ interface Database<T> {
/** /**
* Returns the IDs of some messages received from the given contact that * Returns the IDs of some messages received from the given contact that
* need to be acknowledged, up to the given number of messages. * need to be acknowledged, up to the given number of messages.
* <p>
* Locking: read.
*/ */
Collection<MessageId> getMessagesToAck(T txn, ContactId c, int maxMessages) Collection<MessageId> getMessagesToAck(T txn, ContactId c, int maxMessages)
throws DbException; throws DbException;
@@ -354,8 +276,6 @@ interface Database<T> {
/** /**
* Returns the IDs of some messages that are eligible to be offered to the * Returns the IDs of some messages that are eligible to be offered to the
* given contact, up to the given number of messages. * given contact, up to the given number of messages.
* <p>
* Locking: read.
*/ */
Collection<MessageId> getMessagesToOffer(T txn, ContactId c, Collection<MessageId> getMessagesToOffer(T txn, ContactId c,
int maxMessages) throws DbException; int maxMessages) throws DbException;
@@ -363,8 +283,6 @@ interface Database<T> {
/** /**
* Returns the IDs of some messages that are eligible to be sent to the * Returns the IDs of some messages that are eligible to be sent to the
* given contact, up to the given total length. * given contact, up to the given total length.
* <p>
* Locking: read.
*/ */
Collection<MessageId> getMessagesToSend(T txn, ContactId c, int maxLength) Collection<MessageId> getMessagesToSend(T txn, ContactId c, int maxLength)
throws DbException; throws DbException;
@@ -372,8 +290,6 @@ interface Database<T> {
/** /**
* Returns the IDs of some messages that are eligible to be requested from * Returns the IDs of some messages that are eligible to be requested from
* the given contact, up to the given number of messages. * the given contact, up to the given number of messages.
* <p>
* Locking: read.
*/ */
Collection<MessageId> getMessagesToRequest(T txn, ContactId c, Collection<MessageId> getMessagesToRequest(T txn, ContactId c,
int maxMessages) throws DbException; int maxMessages) throws DbException;
@@ -381,16 +297,12 @@ interface Database<T> {
/** /**
* Returns the IDs of any messages that need to be validated by the given * Returns the IDs of any messages that need to be validated by the given
* client. * client.
* <p>
* Locking: read.
*/ */
Collection<MessageId> getMessagesToValidate(T txn, ClientId c) Collection<MessageId> getMessagesToValidate(T txn, ClientId c)
throws DbException; throws DbException;
/** /**
* Returns the message with the given ID, in serialised form. * Returns the message with the given ID, in serialised form.
* <p>
* Locking: read.
*/ */
byte[] getRawMessage(T txn, MessageId m) throws DbException; byte[] getRawMessage(T txn, MessageId m) throws DbException;
@@ -398,46 +310,34 @@ interface Database<T> {
* Returns the IDs of some messages that are eligible to be sent to the * Returns the IDs of some messages that are eligible to be sent to the
* given contact and have been requested by the contact, up to the given * given contact and have been requested by the contact, up to the given
* total length. * total length.
* <p>
* Locking: read.
*/ */
Collection<MessageId> getRequestedMessagesToSend(T txn, ContactId c, Collection<MessageId> getRequestedMessagesToSend(T txn, ContactId c,
int maxLength) throws DbException; int maxLength) throws DbException;
/** /**
* Returns all settings in the given namespace. * Returns all settings in the given namespace.
* <p>
* Locking: read.
*/ */
Settings getSettings(T txn, String namespace) throws DbException; Settings getSettings(T txn, String namespace) throws DbException;
/** /**
* Returns all transport keys for the given transport. * Returns all transport keys for the given transport.
* <p>
* Locking: read.
*/ */
Map<ContactId, TransportKeys> getTransportKeys(T txn, TransportId t) Map<ContactId, TransportKeys> getTransportKeys(T txn, TransportId t)
throws DbException; throws DbException;
/** /**
* Returns the maximum latencies in milliseconds of all transports. * Returns the maximum latencies in milliseconds of all transports.
* <p>
* Locking: read.
*/ */
Map<TransportId, Integer> getTransportLatencies(T txn) throws DbException; Map<TransportId, Integer> getTransportLatencies(T txn) throws DbException;
/** /**
* Returns the IDs of all contacts to which the given group is visible. * Returns the IDs of all contacts to which the given group is visible.
* <p>
* Locking: read.
*/ */
Collection<ContactId> getVisibility(T txn, GroupId g) throws DbException; Collection<ContactId> getVisibility(T txn, GroupId g) throws DbException;
/** /**
* Increments the outgoing stream counter for the given contact and * Increments the outgoing stream counter for the given contact and
* transport in the given rotation period. * transport in the given rotation period.
* <p>
* Locking: write.
*/ */
void incrementStreamCounter(T txn, ContactId c, TransportId t, void incrementStreamCounter(T txn, ContactId c, TransportId t,
long rotationPeriod) throws DbException; long rotationPeriod) throws DbException;
@@ -445,8 +345,6 @@ interface Database<T> {
/** /**
* Marks the given messages as not needing to be acknowledged to the * Marks the given messages as not needing to be acknowledged to the
* given contact. * given contact.
* <p>
* Locking: write.
*/ */
void lowerAckFlag(T txn, ContactId c, Collection<MessageId> acked) void lowerAckFlag(T txn, ContactId c, Collection<MessageId> acked)
throws DbException; throws DbException;
@@ -454,8 +352,6 @@ interface Database<T> {
/** /**
* Marks the given messages as not having been requested by the given * Marks the given messages as not having been requested by the given
* contact. * contact.
* <p>
* Locking: write.
*/ */
void lowerRequestedFlag(T txn, ContactId c, Collection<MessageId> requested) void lowerRequestedFlag(T txn, ContactId c, Collection<MessageId> requested)
throws DbException; throws DbException;
@@ -463,8 +359,6 @@ interface Database<T> {
/* /*
* Merges the given metadata with the existing metadata for the given * Merges the given metadata with the existing metadata for the given
* group. * group.
* <p>
* Locking: write.
*/ */
void mergeGroupMetadata(T txn, GroupId g, Metadata meta) void mergeGroupMetadata(T txn, GroupId g, Metadata meta)
throws DbException; throws DbException;
@@ -472,8 +366,6 @@ interface Database<T> {
/* /*
* Merges the given metadata with the existing metadata for the given * Merges the given metadata with the existing metadata for the given
* message. * message.
* <p>
* Locking: write.
*/ */
void mergeMessageMetadata(T txn, MessageId m, Metadata meta) void mergeMessageMetadata(T txn, MessageId m, Metadata meta)
throws DbException; throws DbException;
@@ -481,65 +373,47 @@ interface Database<T> {
/** /**
* Merges the given settings with the existing settings in the given * Merges the given settings with the existing settings in the given
* namespace. * namespace.
* <p>
* Locking: write.
*/ */
void mergeSettings(T txn, Settings s, String namespace) throws DbException; void mergeSettings(T txn, Settings s, String namespace) throws DbException;
/** /**
* Marks a message as needing to be acknowledged to the given contact. * Marks a message as needing to be acknowledged to the given contact.
* <p>
* Locking: write.
*/ */
void raiseAckFlag(T txn, ContactId c, MessageId m) throws DbException; void raiseAckFlag(T txn, ContactId c, MessageId m) throws DbException;
/** /**
* Marks a message as having been requested by the given contact. * Marks a message as having been requested by the given contact.
* <p>
* Locking: write.
*/ */
void raiseRequestedFlag(T txn, ContactId c, MessageId m) throws DbException; void raiseRequestedFlag(T txn, ContactId c, MessageId m) throws DbException;
/** /**
* Marks a message as having been seen by the given contact. * Marks a message as having been seen by the given contact.
* <p>
* Locking: write.
*/ */
void raiseSeenFlag(T txn, ContactId c, MessageId m) throws DbException; void raiseSeenFlag(T txn, ContactId c, MessageId m) throws DbException;
/** /**
* Removes a contact from the database. * Removes a contact from the database.
* <p>
* Locking: write.
*/ */
void removeContact(T txn, ContactId c) throws DbException; void removeContact(T txn, ContactId c) throws DbException;
/** /**
* Removes a group (and all associated state) from the database. * Removes a group (and all associated state) from the database.
* <p>
* Locking: write.
*/ */
void removeGroup(T txn, GroupId g) throws DbException; void removeGroup(T txn, GroupId g) throws DbException;
/** /**
* Removes a local pseudonym (and all associated state) from the database. * Removes a local pseudonym (and all associated state) from the database.
* <p>
* Locking: write.
*/ */
void removeLocalAuthor(T txn, AuthorId a) throws DbException; void removeLocalAuthor(T txn, AuthorId a) throws DbException;
/** /**
* Removes a message (and all associated state) from the database. * Removes a message (and all associated state) from the database.
* <p>
* Locking: write.
*/ */
void removeMessage(T txn, MessageId m) throws DbException; void removeMessage(T txn, MessageId m) throws DbException;
/** /**
* Removes an offered message that was offered by the given contact, or * Removes an offered message that was offered by the given contact, or
* returns false if there is no such message. * returns false if there is no such message.
* <p>
* Locking: write.
*/ */
boolean removeOfferedMessage(T txn, ContactId c, MessageId m) boolean removeOfferedMessage(T txn, ContactId c, MessageId m)
throws DbException; throws DbException;
@@ -547,70 +421,52 @@ interface Database<T> {
/** /**
* Removes the given offered messages that were offered by the given * Removes the given offered messages that were offered by the given
* contact. * contact.
* <p>
* Locking: write.
*/ */
void removeOfferedMessages(T txn, ContactId c, void removeOfferedMessages(T txn, ContactId c,
Collection<MessageId> requested) throws DbException; Collection<MessageId> requested) throws DbException;
/** /**
* Removes a transport (and all associated state) from the database. * Removes a transport (and all associated state) from the database.
* <p>
* Locking: write.
*/ */
void removeTransport(T txn, TransportId t) throws DbException; void removeTransport(T txn, TransportId t) throws DbException;
/** /**
* Makes a group invisible to the given contact. * Makes a group invisible to the given contact.
* <p>
* Locking: write.
*/ */
void removeVisibility(T txn, ContactId c, GroupId g) throws DbException; void removeVisibility(T txn, ContactId c, GroupId g) throws DbException;
/** /**
* Resets the transmission count and expiry time of the given message with * Resets the transmission count and expiry time of the given message with
* respect to the given contact. * respect to the given contact.
* <p>
* Locking: write.
*/ */
void resetExpiryTime(T txn, ContactId c, MessageId m) throws DbException; void resetExpiryTime(T txn, ContactId c, MessageId m) throws DbException;
/** /**
* Sets the status of the given contact. * Sets the status of the given contact.
* <p>
* Locking: write.
*/ */
void setContactStatus(T txn, ContactId c, StorageStatus s) void setContactStatus(T txn, ContactId c, StorageStatus s)
throws DbException; throws DbException;
/** /**
* Sets the status of the given local pseudonym. * Sets the status of the given local pseudonym.
* <p>
* Locking: write.
*/ */
void setLocalAuthorStatus(T txn, AuthorId a, StorageStatus s) void setLocalAuthorStatus(T txn, AuthorId a, StorageStatus s)
throws DbException; throws DbException;
/** /**
* Marks the given message as shared or unshared. * Marks the given message as shared or unshared.
* <p>
* Locking: write.
*/ */
void setMessageShared(T txn, MessageId m, boolean shared) void setMessageShared(T txn, MessageId m, boolean shared)
throws DbException; throws DbException;
/** /**
* Marks the given message as valid or invalid. * Marks the given message as valid or invalid.
* <p>
* Locking: write.
*/ */
void setMessageValid(T txn, MessageId m, boolean valid) throws DbException; void setMessageValid(T txn, MessageId m, boolean valid) throws DbException;
/** /**
* Sets the reordering window for the given contact and transport in the * Sets the reordering window for the given contact and transport in the
* given rotation period. * given rotation period.
* <p>
* Locking: write.
*/ */
void setReorderingWindow(T txn, ContactId c, TransportId t, void setReorderingWindow(T txn, ContactId c, TransportId t,
long rotationPeriod, long base, byte[] bitmap) throws DbException; long rotationPeriod, long base, byte[] bitmap) throws DbException;
@@ -619,16 +475,12 @@ interface Database<T> {
* Updates the transmission count and expiry time of the given message * Updates the transmission count and expiry time of the given message
* with respect to the given contact, using the latency of the transport * with respect to the given contact, using the latency of the transport
* over which it was sent. * over which it was sent.
* <p>
* Locking: write.
*/ */
void updateExpiryTime(T txn, ContactId c, MessageId m, int maxLatency) void updateExpiryTime(T txn, ContactId c, MessageId m, int maxLatency)
throws DbException; throws DbException;
/** /**
* Stores the given transport keys, deleting any keys they have replaced. * Stores the given transport keys, deleting any keys they have replaced.
* <p>
* Locking: write.
*/ */
void updateTransportKeys(T txn, Map<ContactId, TransportKeys> keys) void updateTransportKeys(T txn, Map<ContactId, TransportKeys> keys)
throws DbException; throws DbException;

File diff suppressed because it is too large Load Diff

View File

@@ -41,7 +41,6 @@ import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
@@ -228,8 +227,6 @@ abstract class JdbcDatabase implements Database<Connection> {
private final LinkedList<Connection> connections = private final LinkedList<Connection> connections =
new LinkedList<Connection>(); // Locking: connectionsLock new LinkedList<Connection>(); // Locking: connectionsLock
private final AtomicInteger transactionCount = new AtomicInteger(0);
private int openConnections = 0; // Locking: connectionsLock private int openConnections = 0; // Locking: connectionsLock
private boolean closed = false; // Locking: connectionsLock private boolean closed = false; // Locking: connectionsLock
@@ -369,7 +366,6 @@ abstract class JdbcDatabase implements Database<Connection> {
} catch (SQLException e) { } catch (SQLException e) {
throw new DbException(e); throw new DbException(e);
} }
transactionCount.incrementAndGet();
return txn; return txn;
} }
@@ -418,14 +414,6 @@ abstract class JdbcDatabase implements Database<Connection> {
} }
} }
public int getTransactionCount() {
return transactionCount.get();
}
public void resetTransactionCount() {
transactionCount.set(0);
}
protected void closeAllConnections() throws SQLException { protected void closeAllConnections() throws SQLException {
boolean interrupted = false; boolean interrupted = false;
connectionsLock.lock(); connectionsLock.lock();