in evcache-core/src/main/java/com/netflix/evcache/pool/EVCacheClient.java [1650:1727]
public List<String> getAllKeys(final int limit) {
final List<String> keyList = new ArrayList<String>(limit);
byte[] array = new byte[EVCacheConfig.getInstance().getPropertyRepository().get(appName + ".all.keys.reader.buffer.size.bytes", Integer.class).orElse(4*1024*1024).get()];
final int waitInSec = EVCacheConfig.getInstance().getPropertyRepository().get(appName + ".all.keys.reader.wait.duration.sec", Integer.class).orElse(60).get();
for(InetSocketAddress address : memcachedNodesInZone) {
//final List<String> keyList = new ArrayList<String>(limit);
Socket socket = null;
PrintWriter printWriter = null;
BufferedInputStream bufferedReader = null;
try {
socket = new Socket(address.getHostName(), address.getPort());
printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.print("lru_crawler metadump all \r\n");
printWriter.print("quit \r\n");
printWriter.flush();
bufferedReader = new BufferedInputStream(socket.getInputStream());
while(isDataAvailableForRead(bufferedReader, waitInSec, TimeUnit.SECONDS, socket)) {
int read = bufferedReader.read(array);
if (log.isDebugEnabled()) log.debug("Number of bytes read = " +read);
if(read > 0) {
StringBuilder b = new StringBuilder();
boolean start = true;
for (int i = 0; i < read; i++) {
if(array[i] == ' ') {
start = false;
if(b.length() > 4) keyList.add(URLDecoder.decode(b.substring(4), StandardCharsets.UTF_8.name()));
b = new StringBuilder();
}
if(start) b.append((char)array[i]);
if(array[i] == '\n') {
start = true;
}
if(keyList.size() >= limit) {
if (log.isDebugEnabled()) log.debug("Record Limit reached. Will break and return");
return keyList;
}
}
} else if (read < 0 ){
break;
}
}
} catch (Exception e) {
if(socket != null) {
try {
socket.close();
} catch (IOException e1) {
log.error("Error closing socket", e1);
}
}
log.error("Exception", e);
}
finally {
if(bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e1) {
log.error("Error closing bufferedReader", e1);
}
}
if(printWriter != null) {
try {
printWriter.close();
} catch (Exception e1) {
log.error("Error closing socket", e1);
}
}
if(socket != null) {
try {
socket.close();
} catch (IOException e) {
if (log.isDebugEnabled()) log.debug("Error closing socket", e);
}
}
}
}
return keyList;
}