Skip to content

Commit 94ebac7

Browse files
committed
= refactor: move time operations to TimeUtil
1 parent c7fd0ee commit 94ebac7

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

library/src/main/java/com/alibaba/dcm/internal/InetAddressCacheUtilForJdk9Plus.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
import static com.alibaba.dcm.internal.InetAddressCacheUtilCommons.NEVER_EXPIRATION;
1717
import static com.alibaba.dcm.internal.InetAddressCacheUtilCommons.toInetAddressArray;
18+
import static com.alibaba.dcm.internal.TimeUtil.convertNanoTimeToTimeMillis;
19+
import static com.alibaba.dcm.internal.TimeUtil.getNanoTimeAfterMs;
1820

1921
/**
2022
* Util class to manipulate dns cache for {@code JDK 9+}.
@@ -39,7 +41,7 @@ public class InetAddressCacheUtilForJdk9Plus {
3941
*/
4042
public static void setInetAddressCache(String host, String[] ips, long expireMillis)
4143
throws UnknownHostException, IllegalAccessException, InstantiationException, InvocationTargetException, ClassNotFoundException, NoSuchFieldException {
42-
long expiration = expireMillis == NEVER_EXPIRATION ? NEVER_EXPIRATION : System.nanoTime() + expireMillis * 1000000;
44+
long expiration = expireMillis == NEVER_EXPIRATION ? NEVER_EXPIRATION : getNanoTimeAfterMs(expireMillis);
4345
Object cachedAddresses = newCachedAddresses(host, ips, expiration);
4446

4547
getCacheFieldOfInetAddress().put(host, cachedAddresses);
@@ -178,12 +180,6 @@ public static DnsCache listInetAddressCache()
178180
return new DnsCache(retCache, retNegativeCache);
179181
}
180182

181-
/**
182-
* recorder jvm start timestamp point
183-
*/
184-
private static final long JVM_START_NANO_SECONDS = System.nanoTime();
185-
private static final long JVM_START_MILL_SECONDS = System.currentTimeMillis();
186-
187183
private static final String inetAddress$CachedAddresses_ClassName = "java.net.InetAddress$CachedAddresses";
188184
private static final String inetAddress$NameServiceAddresses_ClassName = "java.net.InetAddress$NameServiceAddresses";
189185

@@ -245,9 +241,8 @@ public static DnsCache listInetAddressCache()
245241
if (addressesClassName.equals(inetAddress$CachedAddresses_ClassName)) {
246242
inetAddressArray = (InetAddress[]) inetAddressesFieldOfInetAddress$CacheAddress.get(addresses);
247243

248-
long expirationNanos = (Long) expiryTimeFieldOfInetAddress$CacheAddress.get(addresses);
249-
// expiration timestamp convert
250-
expiration = (expirationNanos - JVM_START_NANO_SECONDS) / 1000000 + JVM_START_MILL_SECONDS;
244+
long expiryTimeNanos = (Long) expiryTimeFieldOfInetAddress$CacheAddress.get(addresses);
245+
expiration = convertNanoTimeToTimeMillis(expiryTimeNanos);
251246
} else if (addressesClassName.equals(inetAddress$NameServiceAddresses_ClassName)) {
252247
InetAddress inetAddress = (InetAddress) reqAddrFieldOfInetAddress$NameServiceAddress.get(addresses);
253248
inetAddressArray = new InetAddress[]{inetAddress};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.alibaba.dcm.internal;
2+
3+
/**
4+
* internal time util.
5+
*
6+
* @author Jerry Lee (oldratlee at gmail dot com)
7+
* @since 1.6.0
8+
*/
9+
class TimeUtil {
10+
/**
11+
* record point of {@link System#currentTimeMillis()} for {@link #NANO_TIME_CHECK_POINT}
12+
*/
13+
private static final long TIME_MILLIS_CHECK_POINT = System.currentTimeMillis();
14+
15+
/**
16+
* record point of {@link System#nanoTime()} for {@link #TIME_MILLIS_CHECK_POINT}
17+
*/
18+
private static final long NANO_TIME_CHECK_POINT = System.nanoTime();
19+
20+
private static final long MS_TO_NS = 1000000;
21+
22+
public static long convertNanoTimeToTimeMillis(long nanoTime) {
23+
return (nanoTime - NANO_TIME_CHECK_POINT) / MS_TO_NS + TIME_MILLIS_CHECK_POINT;
24+
}
25+
26+
public static long getNanoTimeAfterMs(long millSeconds) {
27+
return System.nanoTime() + millSeconds * MS_TO_NS;
28+
}
29+
}

0 commit comments

Comments
 (0)