From ca14c7f9aba7900084ee6ce5bed889d634803907 Mon Sep 17 00:00:00 2001 From: Kevin Risden <risdenk@users.noreply.github.com> Date: Mon, 30 Jan 2017 17:03:03 -0500 Subject: [PATCH] [core] Fix checkstyle for Utils (#900) --- core/src/main/java/com/yahoo/ycsb/Utils.java | 450 ++++++++---------- .../generator/ScrambledZipfianGenerator.java | 2 +- 2 files changed, 204 insertions(+), 248 deletions(-) diff --git a/core/src/main/java/com/yahoo/ycsb/Utils.java b/core/src/main/java/com/yahoo/ycsb/Utils.java index 05199fd7..9a95cbd6 100644 --- a/core/src/main/java/com/yahoo/ycsb/Utils.java +++ b/core/src/main/java/com/yahoo/ycsb/Utils.java @@ -1,18 +1,18 @@ -/** - * Copyright (c) 2010 Yahoo! Inc., 2016 YCSB contributors. All rights reserved. - * - * Licensed 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. See accompanying - * LICENSE file. +/** + * Copyright (c) 2010 Yahoo! Inc., 2016 YCSB contributors. All rights reserved. + * <p> + * Licensed 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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. See accompanying + * LICENSE file. */ package com.yahoo.ycsb; @@ -28,246 +28,202 @@ import java.util.Random; /** * Utility functions. */ -public class Utils -{ - private static final Random rand = new Random(); - private static final ThreadLocal<Random> rng = new ThreadLocal<Random>(); +public final class Utils { + private Utils() { + // not used + } + + private static final Random RAND = new Random(); + private static final ThreadLocal<Random> RNG = new ThreadLocal<Random>(); public static Random random() { - Random ret = rng.get(); - if(ret == null) { - ret = new Random(rand.nextLong()); - rng.set(ret); + Random ret = RNG.get(); + if (ret == null) { + ret = new Random(RAND.nextLong()); + RNG.set(ret); } return ret; } - /** - * Generate a random ASCII string of a given length. - */ - public static String ASCIIString(int length) - { - int interval='~'-' '+1; - - byte []buf = new byte[length]; - random().nextBytes(buf); - for (int i = 0; i < length; i++) { - if (buf[i] < 0) { - buf[i] = (byte)((-buf[i] % interval) + ' '); - } else { - buf[i] = (byte)((buf[i] % interval) + ' '); - } - } - return new String(buf); - } - - /** - * Hash an integer value. - */ - public static long hash(long val) - { - return FNVhash64(val); - } - - public static final int FNV_offset_basis_32=0x811c9dc5; - public static final int FNV_prime_32=16777619; - - /** - * 32 bit FNV hash. Produces more "random" hashes than (say) String.hashCode(). - * - * @param val The value to hash. - * @return The hash value - */ - public static int FNVhash32(int val) - { - //from http://en.wikipedia.org/wiki/Fowler_Noll_Vo_hash - int hashval = FNV_offset_basis_32; - - for (int i=0; i<4; i++) - { - int octet=val&0x00ff; - val=val>>8; - - hashval = hashval ^ octet; - hashval = hashval * FNV_prime_32; - //hashval = hashval ^ octet; - } - return Math.abs(hashval); - } - - public static final long FNV_offset_basis_64=0xCBF29CE484222325L; - public static final long FNV_prime_64=1099511628211L; - - /** - * 64 bit FNV hash. Produces more "random" hashes than (say) String.hashCode(). - * - * @param val The value to hash. - * @return The hash value - */ - public static long FNVhash64(long val) - { - //from http://en.wikipedia.org/wiki/Fowler_Noll_Vo_hash - long hashval = FNV_offset_basis_64; - - for (int i=0; i<8; i++) - { - long octet=val&0x00ff; - val=val>>8; - - hashval = hashval ^ octet; - hashval = hashval * FNV_prime_64; - //hashval = hashval ^ octet; - } - return Math.abs(hashval); - } - /** - * Reads a big-endian 8-byte long from an offset in the given array. - * @param bytes The array to read from. - * @return A long integer. - * @throws IndexOutOfBoundsException if the byte array is too small. - * @throws NullPointerException if the byte array is null. - */ - public static long bytesToLong(final byte[] bytes) { - return (bytes[0] & 0xFFL) << 56 - | (bytes[1] & 0xFFL) << 48 - | (bytes[2] & 0xFFL) << 40 - | (bytes[3] & 0xFFL) << 32 - | (bytes[4] & 0xFFL) << 24 - | (bytes[5] & 0xFFL) << 16 - | (bytes[6] & 0xFFL) << 8 - | (bytes[7] & 0xFFL) << 0; - } - - /** - * Writes a big-endian 8-byte long at an offset in the given array. - * @param val The value to encode. - * @throws IndexOutOfBoundsException if the byte array is too small. - */ - public static byte[] longToBytes(final long val) { - final byte[] bytes = new byte[8]; - bytes[0] = (byte) (val >>> 56); - bytes[1] = (byte) (val >>> 48); - bytes[2] = (byte) (val >>> 40); - bytes[3] = (byte) (val >>> 32); - bytes[4] = (byte) (val >>> 24); - bytes[5] = (byte) (val >>> 16); - bytes[6] = (byte) (val >>> 8); - bytes[7] = (byte) (val >>> 0); - return bytes; - } - - /** - * Parses the byte array into a double. - * The byte array must be at least 8 bytes long and have been encoded using - * {@link #doubleToBytes}. If the array is longer than 8 bytes, only the - * first 8 bytes are parsed. - * @param bytes The byte array to parse, at least 8 bytes. - * @return A double value read from the byte array. - * @throws IllegalArgumentException if the byte array is not 8 bytes wide. - */ - public static double bytesToDouble(final byte[] bytes) { - if (bytes.length < 8) { - throw new IllegalArgumentException("Byte array must be 8 bytes wide."); - } - return Double.longBitsToDouble(bytesToLong(bytes)); - } - - /** - * Encodes the double value as an 8 byte array. - * @param val The double value to encode. - * @return A byte array of length 8. - */ - public static byte[] doubleToBytes(final double val) { - return longToBytes(Double.doubleToRawLongBits(val)); - } - - /** - * Measure the estimated active thread count in the current thread group. - * Since this calls {@link Thread.activeCount} it should be called from the - * main thread or one started by the main thread. Threads included in the - * count can be in any state. - * For a more accurate count we could use {@link Thread.getAllStackTraces().size()} - * but that freezes the JVM and incurs a high overhead. - * @return An estimated thread count, good for showing the thread count - * over time. - */ - public static int getActiveThreadCount() { - return Thread.activeCount(); - } - - /** @return The currently used memory in bytes */ - public static long getUsedMemoryBytes() { - final Runtime runtime = Runtime.getRuntime(); - return runtime.totalMemory() - runtime.freeMemory(); - } - - /** @return The currently used memory in megabytes. */ - public static int getUsedMemoryMegaBytes() { - return (int)(getUsedMemoryBytes() / 1024 / 1024); - } - - /** @return The current system load average if supported by the JDK. - * If it's not supported, the value will be negative. */ - public static double getSystemLoadAverage() { - final OperatingSystemMXBean osBean = - ManagementFactory.getOperatingSystemMXBean(); - return osBean.getSystemLoadAverage(); - } - - /** @return The total number of garbage collections executed for all - * memory pools. */ - public static long getGCTotalCollectionCount() { - final List<GarbageCollectorMXBean> gcBeans = - ManagementFactory.getGarbageCollectorMXBeans(); - long count = 0; - for (final GarbageCollectorMXBean bean : gcBeans) { - if (bean.getCollectionCount() < 0) { - continue; - } - count += bean.getCollectionCount(); - } - return count; + /** + * Hash an integer value. + */ + public static long hash(long val) { + return fnvhash64(val); + } + + public static final long FNV_OFFSET_BASIS_64 = 0xCBF29CE484222325L; + public static final long FNV_PRIME_64 = 1099511628211L; + + /** + * 64 bit FNV hash. Produces more "random" hashes than (say) String.hashCode(). + * + * @param val The value to hash. + * @return The hash value + */ + public static long fnvhash64(long val) { + //from http://en.wikipedia.org/wiki/Fowler_Noll_Vo_hash + long hashval = FNV_OFFSET_BASIS_64; + + for (int i = 0; i < 8; i++) { + long octet = val & 0x00ff; + val = val >> 8; + + hashval = hashval ^ octet; + hashval = hashval * FNV_PRIME_64; + //hashval = hashval ^ octet; + } + return Math.abs(hashval); + } + + /** + * Reads a big-endian 8-byte long from an offset in the given array. + * @param bytes The array to read from. + * @return A long integer. + * @throws IndexOutOfBoundsException if the byte array is too small. + * @throws NullPointerException if the byte array is null. + */ + public static long bytesToLong(final byte[] bytes) { + return (bytes[0] & 0xFFL) << 56 + | (bytes[1] & 0xFFL) << 48 + | (bytes[2] & 0xFFL) << 40 + | (bytes[3] & 0xFFL) << 32 + | (bytes[4] & 0xFFL) << 24 + | (bytes[5] & 0xFFL) << 16 + | (bytes[6] & 0xFFL) << 8 + | (bytes[7] & 0xFFL) << 0; + } + + /** + * Writes a big-endian 8-byte long at an offset in the given array. + * @param val The value to encode. + * @throws IndexOutOfBoundsException if the byte array is too small. + */ + public static byte[] longToBytes(final long val) { + final byte[] bytes = new byte[8]; + bytes[0] = (byte) (val >>> 56); + bytes[1] = (byte) (val >>> 48); + bytes[2] = (byte) (val >>> 40); + bytes[3] = (byte) (val >>> 32); + bytes[4] = (byte) (val >>> 24); + bytes[5] = (byte) (val >>> 16); + bytes[6] = (byte) (val >>> 8); + bytes[7] = (byte) (val >>> 0); + return bytes; + } + + /** + * Parses the byte array into a double. + * The byte array must be at least 8 bytes long and have been encoded using + * {@link #doubleToBytes}. If the array is longer than 8 bytes, only the + * first 8 bytes are parsed. + * @param bytes The byte array to parse, at least 8 bytes. + * @return A double value read from the byte array. + * @throws IllegalArgumentException if the byte array is not 8 bytes wide. + */ + public static double bytesToDouble(final byte[] bytes) { + if (bytes.length < 8) { + throw new IllegalArgumentException("Byte array must be 8 bytes wide."); + } + return Double.longBitsToDouble(bytesToLong(bytes)); + } + + /** + * Encodes the double value as an 8 byte array. + * @param val The double value to encode. + * @return A byte array of length 8. + */ + public static byte[] doubleToBytes(final double val) { + return longToBytes(Double.doubleToRawLongBits(val)); + } + + /** + * Measure the estimated active thread count in the current thread group. + * Since this calls {@link Thread.activeCount} it should be called from the + * main thread or one started by the main thread. Threads included in the + * count can be in any state. + * For a more accurate count we could use {@link Thread.getAllStackTraces().size()} + * but that freezes the JVM and incurs a high overhead. + * @return An estimated thread count, good for showing the thread count + * over time. + */ + public static int getActiveThreadCount() { + return Thread.activeCount(); + } + + /** @return The currently used memory in bytes */ + public static long getUsedMemoryBytes() { + final Runtime runtime = Runtime.getRuntime(); + return runtime.totalMemory() - runtime.freeMemory(); + } + + /** @return The currently used memory in megabytes. */ + public static int getUsedMemoryMegaBytes() { + return (int) (getUsedMemoryBytes() / 1024 / 1024); + } + + /** @return The current system load average if supported by the JDK. + * If it's not supported, the value will be negative. */ + public static double getSystemLoadAverage() { + final OperatingSystemMXBean osBean = + ManagementFactory.getOperatingSystemMXBean(); + return osBean.getSystemLoadAverage(); + } + + /** @return The total number of garbage collections executed for all + * memory pools. */ + public static long getGCTotalCollectionCount() { + final List<GarbageCollectorMXBean> gcBeans = + ManagementFactory.getGarbageCollectorMXBeans(); + long count = 0; + for (final GarbageCollectorMXBean bean : gcBeans) { + if (bean.getCollectionCount() < 0) { + continue; } - - /** @return The total time, in milliseconds, spent in GC. */ - public static long getGCTotalTime() { - final List<GarbageCollectorMXBean> gcBeans = - ManagementFactory.getGarbageCollectorMXBeans(); - long time = 0; - for (final GarbageCollectorMXBean bean : gcBeans) { - if (bean.getCollectionTime() < 0) { - continue; - } - time += bean.getCollectionTime(); - } - return time; + count += bean.getCollectionCount(); + } + return count; + } + + /** @return The total time, in milliseconds, spent in GC. */ + public static long getGCTotalTime() { + final List<GarbageCollectorMXBean> gcBeans = + ManagementFactory.getGarbageCollectorMXBeans(); + long time = 0; + for (final GarbageCollectorMXBean bean : gcBeans) { + if (bean.getCollectionTime() < 0) { + continue; } + time += bean.getCollectionTime(); + } + return time; + } - /** - * Returns a map of garbage collectors and their stats. - * The first object in the array is the total count since JVM start and the - * second is the total time (ms) since JVM start. - * If a garbage collectors does not support the collector MXBean, then it - * will not be represented in the map. - * @return A non-null map of garbage collectors and their metrics. The map - * may be empty. - */ - public static Map<String, Long[]> getGCStatst() { - final List<GarbageCollectorMXBean> gcBeans = - ManagementFactory.getGarbageCollectorMXBeans(); - final Map<String, Long[]> map = new HashMap<String, Long[]>(gcBeans.size()); - for (final GarbageCollectorMXBean bean : gcBeans) { - if (!bean.isValid() || bean.getCollectionCount() < 0 || - bean.getCollectionTime() < 0) { - continue; - } - - final Long[] measurements = new Long[] { - bean.getCollectionCount(), - bean.getCollectionTime() - }; - map.put(bean.getName().replace(" ", "_"), measurements); - } - return map; + /** + * Returns a map of garbage collectors and their stats. + * The first object in the array is the total count since JVM start and the + * second is the total time (ms) since JVM start. + * If a garbage collectors does not support the collector MXBean, then it + * will not be represented in the map. + * @return A non-null map of garbage collectors and their metrics. The map + * may be empty. + */ + public static Map<String, Long[]> getGCStatst() { + final List<GarbageCollectorMXBean> gcBeans = + ManagementFactory.getGarbageCollectorMXBeans(); + final Map<String, Long[]> map = new HashMap<String, Long[]>(gcBeans.size()); + for (final GarbageCollectorMXBean bean : gcBeans) { + if (!bean.isValid() || bean.getCollectionCount() < 0 || + bean.getCollectionTime() < 0) { + continue; } + + final Long[] measurements = new Long[]{ + bean.getCollectionCount(), + bean.getCollectionTime() + }; + map.put(bean.getName().replace(" ", "_"), measurements); + } + return map; + } } diff --git a/core/src/main/java/com/yahoo/ycsb/generator/ScrambledZipfianGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/ScrambledZipfianGenerator.java index 8918c371..a8c1aacc 100644 --- a/core/src/main/java/com/yahoo/ycsb/generator/ScrambledZipfianGenerator.java +++ b/core/src/main/java/com/yahoo/ycsb/generator/ScrambledZipfianGenerator.java @@ -101,7 +101,7 @@ public class ScrambledZipfianGenerator extends NumberGenerator public Long nextValue() { long ret=gen.nextValue(); - ret=_min+Utils.FNVhash64(ret)%_itemcount; + ret=_min+Utils.fnvhash64(ret)%_itemcount; setLastValue(ret); return ret; } -- GitLab