private void catchLmdbError(final Runnable runnable) {
        try {
            runnable.run();
        } catch (final BufferOverflowException boe) {
            final String msg = LogUtil.message("Value for key {} in map {} is too big for the buffer",
                    key,
                    mapName);
            error(msg, boe);
            LOGGER.error(msg, boe);
        } catch (final RuntimeException e) {
            error(e);
            LOGGER.error("Error putting key {} into map {}: {} {}",
                    key, mapName, e.getClass().getSimpleName(), e.getMessage());
            LOGGER.debug("Error putting key {} into map {}: {}", key, mapName, e.getMessage(), e);
        }
    }
This method applies a post processing function if we are currently within
a function element. At this stage we should have details of the function
to apply from the corresponding start element and content to apply it to
from the characters event.

@param uri       The element's Namespace URI, or the empty string.
@param localName The element's local key, or the empty string.
@param qName     The element's qualified (prefixed) key, or the empty string.
@throws SAXException The client may throw an exception during processing.
@see AbstractXMLFilter#endElement(String,
String, String)
stroom-state/stroom-planb-impl/src/main/java/stroom/planb/impl/pipeline/PlanBFilter.java