mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 14:49:53 +01:00
Removed database locking.
This commit is contained in:
@@ -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
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user