/** * Returns the cached recent messages history. * * @return * @throws IOException */ private History getHistory() throws IOException { synchronized (historyID) { HistoryService historyService = MessageHistoryActivator.getMessageHistoryService().getHistoryService(); if (history == null) { history = historyService.createHistory(historyID, recordStructure); // lets check the version if not our version, re-create // history (delete it) HistoryReader reader = history.getReader(); boolean delete = false; QueryResultSet<HistoryRecord> res = reader.findLast(1); if (res != null && res.hasNext()) { HistoryRecord hr = res.next(); if (hr.getPropertyValues().length >= 4) { if (!hr.getPropertyValues()[3].equals(RECENT_MSGS_VER)) delete = true; } else delete = true; } if (delete) { // delete it try { historyService.purgeLocallyStoredHistory(historyID); history = historyService.createHistory(historyID, recordStructure); } catch (IOException ex) { logger.error("Cannot delete recent_messages history", ex); } } } return history; } }
public void testWriteRecordsWithMaxNumber() { HistoryWriter writer = this.history.getWriter(); HistoryReader reader = this.history.getReader(); try { for (int i = 0; i < 20; i++) { writer.addRecord(new String[] {"" + i, "name" + i, i % 2 == 0 ? "m" : "f"}, 20); synchronized (this) { try { wait(100); } catch (Throwable t) { } } } QueryResultSet<HistoryRecord> recs = reader.findLast(20); int count = 0; while (recs.hasNext()) { count++; recs.next(); } assertEquals("Wrong count of messages", 20, count); writer.addRecord(new String[] {"" + 21, "name" + 21, "f"}, 20); recs = reader.findLast(20); count = 0; boolean foundFirstMessage = false; while (recs.hasNext()) { count++; HistoryRecord hr = recs.next(); if (hr.getPropertyValues()[0].equals("0")) foundFirstMessage = true; } assertEquals("Wrong count of messages", 20, count); assertFalse("Wrong message removed, must be the first one", foundFirstMessage); } catch (Exception e) { e.printStackTrace(); fail("Could not write records. Reason: " + e); } }