You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tv...@apache.org on 2023/08/22 15:23:48 UTC
[commons-jcs] branch master updated: Further clean up array usage
This is an automated email from the ASF dual-hosted git repository.
tv pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jcs.git
The following commit(s) were added to refs/heads/master by this push:
new 21ca6933 Further clean up array usage
21ca6933 is described below
commit 21ca69330f6a82705fb082fb0188b15e497e8146
Author: Thomas Vandahl <tv...@apache.org>
AuthorDate: Tue Aug 22 17:23:43 2023 +0200
Further clean up array usage
---
.../auxiliary/disk/indexed/IndexedDiskCache.java | 20 +++----
.../auxiliary/remote/server/RemoteCacheServer.java | 66 ++++++++--------------
.../indexed/AbstractIndexDiskCacheUnitTest.java | 10 ++--
3 files changed, 38 insertions(+), 58 deletions(-)
diff --git a/commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/indexed/IndexedDiskCache.java b/commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/indexed/IndexedDiskCache.java
index e70bdcf7..4f16181d 100644
--- a/commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/indexed/IndexedDiskCache.java
+++ b/commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/indexed/IndexedDiskCache.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.io.Serializable;
import java.nio.file.Files;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@@ -398,7 +399,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
* @param sortedDescriptors
* @return false if there are overlaps.
*/
- protected boolean checkForDedOverlaps(final IndexedDiskElementDescriptor[] sortedDescriptors)
+ protected boolean checkForDedOverlaps(final Collection<IndexedDiskElementDescriptor> sortedDescriptors)
{
final ElapsedTimer timer = new ElapsedTimer();
boolean isOk = true;
@@ -1124,7 +1125,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
log.info("{0}: Beginning Optimization #{1}", logCacheName, timesOptimized);
// CREATE SNAPSHOT
- IndexedDiskElementDescriptor[] defragList = null;
+ Collection<IndexedDiskElementDescriptor> defragList = null;
storageLock.writeLock().lock();
@@ -1153,10 +1154,8 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
{
if (!queuedPutList.isEmpty())
{
- defragList = queuedPutList.toArray(new IndexedDiskElementDescriptor[0]);
-
// pack them at the end
- expectedNextPos = defragFile(defragList, expectedNextPos);
+ expectedNextPos = defragFile(queuedPutList, expectedNextPos);
}
// TRUNCATE THE FILE
dataFile.truncate(expectedNextPos);
@@ -1197,7 +1196,7 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
* the start position in the file
* @return this is the potential new file end
*/
- private long defragFile(final IndexedDiskElementDescriptor[] defragList, final long startingPos)
+ private long defragFile(final Collection<IndexedDiskElementDescriptor> defragList, final long startingPos)
{
final ElapsedTimer timer = new ElapsedTimer();
long preFileSize = 0;
@@ -1208,7 +1207,8 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
preFileSize = this.dataFile.length();
// find the first gap in the disk and start defragging.
expectedNextPos = startingPos;
- for (final IndexedDiskElementDescriptor element : defragList) {
+ for (final IndexedDiskElementDescriptor element : defragList)
+ {
storageLock.writeLock().lock();
try
{
@@ -1247,14 +1247,14 @@ public class IndexedDiskCache<K, V> extends AbstractDiskCache<K, V>
* sorted by position in the dataFile.
* <p>
*
- * @return IndexedDiskElementDescriptor[]
+ * @return Collection<IndexedDiskElementDescriptor>
*/
- private IndexedDiskElementDescriptor[] createPositionSortedDescriptorList()
+ private Collection<IndexedDiskElementDescriptor> createPositionSortedDescriptorList()
{
final List<IndexedDiskElementDescriptor> defragList = new ArrayList<>(keyHash.values());
Collections.sort(defragList, (ded1, ded2) -> Long.compare(ded1.pos, ded2.pos));
- return defragList.toArray(new IndexedDiskElementDescriptor[0]);
+ return defragList;
}
/**
diff --git a/commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java b/commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java
index 527839d2..97f13375 100644
--- a/commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java
+++ b/commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java
@@ -26,7 +26,9 @@ import java.rmi.registry.Registry;
import java.rmi.server.RMISocketFactory;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.server.Unreferenced;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@@ -314,9 +316,10 @@ public class RemoteCacheServer<K, V>
// IF LOCAL CLUSTER CONSISTENCY IS CONFIGURED
if (!fromCluster || fromCluster && remoteCacheServerAttributes.isLocalClusterConsistency())
{
- final ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, requesterId );
- log.debug( "qlist.length = {0}", qlist.length );
- for (final ICacheEventQueue<K, V> element : qlist) {
+ final List<ICacheEventQueue<K,V>> qlist = getEventQList( cacheDesc, requesterId );
+ log.debug("qlist.size() = {0}", qlist.size());
+ for (final ICacheEventQueue<K, V> element : qlist)
+ {
element.addPutEvent( item );
}
}
@@ -837,9 +840,10 @@ public class RemoteCacheServer<K, V>
// IF LOCAL CLUSTER CONSISTENCY IS CONFIGURED
if (!fromCluster || fromCluster && remoteCacheServerAttributes.isLocalClusterConsistency())
{
- final ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, requesterId );
+ final List<ICacheEventQueue<K,V>> qlist = getEventQList( cacheDesc, requesterId );
- for (final ICacheEventQueue<K, V> element : qlist) {
+ for (final ICacheEventQueue<K, V> element : qlist)
+ {
element.addRemoveEvent( key );
}
}
@@ -921,7 +925,7 @@ public class RemoteCacheServer<K, V>
// update registered listeners
if (!fromCluster || fromCluster && remoteCacheServerAttributes.isLocalClusterConsistency())
{
- final ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, requesterId );
+ final List<ICacheEventQueue<K,V>> qlist = getEventQList( cacheDesc, requesterId );
for (final ICacheEventQueue<K, V> q : qlist)
{
@@ -995,9 +999,10 @@ public class RemoteCacheServer<K, V>
// best attempt to achieve ordered free-cache-op and notification.
synchronized ( cacheDesc )
{
- final ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, requesterId );
+ final List<ICacheEventQueue<K,V>> qlist = getEventQList( cacheDesc, requesterId );
- for (final ICacheEventQueue<K, V> element : qlist) {
+ for (final ICacheEventQueue<K, V> element : qlist)
+ {
element.addDisposeEvent();
}
cacheManager.freeCache( cacheName );
@@ -1016,9 +1021,10 @@ public class RemoteCacheServer<K, V>
{
for (final CacheListeners<K, V> cacheDesc : cacheListenersMap.values())
{
- final ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, 0 );
+ final List<ICacheEventQueue<K,V>> qlist = getEventQList( cacheDesc, 0 );
- for (final ICacheEventQueue<K, V> element : qlist) {
+ for (final ICacheEventQueue<K, V> element : qlist)
+ {
element.addDisposeEvent();
}
}
@@ -1034,7 +1040,6 @@ public class RemoteCacheServer<K, V>
*/
protected CacheListeners<K, V> getCacheListeners( final String cacheName )
{
-
return cacheListenersMap.computeIfAbsent(cacheName, key -> {
final CompositeCache<K, V> cache = cacheManager.getCache(key);
return new CacheListeners<>( cache );
@@ -1050,7 +1055,6 @@ public class RemoteCacheServer<K, V>
*/
protected CacheListeners<K, V> getClusterListeners( final String cacheName )
{
-
return clusterListenersMap.computeIfAbsent(cacheName, key -> {
final CompositeCache<K, V> cache = cacheManager.getCache( cacheName );
return new CacheListeners<>( cache );
@@ -1069,40 +1073,14 @@ public class RemoteCacheServer<K, V>
* @param requesterId
* @return The eventQList value
*/
- @SuppressWarnings("unchecked") // No generic arrays in java
- private ICacheEventQueue<K, V>[] getEventQList( final CacheListeners<K, V> cacheListeners, final long requesterId )
+ private List<ICacheEventQueue<K, V>> getEventQList( final CacheListeners<K, V> cacheListeners, final long requesterId )
{
- final ICacheEventQueue<K, V>[] list = cacheListeners.eventQMap.values().toArray( new ICacheEventQueue[0] );
- int count = 0;
- // Set those not qualified to null; Count those qualified.
- for ( int i = 0; i < list.length; i++ )
- {
- final ICacheEventQueue<K, V> q = list[i];
- if ( q.isWorking() && q.getListenerId() != requesterId )
- {
- count++;
- }
- else
- {
- list[i] = null;
- }
- }
- if ( count == list.length )
- {
- // All qualified.
- return list;
- }
+ final List<ICacheEventQueue<K, V>> list = new ArrayList<>(cacheListeners.eventQMap.values());
- // Returns only the qualified.
- final ICacheEventQueue<K, V>[] qq = new ICacheEventQueue[count];
- count = 0;
- for (final ICacheEventQueue<K, V> element : list) {
- if ( element != null )
- {
- qq[count++] = element;
- }
- }
- return qq;
+ // Only return qualified event queues
+ list.removeIf(q -> (!q.isWorking() || q.getListenerId() == requesterId));
+
+ return list;
}
/**
diff --git a/commons-jcs3-core/src/test/java/org/apache/commons/jcs3/auxiliary/disk/indexed/AbstractIndexDiskCacheUnitTest.java b/commons-jcs3-core/src/test/java/org/apache/commons/jcs3/auxiliary/disk/indexed/AbstractIndexDiskCacheUnitTest.java
index 4729a15e..15f149af 100644
--- a/commons-jcs3-core/src/test/java/org/apache/commons/jcs3/auxiliary/disk/indexed/AbstractIndexDiskCacheUnitTest.java
+++ b/commons-jcs3-core/src/test/java/org/apache/commons/jcs3/auxiliary/disk/indexed/AbstractIndexDiskCacheUnitTest.java
@@ -21,7 +21,9 @@ package org.apache.commons.jcs3.auxiliary.disk.indexed;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -147,12 +149,12 @@ public abstract class AbstractIndexDiskCacheUnitTest extends TestCase
final int numDescriptors = 5;
int pos = 0;
- final IndexedDiskElementDescriptor[] sortedDescriptors = new IndexedDiskElementDescriptor[numDescriptors];
+ final List<IndexedDiskElementDescriptor> sortedDescriptors = new ArrayList<>();
for (int i = 0; i < numDescriptors; i++)
{
final IndexedDiskElementDescriptor descriptor = new IndexedDiskElementDescriptor(pos, i * 2);
pos = pos + (i * 2) + IndexedDisk.HEADER_SIZE_BYTES;
- sortedDescriptors[i] = descriptor;
+ sortedDescriptors.add(descriptor);
}
// DO WORK
@@ -175,13 +177,13 @@ public abstract class AbstractIndexDiskCacheUnitTest extends TestCase
final int numDescriptors = 5;
int pos = 0;
- final IndexedDiskElementDescriptor[] sortedDescriptors = new IndexedDiskElementDescriptor[numDescriptors];
+ final List<IndexedDiskElementDescriptor> sortedDescriptors = new ArrayList<>();
for (int i = 0; i < numDescriptors; i++)
{
final IndexedDiskElementDescriptor descriptor = new IndexedDiskElementDescriptor(pos, i * 2);
// don't add the header + IndexedDisk.RECORD_HEADER;
pos = pos + (i * 2);
- sortedDescriptors[i] = descriptor;
+ sortedDescriptors.add(descriptor);
}
// DO WORK