1#include <time.h>
2#include <port/unistd.h>
3#include <sys/types.h>
4#include <Common/Exception.h>
5#include <Common/randomSeed.h>
6#include <Common/SipHash.h>
7#include <Core/Types.h>
8#include <port/clock.h>
9
10
11namespace DB
12{
13 namespace ErrorCodes
14 {
15 extern const int CANNOT_CLOCK_GETTIME;
16 }
17}
18
19
20DB::UInt64 randomSeed()
21{
22 struct timespec times;
23 if (clock_gettime(CLOCK_THREAD_CPUTIME_ID, &times))
24 DB::throwFromErrno("Cannot clock_gettime.", DB::ErrorCodes::CANNOT_CLOCK_GETTIME);
25
26 /// Not cryptographically secure as time, pid and stack address can be predictable.
27
28 SipHash hash;
29 hash.update(times.tv_nsec);
30 hash.update(times.tv_sec);
31 hash.update(getpid());
32 hash.update(&times);
33 return hash.get64();
34}
35