Commit Graph

40 Commits

Author SHA1 Message Date
Fabio Lima 745bd55ffc feat: handle clock drift #18
Added drift tolerance of 10 seconds to preserve monotonicity when the
system clock is adjusted by NTP after a small clock drift or when the
system clock jumps back by 1 second due to leap second.

The random component is incremented when the current time:
- is the same as the previous time;
- has moved backwards up to 10 seconds.

The time component is also incremented if the random component is
exceeded, which is quite rare.
2022-04-21 14:53:06 -03:00
Fabio Lima 5abd3f46ff test: handle clock drift #18
move factory tests to the root package.
2022-04-21 14:33:11 -03:00
Fabio Lima 8a5fc3d093 regular maintenance 2021-12-11 14:04:34 -03:00
Fabio Lima ced08d1a55 Compare internal fields as unsigned integers #17 2021-11-06 10:06:14 -03:00
Fabio Lima e83a2fcf82 regular maintenance
Improve code quality after Codacy.com analysis.

Site: https://app.codacy.com
2021-10-02 09:31:19 -03:00
Fabio Lima 27a4f60cb5 Version 4.0.0 #15
Now you call `UlidFactory.newInstance()` and it's variants to get a new
`UlidFactory`.

List of changes:

- Added `UlidFactory.newInstance()`
- Added `UlidFactory.newInstance(Random)`
- Added `UlidFactory.newInstance(Supplier<byte[]>)`
- Added `UlidFactory.newMonotonicInstance()`
- Added `UlidFactory.newMonotonicInstance(Random)`
- Added `UlidFactory.newMonotonicInstance(Supplier<byte[]>)`
- Added benchmark code to compare ULID with UUID
- Removed `DefaultFactory`
- Removed `MonotonicFactory`
- Removed `Ulid.toUpperCase()`
- Removed `RandomGenerator`
2021-08-08 01:35:40 -03:00
Fabio Lima 0f431d01b1 Add constructors in UlidFactory for random generators #12
New constructors:

- public UlidFactory(Random random) { }
- public UlidFactory(RandomGenerator randomGenerator) { }
2021-07-18 01:21:41 -03:00
Fabio Lima 1dffbf1ebb Add static methods for extracting time and random components #9
Add static methods to Ulid:
 - Ulid.getInstant(String);
 - Ulid.getTime(String);
 - Ulid.getRandom(String);

List of changes:

Updated Ulid
Updated test cases
Updated README.md

Test coverage 99.4%
2021-02-13 20:14:31 -03:00
Fabio Lima 3f10989f74 [maven-release-plugin] prepare for next development iteration 2021-02-04 02:06:28 -03:00
Fabio Lima 4df6fbfa9b Development of version 3.0.0 #7
renamed subpackage 'creator' to 'factory'
2021-01-30 09:29:08 -03:00
Fabio Lima f1eaebd3bd Development of version 3.0.0 #7
continuing...

List of changes:

Improve Ulid
Create UlidFactory
Create DefaultUlidFactory
Create MonotonicUlidFactory
Improve UlidTest
Create UlidFactoryTest
Create DefaultUlidFactoryTest
Create MonotonicUlidFactoryTest
Update UniquenessTest
Update README.md
Update javadoc

Test coverage: 99.3%
2021-01-30 07:17:09 -03:00
Fabio Lima 3aa29be465 Development of version 3.0.0 #7
Continuing...

Improve Ulid
Simplify UlidSpecCreator
Simplify MonotonicUlidSpecCreator
Remove OtherRandomStrategy
Remove UlidValidator
Update test cases
2021-01-25 02:19:08 -03:00
Fabio Lima ef2842bfe8 Development of version 3.0.0 #7
Continuing...

List of changes:

Improved Ulid
Improved UlidCrator
Improved UlidSpecCreator
Improved DefaultUlidSpecCreator
Improved MonotonicUlidSpecCreator
Removed TimestampStrategy
Removed DefaultTimestampStrategy
Removed FixedTimestampStrategy
Updated testa cases
2021-01-24 16:33:11 -03:00
Fabio Lima 2ffa7a95dd Development of version 3.0.0 #7
Changed the uuid-creator to generate two types of ULID: default
(non-monotonic) and monotonic.

Until version 2.x.x this library only created monotonic ULIDs.

The version 3.0.0 breaks compatibility.

List of changes:

Changed UlidCreator
Created Ulid
Created UlidSpecCreator // abstract
Created DefaultUlidSpecCreator // implementation
Created MonotonicUlidSpecCreator // implementation
Removed UlidConverter
Removed UlidUtil
Removed UlidStruct
Create and update test cases
and more...

Test coverage: 93.5%
2021-01-24 00:08:24 -03:00
Fabio Lima e52b2cdefd Add test cases, and remove unused code
List of changes:

Change UlidUtil // remove unused code
Change UlidUtilTest // add tests and remove unused code
Change UlidStructTest // add tests
Change UlidValidator // add methods for char[] args
Optimaze UlidSpecCreator // small optimization
Optimaze UlidStruct // small optimization
Update README.md
2020-11-16 01:39:52 -03:00
Fabio Lima 1bee3ba042 Optimization of the ULID string validation
It's not needed to parse the whole ULID timestamp. All is needed is to
check the first two bits. They are extra bits added by the base-32
encoding. Both bits must be ZERO.
2020-11-09 04:27:20 -03:00
Fabio Lima 75d313c9ed [#6] Move v4 generators to UlidStruct
Moved v4 generators to UlidStruct

List of Changes:

Create UlidStruct.toUuid4()
Create UlidStruct.toString4()
Create UlidCreatorUuidTest // test cases
Create UlidCreatorStringTest // test cases
Add UlidUtil.extractUnixMilliseconds(UUID ulid)
Add UlidUtil.extractUnixMilliseconds(String ulid)
2020-11-08 17:40:50 -03:00
Fabio Lima 73d43dfc41 [#5] Generate ULID compatible with RFC-4122 UUID v4
Now it can generate UUIDs and ULIDs compatible with RFC-4122 UUID v4.

List of Changes:

Created UlidCreator.getUlid4();
Created UlidCreator.getUlidString4();
Updated README.md

Coverage 94.1%
2020-11-08 11:15:22 -03:00
Fabio Lima 54cd5c0595 [#4] Optimize the generation of ULID in string format
Now the generation of ULID in string format is 2.5x faster than before.

List of changes:

Optimize UlidSpecCreator
Optimize UlidConverter
Optimize UlidValidator
Create UlidStruct // class for internal use and test cases
Add test cases
Update README.md
Update javadoc

Coverage 94.3%
2020-11-08 07:55:58 -03:00
Fabio Lima fdd33556a7 [#3] Remove overrun exception
Remove UlidCreatorException // extremely unlikely to occur overrun

Add UlidCreator.toString() // from UUID to crockford base 32

Change DefaultRandomStrategy // no need for thread local SecureRandom

Update test cases
Update README.md
Update javadoc

Test coverage: 94.2%
2020-10-17 21:50:37 -03:00
Fabio Lima 24a2d4ce13 ...
A time out occured while publishing version 2.0.1 to maven central.

The version 2.0.2 will be created to try again.
2020-07-06 23:30:18 -03:00
Fabio Lima 3929965fe9 Fix increment
Fix UlidSpecCreator.increment()
2020-07-06 04:31:17 -03:00
Fabio Lima 327aa7bc6b Version 2.0.0
Rename UlidBasedGuidCreator to UlidSpecCreator

Add method UlidCreator.fromString()
Add RandomStrategy for UlidSpecCreator
Add DefaultRandomStrategy using thread local SecureRandom
Add OtherRandomStrategy for any instance of Random
Add tests cases

Optimize UlidConverter.fromString()
Optimize UlidConverter.toString()
Optimize UlidValidator.isValid()
Optimize UlidSpecCreator

Update README.md
Update tests cases
2020-07-04 12:37:50 -03:00
Fabio Lima 74892d1f7b Updated pom.xml 2020-04-19 20:44:36 -03:00
Fabio Lima c59d1c61f0 Preparing v1.1.0 2020-04-18 02:43:18 -03:00
Fabio Lima 1826fd960e Updated UlidBasedGuidCreator 2020-04-08 19:02:25 -03:00
Fabio Lima ffffe2af51 Updated UlidBasedGuidCreator 2020-03-16 00:34:56 -03:00
Fabio Lima eb65ed35b1 Updated pom.xml to use commons
Removed files that are also included in f4b6a3/commons.
2020-03-15 05:17:00 -03:00
Fabio Lima 5415552032 Refactored GuidCreator.java 2020-03-12 03:13:58 -03:00
Fabio Lima c01a914319 Small optimizations
Optimized methods:
- UlidUtil.fromUuidToUlid()
- UlidUtil.fromUlidToUuid()

Added tests cases:
- UlidUtilTest.testFromUuidToBytes()
- UlidUtilTest.testFromBytesToUuid()
- UlidUtilTest.testToAndFromBytes()

Created classes:
- Benchmarks.java (need to uncomment)
2020-02-25 15:40:35 -03:00
Fabio Lima 1fc0952067 Updated README.md 2020-02-24 04:53:01 -03:00
Fabio Lima da8061af21 Fixed a test case
Fixed test case: testShouldThrowOverflowException()
2020-02-24 02:30:07 -03:00
Fabio Lima 111592751a Remove method from GuidCreator
The method withoutOverrunException() is not necessary anymore.
2020-02-24 00:03:38 -03:00
Fabio Lima 7ec2a7cc98 Throw exception when 2^80 requests are made
In the previous implementation an exception was thrown when the random
part reached 2^80. It meant that if the first random generated within a
millisecond was (2^80 - 1000), the generator could thrown the exception
when only 1000 requests was made. It was very difficult, but possible.

Now it only occurs in the extremely unlikely event that you manage to
generate more than 2^80 ULIDs within the same millisecond.
2020-02-23 23:55:34 -03:00
Fabio Lima 0051e785b7 Small changes 2020-02-23 14:11:55 -03:00
Fabio Lima a89bab3863 Added XorshiftRandom 2020-02-23 14:03:58 -03:00
Fabio Lima e4a6d899f3 Changed UlidCreator 2020-02-22 13:26:15 -03:00
Fabio Lima f885a03125 Rearranging the code 2020-02-22 13:07:16 -03:00
Fabio Lima 63bee56534 Copied more code from uuid-creator 2020-02-17 01:49:00 -03:00
Fabio Lima 3fbe5c5c1b Copied some code from uuid-creator 2020-02-17 01:34:29 -03:00