mirror of
https://github.com/yacy/yacy_search_server.git
synced 2024-09-19 00:01:41 +02:00
added necessary synchronization for logging statistics (causes deadlock)
git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6083 6c8d7289-2bf4-0310-a012-ef5d649a1542
This commit is contained in:
parent
e377a1e9a1
commit
b5bc399cea
|
@ -195,28 +195,30 @@ public class yacysearch {
|
||||||
Log.logInfo("LOCAL_SEARCH", "ACCECC CONTROL: WHITELISTED CLIENT FROM " + client + " gets no search restrictions");
|
Log.logInfo("LOCAL_SEARCH", "ACCECC CONTROL: WHITELISTED CLIENT FROM " + client + " gets no search restrictions");
|
||||||
} else if (global || fetchSnippets) {
|
} else if (global || fetchSnippets) {
|
||||||
// in case that we do a global search or we want to fetch snippets, we check for DoS cases
|
// in case that we do a global search or we want to fetch snippets, we check for DoS cases
|
||||||
int accInOneSecond = trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 1000)).size();
|
synchronized (trackerHandles) {
|
||||||
int accInThreeSeconds = trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 3000)).size();
|
int accInOneSecond = trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 1000)).size();
|
||||||
int accInOneMinute = trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 60000)).size();
|
int accInThreeSeconds = trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 3000)).size();
|
||||||
int accInTenMinutes = trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 600000)).size();
|
int accInOneMinute = trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 60000)).size();
|
||||||
if (accInTenMinutes > 600) {
|
int accInTenMinutes = trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 600000)).size();
|
||||||
global = false;
|
if (accInTenMinutes > 600) {
|
||||||
fetchSnippets = false;
|
global = false;
|
||||||
block = true;
|
fetchSnippets = false;
|
||||||
Log.logWarning("LOCAL_SEARCH", "ACCECC CONTROL: CLIENT FROM " + client + ": " + accInTenMinutes + " searches in ten minutes, fully blocked (no results generated)");
|
block = true;
|
||||||
} else if (accInOneMinute > 200) {
|
Log.logWarning("LOCAL_SEARCH", "ACCECC CONTROL: CLIENT FROM " + client + ": " + accInTenMinutes + " searches in ten minutes, fully blocked (no results generated)");
|
||||||
global = false;
|
} else if (accInOneMinute > 200) {
|
||||||
fetchSnippets = false;
|
global = false;
|
||||||
block = true;
|
fetchSnippets = false;
|
||||||
Log.logWarning("LOCAL_SEARCH", "ACCECC CONTROL: CLIENT FROM " + client + ": " + accInOneMinute + " searches in one minute, fully blocked (no results generated)");
|
block = true;
|
||||||
} else if (accInThreeSeconds > 1) {
|
Log.logWarning("LOCAL_SEARCH", "ACCECC CONTROL: CLIENT FROM " + client + ": " + accInOneMinute + " searches in one minute, fully blocked (no results generated)");
|
||||||
global = false;
|
} else if (accInThreeSeconds > 1) {
|
||||||
fetchSnippets = false;
|
global = false;
|
||||||
Log.logWarning("LOCAL_SEARCH", "ACCECC CONTROL: CLIENT FROM " + client + ": " + accInThreeSeconds + " searches in three seconds, blocked global search and snippets");
|
fetchSnippets = false;
|
||||||
} else if (accInOneSecond > 2) {
|
Log.logWarning("LOCAL_SEARCH", "ACCECC CONTROL: CLIENT FROM " + client + ": " + accInThreeSeconds + " searches in three seconds, blocked global search and snippets");
|
||||||
global = false;
|
} else if (accInOneSecond > 2) {
|
||||||
fetchSnippets = false;
|
global = false;
|
||||||
Log.logWarning("LOCAL_SEARCH", "ACCECC CONTROL: CLIENT FROM " + client + ": " + accInOneSecond + " searches in one second, blocked global search and snippets");
|
fetchSnippets = false;
|
||||||
|
Log.logWarning("LOCAL_SEARCH", "ACCECC CONTROL: CLIENT FROM " + client + ": " + accInOneSecond + " searches in one second, blocked global search and snippets");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,9 +511,11 @@ public class yacysearch {
|
||||||
|
|
||||||
// update the search tracker
|
// update the search tracker
|
||||||
try {
|
try {
|
||||||
trackerHandles.add(theQuery.handle);
|
synchronized (trackerHandles) {
|
||||||
if (trackerHandles.size() > 1000) trackerHandles.remove(trackerHandles.first());
|
trackerHandles.add(theQuery.handle);
|
||||||
sb.localSearchTracker.put(client, trackerHandles);
|
if (trackerHandles.size() > 1000) trackerHandles.remove(trackerHandles.first());
|
||||||
|
sb.localSearchTracker.put(client, trackerHandles);
|
||||||
|
}
|
||||||
if (sb.localSearchTracker.size() > 1000) sb.localSearchTracker.remove(sb.localSearchTracker.keys().nextElement());
|
if (sb.localSearchTracker.size() > 1000) sb.localSearchTracker.remove(sb.localSearchTracker.keys().nextElement());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user