Author: tv Date: Sun May 5 17:59:39 2019 New Revision: 1858701 URL: http://svn.apache.org/viewvc?rev=1858701&view=rev Log: Remove most Iterators
Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/JndiDataSourceFactory.java commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheListeners.java commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java Sun May 5 17:59:39 2019 @@ -24,7 +24,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -203,24 +202,28 @@ public class BlockDiskCache<K, V> try { - int maxToTest = 100; - int count = 0; - Iterator<Map.Entry<K, int[]>> it = this.keyStore.entrySet().iterator(); - while ( it.hasNext() && count < maxToTest ) - { - count++; - Map.Entry<K, int[]> entry = it.next(); - Object data = this.dataFile.read( entry.getValue() ); - if ( data == null ) - { - throw new Exception( logCacheName + "Couldn't find data for key [" + entry.getKey() + "]" ); - } - } + this.keyStore.entrySet().stream() + .limit(100) + .forEach(entry -> { + try + { + Object data = this.dataFile.read(entry.getValue()); + if ( data == null ) + { + throw new IOException("Data is null"); + } + } + catch (IOException | ClassNotFoundException e) + { + throw new RuntimeException(logCacheName + + " Couldn't find data for key [" + entry.getKey() + "]", e); + } + }); alright = true; } catch ( Exception e ) { - log.warn( logCacheName + "Problem verifying disk. Message [" + e.getMessage() + "]" ); + log.warn(logCacheName + " Problem verifying disk.", e); alright = false; } finally Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java Sun May 5 17:59:39 2019 @@ -23,11 +23,10 @@ import java.io.File; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -1364,24 +1363,15 @@ public class IndexedDiskCache<K, V> exte * Creates a snapshot of the IndexedDiskElementDescriptors in the keyHash and returns them * sorted by position in the dataFile. * <p> - * TODO fix values() method on the LRU map. - * <p> * * @return IndexedDiskElementDescriptor[] */ private IndexedDiskElementDescriptor[] createPositionSortedDescriptorList() { - IndexedDiskElementDescriptor[] defragList = new IndexedDiskElementDescriptor[keyHash.size()]; - Iterator<Map.Entry<K, IndexedDiskElementDescriptor>> iterator = keyHash.entrySet().iterator(); - for (int i = 0; iterator.hasNext(); i++) - { - Map.Entry<K, IndexedDiskElementDescriptor> next = iterator.next(); - defragList[i] = next.getValue(); - } - - Arrays.sort(defragList, new PositionComparator()); + List<IndexedDiskElementDescriptor> defragList = new ArrayList<>(keyHash.values()); + Collections.sort(defragList, new PositionComparator()); - return defragList; + return defragList.toArray(new IndexedDiskElementDescriptor[0]); } /** Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/JndiDataSourceFactory.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/JndiDataSourceFactory.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/JndiDataSourceFactory.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/dsfactory/JndiDataSourceFactory.java Sun May 5 17:59:39 2019 @@ -21,7 +21,6 @@ package org.apache.commons.jcs.auxiliary import java.sql.SQLException; import java.util.Hashtable; -import java.util.Iterator; import java.util.Map; import javax.naming.Context; @@ -173,13 +172,8 @@ public class JndiDataSourceFactory imple { log.debug("InitialContext -------------------------------"); Map<?, ?> env = ctx.getEnvironment(); - Iterator<?> qw = env.entrySet().iterator(); log.debug("Environment properties:" + env.size()); - while (qw.hasNext()) - { - Map.Entry<?, ?> entry = (Map.Entry<?, ?>) qw.next(); - log.debug(" " + entry.getKey() + ": " + entry.getValue()); - } + env.forEach((key, value) -> log.debug(" " + key + ": " + value)); log.debug("----------------------------------------------"); } } Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java Sun May 5 17:59:39 2019 @@ -27,7 +27,6 @@ import java.rmi.server.RMISocketFactory; import java.rmi.server.UnicastRemoteObject; import java.rmi.server.Unreferenced; import java.util.Collections; -import java.util.Iterator; import java.util.Map; import java.util.Properties; import java.util.Set; @@ -1234,21 +1233,11 @@ public class RemoteCacheServer<K, V> { synchronized ( eventQMap ) { - for (Iterator<Map.Entry<Long, ICacheEventQueue<KK, VV>>> itr = eventQMap.entrySet().iterator(); itr.hasNext(); ) - { - Map.Entry<Long, ICacheEventQueue<KK, VV>> e = itr.next(); - ICacheEventQueue<KK, VV> q = e.getValue(); - - // this does not care if the q is alive (i.e. if - // there are active threads; it cares if the queue - // is working -- if it has not encountered errors - // above the failure threshold - if ( !q.isWorking() ) - { - itr.remove(); - log.warn( "Cache event queue " + q + " is not working and removed from cache server." ); - } - } + // this does not care if the q is alive (i.e. if + // there are active threads; it cares if the queue + // is working -- if it has not encountered errors + // above the failure threshold + eventQMap.entrySet().removeIf(e -> !e.getValue().isWorking()); } } Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheListeners.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheListeners.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheListeners.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/CacheListeners.java Sun May 5 17:59:39 2019 @@ -1,26 +1,5 @@ package org.apache.commons.jcs.engine; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.util.Iterator; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -68,11 +47,9 @@ public class CacheListeners<K, V> { buffer.append( "\n Event Queue Map " ); buffer.append( "\n size = " + eventQMap.size() ); - Iterator<Map.Entry<Long, ICacheEventQueue<K, V>>> it = eventQMap.entrySet().iterator(); - while ( it.hasNext() ) - { - buffer.append( "\n Entry: " + it.next() ); - } + eventQMap.forEach((key, value) + -> buffer.append( "\n Entry: key: ").append(key) + .append(", value: ").append(value)); } else { Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCache.java Sun May 5 17:59:39 2019 @@ -23,7 +23,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.concurrent.ScheduledExecutorService; @@ -732,13 +731,8 @@ public class CompositeCache<K, V> throws IOException { Map<K, ICacheElement<K, V>> elementsFromMemory = memCache.getMultiple(keys); - Iterator<Map.Entry<K, ICacheElement<K, V>>> elementFromMemoryIterator = elementsFromMemory.entrySet().iterator(); - - while (elementFromMemoryIterator.hasNext()) - { - Map.Entry<K, ICacheElement<K, V>> entry = elementFromMemoryIterator.next(); + elementsFromMemory.entrySet().removeIf(entry -> { ICacheElement<K, V> element = entry.getValue(); - if (isExpired(element)) { if (log.isDebugEnabled()) @@ -747,7 +741,7 @@ public class CompositeCache<K, V> } doExpires(element); - elementFromMemoryIterator.remove(); + return true; } else { @@ -758,8 +752,9 @@ public class CompositeCache<K, V> // Update counters hitCountRam.incrementAndGet(); + return false; } - } + }); return elementsFromMemory; } @@ -982,11 +977,7 @@ public class CompositeCache<K, V> private void processRetrievedElements(AuxiliaryCache<K, V> aux, Map<K, ICacheElement<K, V>> elementsFromAuxiliary) throws IOException { - Iterator<Map.Entry<K, ICacheElement<K, V>>> elementFromAuxiliaryIterator = elementsFromAuxiliary.entrySet().iterator(); - - while (elementFromAuxiliaryIterator.hasNext()) - { - Map.Entry<K, ICacheElement<K, V>> entry = elementFromAuxiliaryIterator.next(); + elementsFromAuxiliary.entrySet().removeIf(entry -> { ICacheElement<K, V> element = entry.getValue(); // Item found in one of the auxiliary caches. @@ -1004,7 +995,7 @@ public class CompositeCache<K, V> // associated with the item when it created govern its behavior // everywhere. doExpires(element); - elementFromAuxiliaryIterator.remove(); + return true; } else { @@ -1015,10 +1006,20 @@ public class CompositeCache<K, V> // Update counters hitCountAux.incrementAndGet(); - copyAuxiliaryRetrievedItemToMemory(element); + try + { + copyAuxiliaryRetrievedItemToMemory(element); + } + catch (IOException e) + { + log.error(cacheAttr.getCacheName() + + " failed to copy element to memory " + element, e); + } } } - } + + return false; + }); } /** Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java Sun May 5 17:59:39 2019 @@ -22,7 +22,6 @@ package org.apache.commons.jcs.engine.me import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -36,6 +35,7 @@ import org.apache.commons.jcs.engine.beh import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes; import org.apache.commons.jcs.engine.control.CompositeCache; import org.apache.commons.jcs.engine.control.group.GroupAttrName; +import org.apache.commons.jcs.engine.control.group.GroupId; import org.apache.commons.jcs.engine.memory.behavior.IMemoryCache; import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor; import org.apache.commons.jcs.engine.stats.StatElement; @@ -334,31 +334,28 @@ public abstract class AbstractMemoryCach */ protected boolean removeByGroup(K key) { - boolean removed = false; + GroupId groupId = ((GroupAttrName<?>) key).groupId; // remove all keys of the same group hierarchy. - for (Iterator<Map.Entry<K, MemoryElementDescriptor<K, V>>> itr = map.entrySet().iterator(); itr.hasNext();) - { - Map.Entry<K, MemoryElementDescriptor<K, V>> entry = itr.next(); + return map.entrySet().removeIf(entry -> { K k = entry.getKey(); - if (k instanceof GroupAttrName && ((GroupAttrName<?>) k).groupId.equals(((GroupAttrName<?>) key).groupId)) + if (k instanceof GroupAttrName && ((GroupAttrName<?>) k).groupId.equals(groupId)) { lock.lock(); try { - itr.remove(); lockedRemoveElement(entry.getValue()); - removed = true; + return true; } finally { lock.unlock(); } } - } - return removed; + return false; + }); } /** @@ -369,31 +366,28 @@ public abstract class AbstractMemoryCach */ protected boolean removeByHierarchy(K key) { - boolean removed = false; + String keyString = key.toString(); // remove all keys of the same name hierarchy. - for (Iterator<Map.Entry<K, MemoryElementDescriptor<K, V>>> itr = map.entrySet().iterator(); itr.hasNext();) - { - Map.Entry<K, MemoryElementDescriptor<K, V>> entry = itr.next(); + return map.entrySet().removeIf(entry -> { K k = entry.getKey(); - if (k instanceof String && ((String) k).startsWith(key.toString())) + if (k instanceof String && ((String) k).startsWith(keyString)) { lock.lock(); try { - itr.remove(); lockedRemoveElement(entry.getValue()); - removed = true; + return true; } finally { lock.unlock(); } } - } - return removed; + return false; + }); } /** Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java Sun May 5 17:59:39 2019 @@ -189,7 +189,6 @@ public class LHMLRUMemoryCache<K, V> } else { - if ( log.isDebugEnabled() ) { log.debug( "LHMLRU max size: " + getCacheAttributes().getMaxObjects() Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java?rev=1858701&r1=1858700&r2=1858701&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java (original) +++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java Sun May 5 17:59:39 2019 @@ -1,31 +1,9 @@ package org.apache.commons.jcs.utils.struct; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.io.Serializable; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.Map; -import java.util.NoSuchElementException; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Lock; @@ -461,33 +439,22 @@ public abstract class AbstractLRUMap<K, } log.debug( "verifycache: checking via keysets!" ); - for (Iterator<K> itr2 = map.keySet().iterator(); itr2.hasNext(); ) - { - found = false; - Serializable val = null; - try - { - val = (Serializable) itr2.next(); - } - catch ( NoSuchElementException nse ) - { - log.error( "verifycache: no such element exception" ); - continue; - } + map.forEach((key, value) -> { + boolean _found = false; for (LRUElementDescriptor<K, V> li2 = list.getFirst(); li2 != null; li2 = (LRUElementDescriptor<K, V>) li2.next ) { - if ( val.equals( li2.getKey() ) ) + if ( key.equals( li2.getKey() ) ) { - found = true; + _found = true; break; } } - if ( !found ) + if ( !_found ) { - log.error( "verifycache: key not found in list : " + val ); + log.error( "verifycache: key not found in list : " + key ); dumpCacheEntries(); - if ( map.containsKey( val ) ) + if ( map.containsKey( key ) ) { log.error( "verifycache: map contains key" ); } @@ -496,7 +463,7 @@ public abstract class AbstractLRUMap<K, log.error( "verifycache: map does NOT contain key, what the HECK!" ); } } - } + }); } /**