HCOLL-167 fixed key set by added a compact method

This commit is contained in:
Rob Austin
2014-10-28 13:13:35 +00:00
parent ecef2ef98b
commit f8a1872d32
3 changed files with 19 additions and 23 deletions
@@ -605,20 +605,15 @@ class StatelessChronicleMap<K, V> implements ChronicleMap<K, V>, Closeable {
final Set<Map.Entry<K, V>> result = new HashSet<Map.Entry<K, V>>();
int count = 0;
long total = 0;
for (; ; ) {
boolean hasMoreEntries = in.readBoolean();
count++;
// number of entries in the chunk
long size = in.readInt();
for (int i = 0; i < size; i++) {
total++;
K k = keyValueSerializer.readKey(in);
V v = keyValueSerializer.readValue(in);
result.add(new Entry(k, v));
@@ -627,20 +622,24 @@ class StatelessChronicleMap<K, V> implements ChronicleMap<K, V>, Closeable {
if (!hasMoreEntries)
break;
if (in.remaining() == 0) {
bytes.clear();
bytes.buffer().clear();
} else {
buffer.compact();
}
compact(in);
in = blockingFetchReadOnly(timeoutTime, transactionId);
}
LOG.info("total=" + total);
return result;
}
private void compact(Bytes in) {
if (in.remaining() == 0) {
bytes.clear();
bytes.buffer().clear();
} else {
buffer.compact();
}
}
@NotNull
public synchronized Set<K> keySet() {
@@ -671,6 +670,8 @@ class StatelessChronicleMap<K, V> implements ChronicleMap<K, V>, Closeable {
if (!hasMoreEntries)
break;
compact(in);
in = blockingFetchReadOnly(timeoutTime, transactionId);
}
@@ -1647,7 +1647,7 @@ class StatelessServerConnector<K, V> {
// we've filled up the buffer, so lets give another channel a chance to send
// some data, we don't know the max key size, we will use the entrySize instead
if (writer.remaining() <= maxEntrySizeBytes) {
writeHeader(writer, sizeLocation, count, true, 0);
writeHeader(writer, sizeLocation, count, true);
return false;
}
@@ -1656,7 +1656,7 @@ class StatelessServerConnector<K, V> {
writeKey(key, writer);
}
writeHeader(writer, sizeLocation, count, false, 0);
writeHeader(writer, sizeLocation, count, false);
return true;
}
};
@@ -1695,7 +1695,7 @@ class StatelessServerConnector<K, V> {
// some data, we don't know the max key size, we will use the entrySize instead
if (writer.remaining() <= maxEntrySizeBytes) {
writeHeader(writer, sizeLocation, count, true, i.incrementAndGet());
writeHeader(writer, sizeLocation, count, true);
return false;
}
@@ -1706,7 +1706,7 @@ class StatelessServerConnector<K, V> {
}
writeHeader(writer, sizeLocation, count, false, i.incrementAndGet());
writeHeader(writer, sizeLocation, count, false);
return true;
}
@@ -1737,7 +1737,7 @@ class StatelessServerConnector<K, V> {
}
private void writeHeader(Bytes writer, long sizeLocation, int count,
final boolean hasAnotherChunk, int seq) {
final boolean hasAnotherChunk) {
final long end = writer.position();
final int size = (int) (end - sizeLocation);
writer.position(sizeLocation);