Also remove redundant calls to tx.reset() in step functions after OP_COMMIT
(The step function caller is already resetting the object after OP_COMMIT is run successfully)
* EaR: Configurable encryption framework
Description
EaR implementation only supports fixed size on-disk encryption header format.
One drawback of the scheme is, introducing a newer encryption scheme as well
as updating header format in future may incur data migration restrictions.
Major changes proposed in the patch includes:
1. Flexible Encryption header format allowing the following:
1.1. Header flags (metadata) can evolve separately from the encryption algorithm
1.2. Specific encryption algorithm header to allow future extensions.
2. Update the BlobCipher encryption/decryption util classes to work with newer
encryption header format.
3. Continue supporting multiple encryption authentication schemes such as:
HMAC-SHA and AES-CMAC; also, supports no encryption-authentication schemes.
4. Refactor BlobCipher unit test to enable testing of new format.
5. Configuration knobs to control encryption header flags and algorithm
versions.
Note:
The on-disk header storage footprint savings due to the newer scheme is as follows:
1. No encryption authentication: 54% smaller compared to existing implementation.
3. AES-CMAC: 16% smaller compared to existing implementation.
3. HMAC-SHA encryption authentication: almost same size.
Testing
BlobCipherTest
EncryptionOpsTest
CommitDebug trace events are useful for measuring, in detail, the time spent in
the various parts of a single transaction. Like all log events, they have a time
associated with them. This time comes for now(), which in a real fdb system is
only updated in the run loop. This renders the timestamps inaccurate in certain
CPU bound sections which don't have a wait, e.g. in the resolver.
The desired solution is to directly call ::timer_monotonic() instead of now()
for a timestamp, since ::timer_monotonic() is what now() ultimately uses in
the run loop, but is updated between waits as well.
In order to not disrupt any current uses of the logs which might depend on the
current behavior of the Time field, we introduced the `MonotonicTime` field.
This change only affects CommitDebug trace events, not trace events in general.
* add tenant watches to storage server
* combine watches and throw different error after first loop
* try to change SS tenantmap to avoid tenantname altogether
* update code style to be consistent
* add new operation in tenant management test
* address code review changes
* add more to tenant workload and fix id parse bug
* account for TenantRef in TenantData when renaming
* code review comments
* change test assertion