@Override public void run() { journalLock.readLock().lock(); try { JournalInternalRecord addRecord = new JournalAddRecord(true, id, recordType, persister, record); JournalFile usedFile = appendRecord(addRecord, false, sync, null, callback); records.put(id, new JournalRecord(usedFile, addRecord.getEncodeSize())); if (logger.isTraceEnabled()) { logger.trace("appendAddRecord::id=" + id + ", userRecordType=" + recordType + ", record = " + record + ", usedFile = " + usedFile); } result.set(true); } catch (ActiveMQShutdownException e) { result.fail(e); logger.error("appendPrepareRecord:" + e, e); } catch (Throwable e) { result.fail(e); setErrorCondition(callback, null, e); logger.error("appendAddRecord::" + e, e); } finally { pendingRecords.remove(id); journalLock.readLock().unlock(); } } });
@Override public void run() { journalLock.readLock().lock(); try { JournalInternalRecord addRecord = new JournalAddRecord(true, id, recordType, persister, record); JournalFile usedFile = appendRecord(addRecord, false, sync, null, callback); records.put(id, new JournalRecord(usedFile, addRecord.getEncodeSize())); if (logger.isTraceEnabled()) { logger.trace("appendAddRecord::id=" + id + ", userRecordType=" + recordType + ", record = " + record + ", usedFile = " + usedFile); } result.set(true); } catch (ActiveMQShutdownException e) { result.fail(e); logger.error("appendPrepareRecord:" + e, e); } catch (Throwable e) { result.fail(e); setErrorCondition(callback, null, e); logger.error("appendAddRecord::" + e, e); } finally { pendingRecords.remove(id); journalLock.readLock().unlock(); } } });
@Test public void testIteration() { ConcurrentLongHashSet set = new ConcurrentLongHashSet(); assertEquals(set.items(), Collections.emptySet()); set.add(0L); assertEquals(set.items(), new HashSet<>(Arrays.asList(0L))); set.remove(0L); assertEquals(set.items(), Collections.emptySet()); set.add(0L); set.add(1L); set.add(2L); List<Long> values = new ArrayList<>(set.items()); Collections.sort(values); assertEquals(values, Arrays.asList(0L, 1L, 2L)); set.clear(); assertTrue(set.isEmpty()); }
@Test public void testRehashingWithDeletes() { int n = 16; ConcurrentLongHashSet set = new ConcurrentLongHashSet(n / 2, 1); assertEquals(set.capacity(), n); assertEquals(set.size(), 0); for (int i = 0; i < n / 2; i++) { set.add(i); } for (int i = 0; i < n / 2; i++) { set.remove(i); } for (int i = n; i < (2 * n); i++) { set.add(i); } assertEquals(set.capacity(), 2 * n); assertEquals(set.size(), n); }
@Test public void testHashConflictWithDeletion() { final int Buckets = 16; ConcurrentLongHashSet set = new ConcurrentLongHashSet(Buckets, 1); // Pick 2 keys that fall into the same bucket long key1 = 1; long key2 = 27; int bucket1 = ConcurrentLongHashSet.signSafeMod(ConcurrentLongHashSet.hash(key1), Buckets); int bucket2 = ConcurrentLongHashSet.signSafeMod(ConcurrentLongHashSet.hash(key2), Buckets); assertEquals(bucket1, bucket2); assertTrue(set.add(key1)); assertTrue(set.add(key2)); assertEquals(set.size(), 2); assertTrue(set.remove(key1)); assertEquals(set.size(), 1); assertTrue(set.add(key1)); assertEquals(set.size(), 2); assertTrue(set.remove(key1)); assertEquals(set.size(), 1); assertFalse(set.add(key2)); assertTrue(set.contains(key2)); assertEquals(set.size(), 1); assertTrue(set.remove(key2)); assertTrue(set.isEmpty()); }
@Test public void simpleInsertions() { ConcurrentLongHashSet set = new ConcurrentLongHashSet(16); assertTrue(set.isEmpty()); assertTrue(set.add(1)); assertFalse(set.isEmpty()); assertTrue(set.add(2)); assertTrue(set.add(3)); assertEquals(set.size(), 3); assertTrue(set.contains(1)); assertEquals(set.size(), 3); assertTrue(set.remove(1)); assertEquals(set.size(), 2); assertFalse(set.contains(1)); assertFalse(set.contains(5)); assertEquals(set.size(), 2); assertTrue(set.add(1)); assertEquals(set.size(), 3); assertFalse(set.add(1)); assertEquals(set.size(), 3); }