/** * Disable the cursors opened on the head log file log, by closing their underlying cursor. * Returns the state of each cursor just before the close operation. * * @return the pairs (cursor, cursor state) for each cursor pointing to head log file. * @throws ChangelogException If an error occurs. */ private List<Pair<AbortableLogCursor<K, V>, CursorState<K, V>>> disableOpenedCursorsOnHead() throws ChangelogException { final List<Pair<AbortableLogCursor<K, V>, CursorState<K, V>>> openCursorsStates = new ArrayList<>(); final LogFile<K, V> headLogFile = getHeadLogFile(); for (AbortableLogCursor<K, V> cursor : openCursors) { if (cursor.isAccessingLogFile(headLogFile)) { openCursorsStates.add(Pair.of(cursor, cursor.getState())); cursor.closeUnderlyingCursor(); } } return openCursorsStates; }
/** * Returns the key bounds for the provided log file. * * @return the pair of (lowest key, highest key) that correspond to records stored in the * corresponding log file. * @throws ChangelogException if an error occurs while retrieving the keys */ private Pair<K, K> getKeyBounds(final LogFile<K, V> logFile) throws ChangelogException { try { final String name = logFile.getFile().getName(); final String[] keys = name.substring(0, name.length() - Log.LOG_FILE_SUFFIX.length()) .split(LOG_FILE_NAME_SEPARATOR); return Pair.of( recordParser.decodeKeyFromString(keys[0]), recordParser.decodeKeyFromString(keys[1])); } catch (Exception e) { throw new ChangelogException( ERR_CHANGELOG_UNABLE_TO_RETRIEVE_KEY_BOUNDS_FROM_FILE.get(logFile.getFile().getPath()), e); } }
/** * Adds listeners for service names that match the provided predicate. * * @param l Listener to be added. * @param servicePredicate The predicate. */ public void addServiceListener(ConfigurationListener l, Predicate<String> servicePredicate) { serviceListeners.add(Pair.of(l, servicePredicate)); }
/** * Adds listener for all services. * * @param l Listener to be added. */ public void addListener(ConfigurationListener l) { serviceListeners.add(Pair.<ConfigurationListener, Predicate<String>>of(l, null)); }