Move all event dispatching to it's own thread. Update tests to wait a bit

This commit is contained in:
Zlatin Balevsky
2018-07-26 01:02:32 +01:00
parent f8a36d310f
commit 3d78b110f0
2 changed files with 21 additions and 1 deletions

View File

@@ -1,6 +1,8 @@
package com.muwire.core package com.muwire.core
import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.CopyOnWriteArrayList
import java.util.concurrent.Executor
import java.util.concurrent.Executors
import com.muwire.core.files.FileSharedEvent import com.muwire.core.files.FileSharedEvent
@@ -9,8 +11,18 @@ import groovy.util.logging.Log
class EventBus { class EventBus {
private Map handlers = new HashMap() private Map handlers = new HashMap()
private final Executor executor = Executors.newSingleThreadExecutor {r ->
def rv = new Thread(r)
rv.setDaemon(true)
rv.setName("event-bus")
rv
}
void publish(Event e) { void publish(Event e) {
executor.execute({publishInternal(e)} as Runnable)
}
private void publishInternal(Event e) {
log.fine "publishing event of type ${e.getClass().getSimpleName()} seqNo ${e.seqNo} timestamp ${e.timestamp}" log.fine "publishing event of type ${e.getClass().getSimpleName()} seqNo ${e.seqNo} timestamp ${e.timestamp}"
def currentHandlers def currentHandlers
final def clazz = e.getClass() final def clazz = e.getClass()

View File

@@ -14,7 +14,7 @@ class FileManagerTest {
EventBus eventBus EventBus eventBus
FileManager manager FileManager manager
ResultsEvent results volatile ResultsEvent results
def listener = new Object() { def listener = new Object() {
void onResultsEvent(ResultsEvent e) { void onResultsEvent(ResultsEvent e) {
@@ -42,6 +42,7 @@ class FileManagerTest {
SearchEvent se = new SearchEvent(searchHash: ih.getRoot(), uuid: uuid) SearchEvent se = new SearchEvent(searchHash: ih.getRoot(), uuid: uuid)
manager.onSearchEvent(se) manager.onSearchEvent(se)
Thread.sleep(20)
assert results != null assert results != null
assert results.results.size() == 1 assert results.results.size() == 1
@@ -61,6 +62,7 @@ class FileManagerTest {
SearchEvent se = new SearchEvent(searchHash: ih.getRoot(), uuid: uuid) SearchEvent se = new SearchEvent(searchHash: ih.getRoot(), uuid: uuid)
manager.onSearchEvent(se) manager.onSearchEvent(se)
Thread.sleep(20)
assert results != null assert results != null
assert results.results.size() == 2 assert results.results.size() == 2
@@ -78,6 +80,7 @@ class FileManagerTest {
manager.onFileHashedEvent(fhe) manager.onFileHashedEvent(fhe)
manager.onSearchEvent new SearchEvent(searchHash: new byte[32], uuid: UUID.randomUUID()) manager.onSearchEvent new SearchEvent(searchHash: new byte[32], uuid: UUID.randomUUID())
Thread.sleep(20)
assert results == null assert results == null
} }
@@ -92,6 +95,7 @@ class FileManagerTest {
UUID uuid = UUID.randomUUID() UUID uuid = UUID.randomUUID()
manager.onSearchEvent new SearchEvent(searchTerms: ["a"], uuid:uuid) manager.onSearchEvent new SearchEvent(searchTerms: ["a"], uuid:uuid)
Thread.sleep(20)
assert results != null assert results != null
assert results.results.size() == 1 assert results.results.size() == 1
@@ -113,6 +117,7 @@ class FileManagerTest {
UUID uuid = UUID.randomUUID() UUID uuid = UUID.randomUUID()
manager.onSearchEvent new SearchEvent(searchTerms: ["c"], uuid:uuid) manager.onSearchEvent new SearchEvent(searchTerms: ["c"], uuid:uuid)
Thread.sleep(20)
assert results != null assert results != null
assert results.results.size() == 2 assert results.results.size() == 2
@@ -130,6 +135,7 @@ class FileManagerTest {
manager.onFileHashedEvent(fhe) manager.onFileHashedEvent(fhe)
manager.onSearchEvent new SearchEvent(searchTerms: ["d"], uuid: UUID.randomUUID()) manager.onSearchEvent new SearchEvent(searchTerms: ["d"], uuid: UUID.randomUUID())
Thread.sleep(20)
assert results == null assert results == null
} }
@@ -145,6 +151,7 @@ class FileManagerTest {
manager.onFileUnsharedEvent new FileUnsharedEvent(unsharedFile: sf2) manager.onFileUnsharedEvent new FileUnsharedEvent(unsharedFile: sf2)
manager.onSearchEvent new SearchEvent(searchHash : ih.getRoot()) manager.onSearchEvent new SearchEvent(searchHash : ih.getRoot())
Thread.sleep(20)
assert results != null assert results != null
assert results.results.size() == 1 assert results.results.size() == 1
assert results.results.contains(sf1) assert results.results.contains(sf1)
@@ -166,6 +173,7 @@ class FileManagerTest {
// 1 match left // 1 match left
manager.onSearchEvent new SearchEvent(searchTerms: ["c"]) manager.onSearchEvent new SearchEvent(searchTerms: ["c"])
Thread.sleep(20)
assert results != null assert results != null
assert results.results.size() == 1 assert results.results.size() == 1
assert results.results.contains(sf1) assert results.results.contains(sf1)