Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/DBQuery.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ struct DBQuery : NonCopyable {
flat_hash_set<uint64_t> sentEventsCurr;
uint64_t lastWorkChecked = 0;

uint64_t maxTotalEvents = 0;
uint64_t currScanTime = 0;
uint64_t currScanSaveRestores = 0;
uint64_t totalTime = 0;
Expand Down Expand Up @@ -319,6 +320,7 @@ struct DBQuery : NonCopyable {
}

sentEventsCurr.insert(levId);
if (maxTotalEvents > 0 && sentEventsFull.size() >= maxTotalEvents) return true;
return sentEventsCurr.size() >= f.limit;
}, [&](uint64_t approxWork){
if (approxWork > lastWorkChecked + 2'000) {
Expand Down Expand Up @@ -355,6 +357,11 @@ struct DBQuery : NonCopyable {

currScanTime = 0;
currScanSaveRestores = 0;

if (maxTotalEvents > 0 && sentEventsFull.size() >= maxTotalEvents) {
LW << "[" << sub.connId << "] REQ='" << sub.subId.sv() << "' hit maxTotalEventsPerReq limit (" << maxTotalEvents << ")";
break;
}
}

if (logMetrics) {
Expand Down
1 change: 1 addition & 0 deletions src/QueryScheduler.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ struct QueryScheduler : NonCopyable {
}

DBQuery *q = new DBQuery(sub);
q->maxTotalEvents = cfg().relay__maxTotalEventsPerReq;

connQueries.try_emplace(q->sub.subId, q);
running.push_front(q);
Expand Down
3 changes: 3 additions & 0 deletions src/apps/relay/golpe.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ config:
- name: relay__maxFilterLimit
desc: "Maximum records that can be returned per filter"
default: 500
- name: relay__maxTotalEventsPerReq
desc: "Maximum total events returned across all filters in a REQ (0 = unlimited)"
default: 0
- name: relay__maxTagsPerFilter
desc: "Maximum number of tag filters allowed per filter (O(N^2) in matching, so keep it small)"
default: 3
Expand Down
3 changes: 3 additions & 0 deletions strfry.conf
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ relay {
# Maximum records that can be returned per filter
maxFilterLimit = 500

# Maximum total events returned across all filters in a REQ (0 = unlimited)
maxTotalEventsPerReq = 0

# Maximum number of tag filters allowed per filter
maxTagsPerFilter = 3

Expand Down
Loading