/** * Resets internal state to same as given {@code tracker}, and change the deleted flag according * to the modified flag if {@code resetDelete} is true. Does deep copy of the bitmap. * <p/> * The {@code resetDelete} will be set to true when building cleanup tracker, please see the * comments in {@link BitSetNode#BitSetNode(BitSetNode, boolean)} to learn how we change the * deleted flag if {@code resetDelete} is true. */ public void resetTo(ProcedureStoreTracker tracker, boolean resetDelete) { reset(); // resetDelete will true if we are building the cleanup tracker, as we will reset deleted flags // for all the unmodified bits to 1, the partial flag is useless so set it to false for not // confusing the developers when debugging. this.partial = resetDelete ? false : tracker.partial; this.minModifiedProcId = tracker.minModifiedProcId; this.maxModifiedProcId = tracker.maxModifiedProcId; this.keepDeletes = tracker.keepDeletes; for (Map.Entry<Long, BitSetNode> entry : tracker.map.entrySet()) { map.put(entry.getKey(), new BitSetNode(entry.getValue(), resetDelete)); } }
public void resetToProto(ProcedureProtos.ProcedureStoreTracker trackerProtoBuf) { reset(); for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode: trackerProtoBuf.getNodeList()) { final BitSetNode node = new BitSetNode(protoNode); map.put(node.getStart(), node); } }
BitSetNode node = new BitSetNode(procId, partial); map.put(node.getStart(), node); return node;
@Test public void testMerge() { BitSetNode node = new BitSetNode(1000, false); assertTrue(node.canMerge(new BitSetNode(1200, false))); assertFalse(node.canMerge(new BitSetNode(10000, false))); BitSetNode rightNode = new BitSetNode(1200, false); node.merge(rightNode); assertTrue(node.isModified(1000)); assertTrue(node.isModified(1200)); for (long i = node.getStart(); i <= node.getEnd(); i++) { if (i != 1000 && i != 1200) { assertEquals(DeleteState.YES, node.isDeleted(i)); } else { assertEquals(DeleteState.NO, node.isDeleted(i)); } } } }
@Test public void testGrow() { BitSetNode node = new BitSetNode(1000, false); // contains, do not need to grow but should not fail assertTrue(node.canGrow(1024)); assertTrue(node.canGrow(900)); assertTrue(node.canGrow(1100)); assertFalse(node.canGrow(100)); assertFalse(node.canGrow(10000)); // grow to right node.grow(1100); assertTrue(node.contains(1100)); assertTrue(node.isModified(1000)); // grow to left node.grow(900); assertTrue(node.contains(900)); assertTrue(node.isModified(1000)); for (long i = node.getStart(); i <= node.getEnd(); i++) { if (i != 1000) { assertEquals(DeleteState.YES, node.isDeleted(i)); } else { assertEquals(DeleteState.NO, node.isDeleted(i)); } } }
@Test public void testGetActiveMaxMinProcId() { BitSetNode node = new BitSetNode(5L, false); assertEquals(5L, node.getActiveMinProcId()); assertEquals(5L, node.getActiveMaxProcId()); node.insertOrUpdate(10L); assertEquals(5L, node.getActiveMinProcId()); assertEquals(10L, node.getActiveMaxProcId()); node.insertOrUpdate(1L); assertEquals(1L, node.getActiveMinProcId()); assertEquals(10L, node.getActiveMaxProcId()); node.delete(10L); assertEquals(1L, node.getActiveMinProcId()); assertEquals(5L, node.getActiveMaxProcId()); node.delete(1L); assertEquals(5L, node.getActiveMinProcId()); assertEquals(5L, node.getActiveMaxProcId()); node.delete(5L); assertEquals(Procedure.NO_PROC_ID, node.getActiveMinProcId()); assertEquals(Procedure.NO_PROC_ID, node.getActiveMaxProcId()); }
/** * Resets internal state to same as given {@code tracker}, and change the deleted flag according * to the modified flag if {@code resetDelete} is true. Does deep copy of the bitmap. * <p/> * The {@code resetDelete} will be set to true when building cleanup tracker, please see the * comments in {@link BitSetNode#BitSetNode(BitSetNode, boolean)} to learn how we change the * deleted flag if {@code resetDelete} is true. */ public void resetTo(ProcedureStoreTracker tracker, boolean resetDelete) { reset(); // resetDelete will true if we are building the cleanup tracker, as we will reset deleted flags // for all the unmodified bits to 1, the partial flag is useless so set it to false for not // confusing the developers when debugging. this.partial = resetDelete ? false : tracker.partial; this.minModifiedProcId = tracker.minModifiedProcId; this.maxModifiedProcId = tracker.maxModifiedProcId; this.keepDeletes = tracker.keepDeletes; for (Map.Entry<Long, BitSetNode> entry : tracker.map.entrySet()) { map.put(entry.getKey(), new BitSetNode(entry.getValue(), resetDelete)); } }
public void resetToProto(ProcedureProtos.ProcedureStoreTracker trackerProtoBuf) { reset(); for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode: trackerProtoBuf.getNodeList()) { final BitSetNode node = new BitSetNode(protoNode); map.put(node.getStart(), node); } }
BitSetNode node = new BitSetNode(procId, partial); map.put(node.getStart(), node); return node;
@Test public void testMerge() { BitSetNode node = new BitSetNode(1000, false); assertTrue(node.canMerge(new BitSetNode(1200, false))); assertFalse(node.canMerge(new BitSetNode(10000, false))); BitSetNode rightNode = new BitSetNode(1200, false); node.merge(rightNode); assertTrue(node.isModified(1000)); assertTrue(node.isModified(1200)); for (long i = node.getStart(); i <= node.getEnd(); i++) { if (i != 1000 && i != 1200) { assertEquals(DeleteState.YES, node.isDeleted(i)); } else { assertEquals(DeleteState.NO, node.isDeleted(i)); } } } }
@Test public void testGrow() { BitSetNode node = new BitSetNode(1000, false); // contains, do not need to grow but should not fail assertTrue(node.canGrow(1024)); assertTrue(node.canGrow(900)); assertTrue(node.canGrow(1100)); assertFalse(node.canGrow(100)); assertFalse(node.canGrow(10000)); // grow to right node.grow(1100); assertTrue(node.contains(1100)); assertTrue(node.isModified(1000)); // grow to left node.grow(900); assertTrue(node.contains(900)); assertTrue(node.isModified(1000)); for (long i = node.getStart(); i <= node.getEnd(); i++) { if (i != 1000) { assertEquals(DeleteState.YES, node.isDeleted(i)); } else { assertEquals(DeleteState.NO, node.isDeleted(i)); } } }
@Test public void testGetActiveMaxMinProcId() { BitSetNode node = new BitSetNode(5L, false); assertEquals(5L, node.getActiveMinProcId()); assertEquals(5L, node.getActiveMaxProcId()); node.insertOrUpdate(10L); assertEquals(5L, node.getActiveMinProcId()); assertEquals(10L, node.getActiveMaxProcId()); node.insertOrUpdate(1L); assertEquals(1L, node.getActiveMinProcId()); assertEquals(10L, node.getActiveMaxProcId()); node.delete(10L); assertEquals(1L, node.getActiveMinProcId()); assertEquals(5L, node.getActiveMaxProcId()); node.delete(1L); assertEquals(5L, node.getActiveMinProcId()); assertEquals(5L, node.getActiveMaxProcId()); node.delete(5L); assertEquals(Procedure.NO_PROC_ID, node.getActiveMinProcId()); assertEquals(Procedure.NO_PROC_ID, node.getActiveMaxProcId()); }