parent
							
								
									7c60e487cc
								
							
						
					
					
						commit
						e91a48b5e1
					
				|  | @ -500,7 +500,7 @@ public class LocalBulletinBoardClient implements DeletableSubscriptionBulletinBo | |||
|             MessagePoster poster = new MessagePoster(msg); | ||||
|             poster.call(); | ||||
| 
 | ||||
|             digest.update(msg); | ||||
|             digest.update(msg.getMsg()); | ||||
|             return digest.digestAsMessageID(); | ||||
| 
 | ||||
|     } | ||||
|  |  | |||
|  | @ -26,8 +26,11 @@ public class SimpleBulletinBoardSynchronizer implements BulletinBoardSynchronize | |||
|     private List<FutureCallback<SyncStatus>> syncStatusCallbacks; | ||||
| 
 | ||||
|     private static final MessageFilterList EMPTY_FILTER = MessageFilterList.getDefaultInstance(); | ||||
|     private static final int SLEEP_INTERVAL = 10000; // 10 Seconds
 | ||||
|     private static final int WAIT_CAP = 300000; // 5 minutes wait before deciding that the sync has failed fatally
 | ||||
|     private static final int DEFAULT_SLEEP_INTERVAL = 10000; // 10 Seconds
 | ||||
|     private static final int DEFAULT_WAIT_CAP = 300000; // 5 minutes wait before deciding that the sync has failed fatally
 | ||||
| 
 | ||||
|     private final int SLEEP_INTERVAL; | ||||
|     private final int WAIT_CAP; | ||||
| 
 | ||||
|     private Semaphore semaphore; | ||||
| 
 | ||||
|  | @ -123,6 +126,7 @@ public class SimpleBulletinBoardSynchronizer implements BulletinBoardSynchronize | |||
| 
 | ||||
|             if (result.size() == 0) { | ||||
|                 newStatus = SyncStatus.SYNCHRONIZED; | ||||
|                 semaphore.release(); | ||||
|             } | ||||
| 
 | ||||
|             else{   // Upload messages
 | ||||
|  | @ -181,8 +185,14 @@ public class SimpleBulletinBoardSynchronizer implements BulletinBoardSynchronize | |||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public SimpleBulletinBoardSynchronizer() { | ||||
|     public SimpleBulletinBoardSynchronizer(int sleepInterval, int waitCap) { | ||||
|         this.syncStatus = SyncStatus.STOPPED; | ||||
|         this.SLEEP_INTERVAL = sleepInterval; | ||||
|         this.WAIT_CAP = waitCap; | ||||
|     } | ||||
| 
 | ||||
|     public SimpleBulletinBoardSynchronizer() { | ||||
|         this(DEFAULT_SLEEP_INTERVAL, DEFAULT_WAIT_CAP); | ||||
|     } | ||||
| 
 | ||||
|     private synchronized void updateSyncStatus(SyncStatus newStatus) { | ||||
|  | @ -257,12 +267,8 @@ public class SimpleBulletinBoardSynchronizer implements BulletinBoardSynchronize | |||
| 
 | ||||
|                 do { | ||||
| 
 | ||||
|                     if (syncStatus == SyncStatus.PENDING || syncStatus == SyncStatus.SERVER_ERROR) { | ||||
| 
 | ||||
|                     localClient.readMessages(EMPTY_FILTER, callback); | ||||
| 
 | ||||
|                     } | ||||
| 
 | ||||
|                     try { | ||||
| 
 | ||||
|                         semaphore.tryAcquire(WAIT_CAP, TimeUnit.MILLISECONDS); | ||||
|  | @ -272,7 +278,6 @@ public class SimpleBulletinBoardSynchronizer implements BulletinBoardSynchronize | |||
|                         // We expect an interruption when the upload will complete
 | ||||
|                     } | ||||
| 
 | ||||
| 
 | ||||
|                 } while (syncStatus == SyncStatus.PENDING); | ||||
| 
 | ||||
|                 // Database is synced. Wait for new data.
 | ||||
|  |  | |||
|  | @ -42,6 +42,9 @@ public class BulletinBoardSynchronizerTest { | |||
|     private static final int THREAD_NUM = 3; | ||||
|     private static final int SUBSCRIPTION_INTERVAL = 1000; | ||||
| 
 | ||||
|     private static final int SYNC_SLEEP_INTERVAL = 100; | ||||
|     private static final int SYNC_WAIT_CAP = 200; | ||||
| 
 | ||||
|     private DeletableSubscriptionBulletinBoardClient localClient; | ||||
|     private AsyncBulletinBoardClient remoteClient; | ||||
| 
 | ||||
|  | @ -70,6 +73,7 @@ public class BulletinBoardSynchronizerTest { | |||
|         signerIDs = new ByteString[1]; | ||||
| 
 | ||||
|         signers[0] = new GenericBatchDigitalSignature(new ECDSASignature()); | ||||
|         signerIDs[0] = signers[0].getSignerID(); | ||||
| 
 | ||||
|         InputStream keyStream = BulletinBoardSynchronizerTest.class.getResourceAsStream(KEYFILE_EXAMPLE); | ||||
|         char[] password = KEYFILE_PASSWORD1.toCharArray(); | ||||
|  | @ -122,7 +126,7 @@ public class BulletinBoardSynchronizerTest { | |||
|                 THREAD_NUM, | ||||
|                 SUBSCRIPTION_INTERVAL); | ||||
| 
 | ||||
|         synchronizer = new SimpleBulletinBoardSynchronizer(); | ||||
|         synchronizer = new SimpleBulletinBoardSynchronizer(SYNC_SLEEP_INTERVAL, SYNC_WAIT_CAP); | ||||
|         synchronizer.init(localClient, remoteClient); | ||||
| 
 | ||||
|         semaphore = new Semaphore(0); | ||||
|  | @ -200,15 +204,19 @@ public class BulletinBoardSynchronizerTest { | |||
|         int[] expectedCounts = {2,0}; | ||||
|         synchronizer.subscribeToRemainingMessagesCount(new MessageCountCallback(expectedCounts)); | ||||
| 
 | ||||
|         Thread t = new Thread(synchronizer); | ||||
|         t.run(); | ||||
|         Thread syncThread = new Thread(synchronizer); | ||||
|         syncThread.start(); | ||||
| 
 | ||||
|         semaphore.acquire(); | ||||
|         semaphore.acquire(2); | ||||
| 
 | ||||
|         synchronizer.stop(); | ||||
|         t.join(); | ||||
|         syncThread.join(); | ||||
| 
 | ||||
|         assertThat("Exception thrown by Synchronizer: " + thrown.get(0).getMessage(), thrown.size() == 0); | ||||
|         if (thrown.size() > 0) { | ||||
|             for (Throwable t : thrown) | ||||
|                 System.err.println(t.getMessage()); | ||||
|             assertThat("Exception thrown by Synchronizer: " + thrown.get(0).getMessage(), false); | ||||
|         } | ||||
| 
 | ||||
|         List<BulletinBoardMessage> msgList = remoteClient.readMessages(MessageFilterList.newBuilder() | ||||
|                 .addFilter(MessageFilter.newBuilder() | ||||
|  |  | |||
|  | @ -16,8 +16,6 @@ import java.security.cert.CertificateException; | |||
| import java.util.*; | ||||
| import java.util.concurrent.Semaphore; | ||||
| 
 | ||||
| import static org.hamcrest.CoreMatchers.is; | ||||
| import static org.junit.Assert.assertThat; | ||||
| import static org.junit.Assert.fail; | ||||
| 
 | ||||
| /** | ||||
|  | @ -187,8 +185,6 @@ public class GenericSubscriptionClientTester { | |||
| 
 | ||||
|     public void subscriptionTest() throws SignatureException, CommunicationException { | ||||
| 
 | ||||
|         final int FIRST_POST_ID = 201; | ||||
|         final int SECOND_POST_ID = 202; | ||||
|         final String COMMON_TAG = "SUBSCRIPTION_TEST"; | ||||
|          | ||||
|         List<String> tags = new LinkedList<>(); | ||||
|  |  | |||
|  | @ -231,7 +231,7 @@ public class H2QueryProvider implements BulletinBoardSQLServer.SQLQueryProvider | |||
|         BasicDataSource dataSource = new BasicDataSource(); | ||||
| 
 | ||||
|         dataSource.setDriverClassName("org.h2.Driver"); | ||||
|         dataSource.setUrl("jdbc:h2:~/" + dbName); | ||||
|         dataSource.setUrl("jdbc:h2:mem:" + dbName); | ||||
| 
 | ||||
|         return dataSource; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue