From 56e65d7463bf15af7e4abe5cff1fe57db956d132 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Fri, 21 Sep 2018 05:35:53 +0200 Subject: [PATCH] Fix issue in UUID-v1 generator on AWS Beanstalk (#1485) --- src/main/java/io/ebean/config/ServerConfig.java | 9 +++++++++ .../server/idgen/UuidV1IdGenerator.java | 17 +++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/ebean/config/ServerConfig.java b/src/main/java/io/ebean/config/ServerConfig.java index 30e6e92f1..853c05858 100644 --- a/src/main/java/io/ebean/config/ServerConfig.java +++ b/src/main/java/io/ebean/config/ServerConfig.java @@ -1965,6 +1965,15 @@ public class ServerConfig { * Return the UUID state file. */ public String getUuidStateFile() { + if (uuidStateFile == null || uuidStateFile.isEmpty()) { + // by default, add servername... + uuidStateFile = name + "-uuid.state"; + // and store it in the user's home directory + String homeDir = System.getProperty("user.home"); + if (homeDir != null && homeDir.isEmpty()) { + uuidStateFile = homeDir + "/.ebean/" + uuidStateFile; + } + } return uuidStateFile; } diff --git a/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java b/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java index 0202ab816..19e94f4cd 100644 --- a/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java +++ b/src/main/java/io/ebeaninternal/server/idgen/UuidV1IdGenerator.java @@ -82,8 +82,17 @@ public class UuidV1IdGenerator extends UuidV1RndIdGenerator { final Enumeration e = NetworkInterface.getNetworkInterfaces(); while (e.hasMoreElements()) { NetworkInterface network = e.nextElement(); - if (!network.isLoopback()) { - return network.getHardwareAddress(); + try { + logger.trace("Probing interface {}", network); + if (!network.isLoopback()) { + byte[] addr = network.getHardwareAddress(); + if (addr != null) { + logger.debug("Using interface {}", network); + return addr; + } + } + } catch (SocketException ex) { + logger.debug("Skipping {}", network, ex); } } return null; @@ -181,6 +190,10 @@ public class UuidV1IdGenerator extends UuidV1RndIdGenerator { prop.setProperty("nodeId", getNodeIdentifier()); prop.setProperty("clockSeq", String.valueOf(clockSeq.get())); prop.setProperty("timeStamp", String.valueOf(timeStamp.get())); + File dir = stateFile.getParentFile(); + if (dir != null) { + dir.mkdirs(); + } try (OutputStream os = new FileOutputStream(stateFile)) { prop.store(os, "ebean uuid state file"); logger.debug("Persisted state to '{}'", stateFile);