HCOLL-410

This commit is contained in:
leventov
2015-12-14 13:54:04 +03:00
parent a46a0f0ceb
commit e2ba8b3f5a
2 changed files with 13 additions and 24 deletions
@@ -929,12 +929,12 @@ final class ReplicatedChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? supe
throw defaultValueOrPrepareBytesShouldBeSpecified();
}
final long size = metaElemWriter.size(elemWriter, elem);
final long elemSize = metaElemWriter.size(elemWriter, elem);
putValue(pos, entry, valueSizePos,
entryEndAddr, isDeleted,
segmentState,
metaElemWriter, elemWriter, elem, size,
metaElemWriter, elemWriter, elem, elemSize,
hashLookup, sizeOfEverythingBeforeValue);
pos = segmentState.pos;
@@ -943,6 +943,7 @@ final class ReplicatedChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? supe
entry.position(valueSizePos);
long valueSize = readValueSize(entry);
assert valueSize == elemSize;
long valuePos = entry.position();
RV v = readValue.readValue(copies, entry, usingValue, valueSize);
@@ -1153,14 +1154,13 @@ final class ReplicatedChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? supe
}
// put callbacks
boolean hasValueChanged = updateResult != UpdateResult.UNCHANGED;
onPutMaybeRemote(segmentState.pos, false);
if (bytesEventListener != null) {
boolean hasValueChanged = updateResult != UpdateResult.UNCHANGED;
bytesEventListener.onPut(
entry, 0L, metaDataBytes, valueSizePos, false, false, hasValueChanged);
bytesEventListener.onPut(entry, 0L, metaDataBytes, valueSizePos, false,
false, hasValueChanged);
}
if (eventListener != null) {
boolean hasValueChanged = updateResult != UpdateResult.UNCHANGED;
eventListener.onPut(toKey.toInstance(copies, key, keySize),
toValue.toInstance(copies, value, valueSize), null, false,
isDeleted, hasValueChanged, identifier, replacedIdentifier,
@@ -2170,7 +2170,6 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
SearchState searchState = segmentState.searchState;
hashLookup.startSearch(hash2, searchState);
MultiStoreBytes entry = segmentState.tmpBytes;
boolean hasValueChanged = false;
for (long pos; (pos = hashLookup.nextPos(searchState)) >= 0L; ) {
long offset = offsetFromPos(pos);
reuse(entry, offset);
@@ -2195,8 +2194,6 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
} else {
long valueAddr = entry.positionAddr();
long entryEndAddr = valueAddr + prevValueSize;
hasValueChanged = prevValueSize != valueSize ||
!metaValueInterop.startsWith(valueInterop, entry, value);
// putValue may relocate entry and change offset
putValue(pos, entry, valueSizePos, entryEndAddr, false, segmentState,
@@ -2207,11 +2204,13 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
}
// put callbacks
boolean hasValueChanged = updateResult != UpdateResult.UNCHANGED;
onPutMaybeRemote(segmentState.pos, false);
if (bytesEventListener != null)
bytesEventListener.onPut(entry, 0L, metaDataBytes, valueSizePos, false, false, hasValueChanged);
if (bytesEventListener != null) {
bytesEventListener.onPut(entry, 0L, metaDataBytes, valueSizePos, false,
false, hasValueChanged);
}
if (eventListener != null) {
eventListener.onPut(toKey.toInstance(copies, key, keySize),
toValue.toInstance(copies, value, valueSize), null, false,
false, hasValueChanged,
@@ -2232,7 +2231,7 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
onPut(this, segmentState.pos);
if (bytesEventListener != null)
bytesEventListener.onPut(entry, 0L, metaDataBytes,
segmentState.valueSizePos, true, false, hasValueChanged);
segmentState.valueSizePos, true, false, true);
if (eventListener != null) {
byte replacedIdentifier = 0;
long replacedTimeStamp = 0;
@@ -2310,29 +2309,19 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
}
}
// key is not found
VBI valueInterop = getValueInterops.getValueInterop(copies);
MVBI metaValueInterop =
getValueInterops.getMetaValueInterop(copies, valueInterop, value);
long valueSize = putEntry(segmentState, metaKeyInterop, keyInterop, key, keySize,
metaValueInterop, valueInterop, value, entry, false);
boolean hasValueChanged = false;
if (eventListener != null || bytesEventListener != null) {
// todo roman to check this
hasValueChanged =
!metaValueInterop.startsWith(valueInterop, entry, value);
}
// put callbacks
onPut(this, segmentState.pos);
if (bytesEventListener != null)
bytesEventListener.onPut(entry, 0L, metaDataBytes,
segmentState.valueSizePos, true, false, hasValueChanged);
segmentState.valueSizePos, true, false, true);
if (eventListener != null)
eventListener.onPut(toKey.toInstance(copies, key, keySize),
toValue.toInstance(copies, value, valueSize), null, false, true, true,