From 4ce484f3f2d9c0ae528f4a1610790f249eff3719 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Wed, 7 Aug 2019 20:41:27 +0200 Subject: [PATCH 1/3] FIX: Cache also empty lists --- src/main/java/io/ebeaninternal/server/query/CQueryEngine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java b/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java index 1159356f1..ceb657478 100644 --- a/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java +++ b/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java @@ -113,7 +113,7 @@ public class CQueryEngine { if (request.isLogSummary()) { request.getTransaction().logSummary(rcQuery.getSummary()); } - if (request.isQueryCachePut() && !list.isEmpty()) { + if (request.isQueryCachePut()) { request.addDependentTables(rcQuery.getDependentTables()); list = Collections.unmodifiableList(list); From 33416bffd09d5b095a5ddd558ab002f055b61002 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Wed, 7 Aug 2019 20:41:10 +0200 Subject: [PATCH 2/3] FIX: Detecting MAC address improved --- .../server/idgen/UuidV1IdGenerator.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java b/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java index 19e94f4cd..e5585daa6 100644 --- a/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java +++ b/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java @@ -77,25 +77,47 @@ public class UuidV1IdGenerator extends UuidV1RndIdGenerator { /** * Find hardware ID. + * + * We check all non-loopback networkinterfaces for valid hardwareAddresses + * We prefer to take the first non virtual "up" device. If no device (with valid addr) is up, + * we take the first down device. */ private static byte[] getHardwareId() throws SocketException { final Enumeration e = NetworkInterface.getNetworkInterfaces(); + byte[] fallbackAddr = null; while (e.hasMoreElements()) { NetworkInterface network = e.nextElement(); try { logger.trace("Probing interface {}", network); if (!network.isLoopback()) { byte[] addr = network.getHardwareAddress(); - if (addr != null) { - logger.debug("Using interface {}", network); - return addr; + if (validAddr(addr)) { + if (network.isUp() && network.isVirtual()) { + logger.debug("Using interface {}", network); + return addr; + } else if (fallbackAddr == null) { + logger.debug("Using interface {} as fallback", network); + fallbackAddr = addr; + } } } } catch (SocketException ex) { logger.debug("Skipping {}", network, ex); } } - return null; + return fallbackAddr; + } + + /** + * checks if addr is valid. Addr is valid if vendor is != 0x000000 or 0xFFFFFF + */ + private static boolean validAddr(byte[] addr) { + if (addr != null && addr.length >= 6) { // valid addr has 6 bytes + // check if vendor is != 0x000000 or 0xFFFFFF + return (addr[0] != 0x00 && addr[1] != 0x00 && addr[2] != 0x00) + ||(addr[0] != 0xFF && addr[1] != 0xFF && addr[2] != 0xFF); + } + return false; } /** From 0a6c26e5d3fb8e4b822030d892d048f22c7dff4b Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Wed, 7 Aug 2019 21:09:01 +0200 Subject: [PATCH 3/3] =?UTF-8?q?FIX:=20Virtual=20Pr=C3=BCfung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java b/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java index e5585daa6..d58d41da9 100644 --- a/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java +++ b/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java @@ -92,7 +92,7 @@ public class UuidV1IdGenerator extends UuidV1RndIdGenerator { if (!network.isLoopback()) { byte[] addr = network.getHardwareAddress(); if (validAddr(addr)) { - if (network.isUp() && network.isVirtual()) { + if (network.isUp() && !network.isVirtual()) { logger.debug("Using interface {}", network); return addr; } else if (fallbackAddr == null) {