-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Description
Negative machine IDs are possible, and SnowflakeEncodingProvider left-shifts these without checking, resulting in a small negative number that is OR'ed with the timestamp, erasing the timestamp. Example:
static class FixedIdProvider implements MachineIdProvider {
final long id;
FixedIdProvider(long id) {
this.id = id;
}
public long getMachineId() {
return id;
}
}
public static void main(String[] args) throws Exception
{
IdGenerator g1 = newSnowflakeIdGenerator(new FixedIdProvider(1));
System.out.println(g1.generateId(0).asString());
IdGenerator g2 = newSnowflakeIdGenerator(new FixedIdProvider(-1));
System.out.println(g2.generateId(0).asString());
}
Output:
080f6b18b1001000
fffffffffffff000
Creating a wrapper on e.g. MacPidMachineIdProvider is an easy temporary workaround.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels