Use a lock to ensure transaction isolation. #272

This commit is contained in:
akwizgran
2016-03-24 17:18:54 +00:00
parent 9714713d73
commit 1855dbbd2d
22 changed files with 248 additions and 189 deletions

View File

@@ -172,7 +172,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
if (interrupted) return;
try {
Ack a;
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
a = db.generateAck(txn, contactId, MAX_MESSAGE_IDS);
txn.setComplete();
@@ -213,7 +213,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
if (interrupted) return;
try {
Collection<byte[]> b;
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
b = db.generateRequestedBatch(txn, contactId,
MAX_PACKET_PAYLOAD_LENGTH, maxLatency);
@@ -255,7 +255,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
if (interrupted) return;
try {
Offer o;
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
o = db.generateOffer(txn, contactId, MAX_MESSAGE_IDS,
maxLatency);
@@ -297,7 +297,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
if (interrupted) return;
try {
Request r;
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
r = db.generateRequest(txn, contactId, MAX_MESSAGE_IDS);
txn.setComplete();

View File

@@ -99,7 +99,7 @@ class IncomingSession implements SyncSession, EventListener {
public void run() {
try {
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
db.receiveAck(txn, contactId, ack);
txn.setComplete();
@@ -123,7 +123,7 @@ class IncomingSession implements SyncSession, EventListener {
public void run() {
try {
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
db.receiveMessage(txn, contactId, message);
txn.setComplete();
@@ -147,7 +147,7 @@ class IncomingSession implements SyncSession, EventListener {
public void run() {
try {
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
db.receiveOffer(txn, contactId, offer);
txn.setComplete();
@@ -171,7 +171,7 @@ class IncomingSession implements SyncSession, EventListener {
public void run() {
try {
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
db.receiveRequest(txn, contactId, request);
txn.setComplete();

View File

@@ -114,7 +114,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
if (interrupted) return;
try {
Ack a;
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
a = db.generateAck(txn, contactId, MAX_MESSAGE_IDS);
txn.setComplete();
@@ -156,7 +156,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
if (interrupted) return;
try {
Collection<byte[]> b;
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
b = db.generateBatch(txn, contactId,
MAX_PACKET_PAYLOAD_LENGTH, maxLatency);

View File

@@ -83,7 +83,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
public void run() {
try {
Queue<MessageId> unvalidated = new LinkedList<MessageId>();
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(true);
try {
unvalidated.addAll(db.getMessagesToValidate(txn, c));
txn.setComplete();
@@ -106,7 +106,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
try {
Message m = null;
Group g = null;
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(true);
try {
MessageId id = unvalidated.poll();
byte[] raw = db.getRawMessage(txn, id);
@@ -160,7 +160,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
dbExecutor.execute(new Runnable() {
public void run() {
try {
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(false);
try {
if (meta == null) {
db.setMessageValid(txn, m, c, false);
@@ -198,7 +198,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
public void run() {
try {
Group g;
Transaction txn = db.startTransaction();
Transaction txn = db.startTransaction(true);
try {
g = db.getGroup(txn, m.getGroupId());
txn.setComplete();