[
https://issues.apache.org/jira/browse/HBASE-21476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16708100#comment-16708100
]
Andrey Elenskiy commented on HBASE-21476:
-----------------------------------------
> Please use {{git format-patch}} to create future patches.
(y)
> What happens if a client that doesn't support nanoseconds attempts to write
> to a table that is configured for nanoseconds?
There's no error of any sort unless
"base.hregion.keyvalue.timestamp.slop.millisecs" is specified. The value will
be stored at the millisecond timestamp. It's up to the client to be careful
here.
> Do we need to account for this table attribute when bulk loading?
Yes, that's a good point. As bulk import spits out hfiles directly, we should
also account for this table attribute when adding keyvalues/puts. Will update
the patch.
> What about snapshots? do they retain information on wether their contents use
> nanoseconds? Do tables cloned from a snapshot have to have the same
> nanosecond config as the snapshot?
yes, as snapshots include table attributes within `data.manifest`, cloning
table from a snapshot will also include NANOSECOND_TIMESTAMPS attribute.
> I see the WIP patches are starting to address MOB handling, but I don't see
> it mentioned in the scope document at all.
It's mentioned at the end of Technical Approach section, it's part of the
effort to pass tabledescriptor to compactions.
Will clarify update doc to clarify these points and also look into test
failures.
> Support for nanosecond timestamps
> ---------------------------------
>
> Key: HBASE-21476
> URL: https://issues.apache.org/jira/browse/HBASE-21476
> Project: HBase
> Issue Type: New Feature
> Affects Versions: 2.1.1
> Reporter: Andrey Elenskiy
> Assignee: Andrey Elenskiy
> Priority: Major
> Labels: features, patch
> Attachments: Apache HBase - Nanosecond Timestamps v1.pdf,
> nanosecond_timestamps_v1.patch, nanosecond_timestamps_v2.patch
>
>
> Introducing a new table attribute "NANOSECOND_TIMESTAMPS" to tell HBase to
> handle timestamps with nanosecond precision. This is useful for applications
> that timestamp updates at the source with nanoseconds and still want features
> like column family TTL and "hbase.hstore.time.to.purge.deletes" to work.
> The attribute should be specified either on new tables or on existing tables
> which have timestamps only with nanosecond precision. There's no migration
> from milliseconds to nanoseconds for already existing tables. We could add
> this migration as part of compaction if you think that would be useful, but
> that would obviously make the change more complex.
> I've added a new EnvironmentEdge method "currentTimeNano()" that uses
> [java.time.Instant|https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html]
> to get time in nanoseconds which means it will only work with Java 8. The
> idea is to gradually replace all places where "EnvironmentEdge.currentTime()"
> is used to have HBase working purely with nanoseconds (which is a
> prerequisite for HBASE-14070). Also, I've refactored ScanInfo and
> PartitionedMobCompactor to expect TableDescriptor as an argument which makes
> code a little cleaner and easier to extend.
> Couple more points:
> - column family TTL (specified in seconds) and
> "hbase.hstore.time.to.purge.deletes" (specified in milliseconds) options
> don't need to be changed, those are adjusted automatically.
> - Per cell TTL needs to be scaled by clients accordingly after
> "NANOSECOND_TIMESTAMPS" table attribute is specified.
> Looking for everyone's feedback to know if that's a worthwhile direction.
> Will add more comprehensive tests in a later patch.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)