Hi Ah well spotted. I think we should for loop via Map.Entry (or (k,v) via lambda) which I think will be in the correct order.
You are welcome to log a JIRA. And also work on unit test and patch. http://camel.apache.org/contributing On Tue, Nov 28, 2017 at 8:55 AM, Krzysztof Hołdanowicz <holdanow...@gmail.com> wrote: > 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 -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2