You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
jonross
added a commit
to jonross/fauxflake
that referenced
this issue
May 12, 2015
@rholder Is there an ETA on this pull? @jonross There's another pull from @azderski with a different implementation but similar issue. Is it a different problem?
It looks like the other implementation fixes the MAC address value, however another machine ID implementation could still return < 0. Also I included a test.
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:
Output:
Creating a wrapper on e.g. MacPidMachineIdProvider is an easy temporary workaround.
The text was updated successfully, but these errors were encountered: