Hi all,

I recently noticed that there is wrong entry order in file using
FileIdempotentRepository implementation.
The effect is that instead of having order like:

file1.txt.20171123
file2.txt.20171123
file1.txt.20171124
file3.txt.20171125
file2.txt.20171126

we have:

file1.txt.20171123
file1.txt.20171124
file2.txt.20171123
file2.txt.20171126
file3.txt.20171125

where date extension represents order in which particular file was consumed
by the idempotent file consumer.
As a consequence instead of initializing memory cache with newest values,
it is initialized (probably) based on hash function from truncStore method
and we consume same file more than once:

    protected void trunkStore() {
        LOG.info("Trunking idempotent filestore: {}", fileStore);
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(fileStore);
            for (String key : *cache.keySet()*) {
                fos.write(key.getBytes());
                fos.write(STORE_DELIMITER.getBytes());
            }
        } catch (IOException e) {
            throw ObjectHelper.wrapRuntimeCamelException(e);
        } finally {
            IOHelper.close(fos, "Trunking file idempotent repository", LOG);
        }
    }

LRUCache:

    @Override
    public Set<K> keySet() {
        return map.keySet();
    }

where previously it was:

    @Override
    public Set<K> keySet() {
        return map.*ascendingKeySet*();
    }

Regards
Kris
-- 

Pozdrawiam

Krzysztof Hołdanowicz

Reply via email to