/** * Returns true if the serialized object is a tombstone. * * @param b the magic entry type byte * @return true if a tombstone */ public static boolean isTombstone(byte b) { return EntryBits.isTombstone(b); }
public final boolean isTombstone() { return EntryBits.isTombstone(this.entryBits); }
public void toData(DataOutput out) throws IOException { out.writeByte(this.entryBits); byte flags = (this.versionTag != null) ? HAS_VERSION : 0; flags |= (this.versionTag instanceof DiskVersionTag) ? PERSISTENT_VERSION : 0; out.writeByte(flags); DataSerializer.writeObject(this.key, out); if (!EntryBits.isTombstone(this.entryBits)) { if (!isEagerDeserialize()) { DataSerializer.writeObjectAsByteArray(this.value, out); } else { DataSerializer.writeObject(this.value, out); } } out.writeLong(this.lastModified); if (this.versionTag != null) { InternalDataSerializer.invokeToData(this.versionTag, out); } }
public void fromData(DataInput in) throws IOException, ClassNotFoundException { this.entryBits = in.readByte(); byte flags = in.readByte(); this.key = DataSerializer.readObject(in); if (EntryBits.isTombstone(this.entryBits)) { this.value = Token.TOMBSTONE; } else { if (!isEagerDeserialize()) { this.value = DataSerializer.readByteArray(in); } else { this.value = DataSerializer.readArrayOfByteArrays(in); } } this.lastModified = in.readLong(); if ((flags & HAS_VERSION) != 0) { // note that null IDs must be later replaced with the image provider's ID this.versionTag = VersionTag.create((flags & PERSISTENT_VERSION) != 0, in); } }
public void toData(DataOutput out) throws IOException { out.writeByte(this.entryBits); byte flags = (this.versionTag != null) ? HAS_VERSION : 0; flags |= (this.versionTag instanceof DiskVersionTag) ? PERSISTENT_VERSION : 0; out.writeByte(flags); DataSerializer.writeObject(this.key, out); if (!EntryBits.isTombstone(this.entryBits)) { if (!isEagerDeserialize()) { DataSerializer.writeObjectAsByteArray(this.value, out); } else { DataSerializer.writeArrayOfByteArrays((byte[][])this.value, out); } } out.writeLong(this.lastModified); if (this.versionTag != null) { InternalDataSerializer.invokeToData(this.versionTag, out); } }
public void fromData(DataInput in) throws IOException, ClassNotFoundException { this.entryBits = in.readByte(); byte flags = in.readByte(); this.key = DataSerializer.readObject(in); if (EntryBits.isTombstone(this.entryBits)) { this.value = Token.TOMBSTONE; } else { if (!isEagerDeserialize()) { this.value = DataSerializer.readByteArray(in); } else { this.value = DataSerializer.readObject(in); } } this.lastModified = in.readLong(); if ((flags & HAS_VERSION) != 0) { // note that null IDs must be later replaced with the image provider's ID this.versionTag = VersionTag.create((flags & PERSISTENT_VERSION) != 0, in); } }
if (EntryBits.isAnyInvalid(userBits) || EntryBits.isTombstone(userBits) || bitOnly || valueLength == 0) { if (EntryBits.isInvalid(userBits)) { bb = new BytesAndBits(DiskEntry.Helper.INVALID_BUFFER, userBits); } else if (EntryBits.isTombstone(userBits)) { bb = new BytesAndBits(DiskEntry.Helper.TOMBSTONE_BUFFER, userBits); } else {
/** * TODO soplog - This method is public just to test soplog recovery */ public DiskEntry.RecoveredEntry createRecoveredEntry(byte[] valueBytes, int valueLength, byte userBits, long oplogId, long offsetInOplog, long oplogKeyId, boolean recoverValue, Version version, ByteArrayDataInput in) { DiskEntry.RecoveredEntry re = null; if (recoverValue || EntryBits.isAnyInvalid(userBits) || EntryBits.isTombstone(userBits)) { Object value; if (EntryBits.isLocalInvalid(userBits)) { value = Token.LOCAL_INVALID; valueLength = 0; } else if (EntryBits.isInvalid(userBits)) { value = Token.INVALID; valueLength = 0; } else if (EntryBits.isSerialized(userBits)) { value = DiskEntry.Helper.readSerializedValue(valueBytes, version, in, false); } else if (EntryBits.isTombstone(userBits)) { value = Token.TOMBSTONE; } else { value = valueBytes; } re = new DiskEntry.RecoveredEntry(oplogKeyId, oplogId, offsetInOplog, userBits, valueLength, value); } else { re = new DiskEntry.RecoveredEntry(oplogKeyId, oplogId, offsetInOplog, userBits, valueLength); } return re; }
if (recoverValue || EntryBits.isAnyInvalid(userBits) || EntryBits.isTombstone(userBits)) { Object value; if (EntryBits.isLocalInvalid(userBits)) { .readSerializedValue(valueBytes, version, in, false); else if (EntryBits.isTombstone(userBits)) { value = Token.TOMBSTONE;
/** * Given a BytesAndBits object either convert it to the relevant Object * (deserialize if necessary) or return the serialized blob. */ private static Object convertBytesAndBits(BytesAndBits bb, boolean asObject) { Object value; if (EntryBits.isInvalid(bb.getBits())) { value = Token.INVALID; } else if (EntryBits.isSerialized(bb.getBits())) { value = DiskEntry.Helper.readSerializedValue(bb, asObject); } else if (EntryBits.isLocalInvalid(bb.getBits())) { value = Token.LOCAL_INVALID; } else if (EntryBits.isTombstone(bb.getBits())) { value = Token.TOMBSTONE; } else { value = DiskEntry.Helper.readRawValue(bb); } // buffer will no longer be used so clean it up eagerly bb.release(); return value; }
private void writeOneKeyEntryForKRF(byte[] keyBytes, byte userBits, int valueLength, long diskRegionId, long oplogKeyId, long valueOffset, VersionHolder tag) throws IOException { if (getParent().isValidating()) { return; } if (!getParent().isOfflineCompacting()) { assert (this.krf.dos != null); } else { if (this.krf.dos == null) { // krf already exist, thus not re-opened for write return; } } DataSerializer.writeByteArray(keyBytes, this.krf.dos); this.krf.dos.writeByte(EntryBits.getPersistentBits(userBits)); InternalDataSerializer.writeArrayLength(valueLength, this.krf.dos); DiskInitFile.writeDiskRegionID(this.krf.dos, diskRegionId); if (EntryBits.isWithVersions(userBits) && tag != null) { serializeVersionTag(tag, this.krf.dos); } InternalDataSerializer.writeVLOld(oplogKeyId, this.krf.dos); // skip the invalid entries, theire valueOffset is -1 if (!EntryBits.isAnyInvalid(userBits) && !EntryBits.isTombstone(userBits)) { InternalDataSerializer.writeVLOld((valueOffset - this.krf.lastOffset), this.krf.dos); // save the lastOffset in krf object this.krf.lastOffset = valueOffset; } this.krf.keyNum++; }
deKey = de.getKey(); if (valueOffset < 0) { assert (EntryBits.isAnyInvalid(userBits) || EntryBits.isTombstone(userBits));
/** * Given a BytesAndBits object get the serialized blob * * @param bb * @return the converted object */ static Object convertBytesAndBitsToSerializedForm(BytesAndBits bb) { final byte[] bytes = bb.getBytes(); Object value; if (EntryBits.isInvalid(bb.getBits())) { value = Token.INVALID; } else if (EntryBits.isSerialized(bb.getBits())) { value = DiskEntry.Helper .readSerializedValue(bytes, bb.getVersion(), null, false); } else if (EntryBits.isLocalInvalid(bb.getBits())) { value = Token.LOCAL_INVALID; } else if (EntryBits.isTombstone(bb.getBits())) { value = Token.TOMBSTONE; } else { value = DiskEntry.Helper.readRawValue(bytes, bb.getVersion(), null); } return value; }
/** * Given a BytesAndBits object convert it to the relevant Object (deserialize * if necessary) and return the object * * @param bb * @return the converted object */ static Object convertBytesAndBitsIntoObject(BytesAndBits bb) { byte[] bytes = bb.getBytes(); Object value; if (EntryBits.isInvalid(bb.getBits())) { value = Token.INVALID; } else if (EntryBits.isSerialized(bb.getBits())) { value = DiskEntry.Helper .readSerializedValue(bytes, bb.getVersion(), null, true); } else if (EntryBits.isLocalInvalid(bb.getBits())) { value = Token.LOCAL_INVALID; } else if (EntryBits.isTombstone(bb.getBits())) { value = Token.TOMBSTONE; } else { value = DiskEntry.Helper.readRawValue(bytes, bb.getVersion(), null); } return value; }
deKey = de.getKeyCopy(); if (valueOffset < 0) { assert (EntryBits.isAnyInvalid(userBits) || EntryBits.isTombstone(userBits));
if(!EntryBits.isAnyInvalid(userBits) && !EntryBits.isTombstone(userBits)) { InternalDataSerializer.writeVLOld((valueOffset - this.krf.lastOffset), this.krf.dos);
} else if (EntryBits.isLocalInvalid(bits)) { value = Token.LOCAL_INVALID; } else if (EntryBits.isTombstone(bits)) { value = Token.TOMBSTONE; } else if (EntryBits.isSerialized(bits)) {
} else if (EntryBits.isLocalInvalid(bb.getBits())) { value = Token.LOCAL_INVALID; } else if (EntryBits.isTombstone(bb.getBits())) { value = Token.TOMBSTONE; } else if (EntryBits.isSerialized(bb.getBits())) {
wrapper.setData(DiskEntry.LOCAL_INVALID_BYTES, userBits, DiskEntry.LOCAL_INVALID_BYTES.length, false/* Can not be reused*/); } else if (EntryBits.isTombstone(userBits)) { wrapper.setData(DiskEntry.TOMBSTONE_BYTES, userBits, DiskEntry.TOMBSTONE_BYTES.length, false/* Can not be reused*/);
assertFalse(EntryBits.isSerialized(userBits)); assertFalse(EntryBits.isInvalid(userBits)); assertTrue(EntryBits.isTombstone(userBits)); assertTrue(EntryBits.isWithVersions(userBits));