Make UUID factory initialisation more robust
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / CmsUuidFactory.java
index 3ce27fce1ad02fcbe81967078cf72b1b11b2e0b2..357a0102f432f639058ce4deff06c546e5be3625 100644 (file)
@@ -11,13 +11,14 @@ import java.util.Enumeration;
 
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.uuid.ConcurrentUuidFactory;
+import org.argeo.api.uuid.NodeIdSupplier;
 import org.argeo.api.uuid.UuidBinaryUtils;
 
 public class CmsUuidFactory extends ConcurrentUuidFactory {
        private final static CmsLog log = CmsLog.getLog(CmsUuidFactory.class);
 
        public CmsUuidFactory(byte[] nodeId) {
-               super(nodeId);
+               super(0, nodeId);
                assert createTimeUUID().node() == BitSet.valueOf(toNodeIdBytes(nodeId, 0)).toLongArray()[0];
        }
 
@@ -73,8 +74,10 @@ public class CmsUuidFactory extends ConcurrentUuidFactory {
                        }
                }
                InetAddress selectedIp = selectedIpv6 != null ? selectedIpv6 : selectedIpv4;
-               if (selectedIp == null)
-                       throw new IllegalStateException("No IP address found");
+               if (selectedIp == null) {
+                       log.warn("No IP address found, using a random node id for UUID generation");
+                       return NodeIdSupplier.randomNodeId();
+               }
                byte[] digest = sha1(selectedIp.getAddress());
                log.info("Use IP " + selectedIp + " hashed as " + UuidBinaryUtils.toHexString(digest) + " as node id");
                byte[] nodeId = toNodeIdBytes(digest, 0);