@Override
public byte[] onUpdate(OStorage storage, byte iRecordType, final ORecordId rid, final int iRecordVersion,
final byte[] iRecordContent, final AtomicInteger iDatabaseVersion) {
if (iRecordType == ODocument.RECORD_TYPE) {
OStorageOperationResult<ORawBuffer> res = storage.readRecord(rid, null, false, false, null);
final ODocument storedRecord = new ODocument(rid).fromStream(res.getResult().getBuffer());
ODocument newRecord = (ODocument) ORecordSaveThreadLocal.getLast();
if (newRecord == null || !newRecord.getIdentity().equals(rid))
newRecord = new ODocument(rid).fromStream(iRecordContent);
storedRecord.merge(newRecord, true, true);
iDatabaseVersion.set(Math.max(iDatabaseVersion.get(), iRecordVersion) + 1);
return storedRecord.toStream();
} else
checkVersions(rid, iRecordVersion, iDatabaseVersion.get());
return null;
}