mirror of
https://github.com/hoytech/strfry.git
synced 2025-06-18 09:17:12 +00:00
limit on events that can be processed by a sync
This commit is contained in:
@ -54,6 +54,7 @@ Current reason codes are:
|
|||||||
|
|
||||||
* `RESULTS_TOO_BIG`
|
* `RESULTS_TOO_BIG`
|
||||||
* Relays can optionally reject queries that would require them to process too many records, or records that are too old
|
* Relays can optionally reject queries that would require them to process too many records, or records that are too old
|
||||||
|
* The maximum number of records that can be processed can optionally be returned as the 4th element in the response
|
||||||
* `CLOSED`
|
* `CLOSED`
|
||||||
* Because the `NEG-OPEN` queries are stateful, relays may choose to time-out inactive queries to recover memory resources
|
* Because the `NEG-OPEN` queries are stateful, relays may choose to time-out inactive queries to recover memory resources
|
||||||
* `FILTER_NOT_FOUND`
|
* `FILTER_NOT_FOUND`
|
||||||
|
@ -149,6 +149,9 @@ void cmd_sync(const std::vector<std::string> &subArgs) {
|
|||||||
} else if (msg.at(0) == "EOSE") {
|
} else if (msg.at(0) == "EOSE") {
|
||||||
inFlightDown = false;
|
inFlightDown = false;
|
||||||
writer.wait();
|
writer.wait();
|
||||||
|
} else if (msg.at(0) == "NEG-ERR") {
|
||||||
|
LE << "Got NEG-ERR response from relay: " << msg;
|
||||||
|
::exit(1);
|
||||||
} else {
|
} else {
|
||||||
LW << "Unexpected message from relay: " << msg;
|
LW << "Unexpected message from relay: " << msg;
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ void RelayServer::ingesterProcessNegentropy(lmdb::txn &txn, Decompressor &decomp
|
|||||||
if (arr.get_array().size() < 5) throw herr("negentropy query missing elements");
|
if (arr.get_array().size() < 5) throw herr("negentropy query missing elements");
|
||||||
|
|
||||||
NostrFilterGroup filter;
|
NostrFilterGroup filter;
|
||||||
auto maxFilterLimit = MAX_U64;
|
auto maxFilterLimit = cfg().relay__negentropy__maxSyncEvents + 1;
|
||||||
|
|
||||||
if (arr.at(2).is_string()) {
|
if (arr.at(2).is_string()) {
|
||||||
auto ev = lookupEventById(txn, from_hex(arr.at(2).get_string()));
|
auto ev = lookupEventById(txn, from_hex(arr.at(2).get_string()));
|
||||||
|
@ -80,6 +80,20 @@ void RelayServer::runNegentropy(ThreadPool<MsgNegentropy>::Thread &thr) {
|
|||||||
LI << "[" << sub.connId << "] Negentropy query matched " << view->ne.items.size() << " events in "
|
LI << "[" << sub.connId << "] Negentropy query matched " << view->ne.items.size() << " events in "
|
||||||
<< (hoytech::curr_time_us() - view->startTime) << "us";
|
<< (hoytech::curr_time_us() - view->startTime) << "us";
|
||||||
|
|
||||||
|
if (view->ne.items.size() > cfg().relay__negentropy__maxSyncEvents) {
|
||||||
|
LI << "[" << sub.connId << "] Negentropy query size exceeeded " << cfg().relay__negentropy__maxSyncEvents;
|
||||||
|
|
||||||
|
sendToConn(sub.connId, tao::json::to_string(tao::json::value::array({
|
||||||
|
"NEG-ERR",
|
||||||
|
sub.subId.str(),
|
||||||
|
"RESULTS_TOO_BIG",
|
||||||
|
cfg().relay__negentropy__maxSyncEvents
|
||||||
|
})));
|
||||||
|
|
||||||
|
views.removeView(sub.connId, sub.subId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
view->ne.seal();
|
view->ne.seal();
|
||||||
|
|
||||||
auto resp = view->ne.reconcile(view->initialMsg);
|
auto resp = view->ne.reconcile(view->initialMsg);
|
||||||
|
@ -94,3 +94,7 @@ config:
|
|||||||
desc: negentropy threads: Handle negentropy protocol messages
|
desc: negentropy threads: Handle negentropy protocol messages
|
||||||
default: 2
|
default: 2
|
||||||
noReload: true
|
noReload: true
|
||||||
|
|
||||||
|
- name: relay__negentropy__maxSyncEvents
|
||||||
|
desc: "Maximum records that sync will process before returning an error"
|
||||||
|
default: 1000000
|
||||||
|
@ -124,4 +124,9 @@ relay {
|
|||||||
# negentropy threads: Handle negentropy protocol messages (restart required)
|
# negentropy threads: Handle negentropy protocol messages (restart required)
|
||||||
negentropy = 2
|
negentropy = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
negentropy {
|
||||||
|
# Maximum records that sync will process before returning an error
|
||||||
|
maxSyncEvents = 1000000
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user