+ private static <K, V extends LocalAbortable> V returnIfOperational(final Map<K , V> map, final K key, final V value,
+ final Throwable aborted) {
+ Verify.verify(map.put(key, value) == null);
+
+ if (aborted != null) {
+ try {
+ value.localAbort(aborted);
+ } catch (Exception e) {
+ LOG.debug("Close of {} failed", value, e);
+ }
+ map.remove(key, value);
+ throw Throwables.propagate(aborted);
+ }
+
+ return value;
+ }
+
+ @Override
+ public ClientLocalHistory createLocalHistory() {
+ final LocalHistoryIdentifier historyId = new LocalHistoryIdentifier(getIdentifier(),
+ nextHistoryId.getAndIncrement());
+ final ClientLocalHistory history = new ClientLocalHistory(this, historyId);
+ LOG.debug("{}: creating a new local history {}", persistenceId(), history);
+
+ return returnIfOperational(histories, historyId, history, aborted);
+ }
+