我正在尝试执行HBase客户端Put操作,该操作的计算出的时间戳等效于年份“ Thu Sep 21 12:50:34 EDT 1950”,该年份为负值。
用例:设置过去的创建日期以对值执行预期的TTL
参考: How to set a future insert date in Google Cloud Bigtable? Trying to calculate it using TTL
错误:
Caused by: java.lang.IllegalArgumentException: Timestamp cannot be negative. ts=-608368165717
代码:
long now = System.currentTimeMillis();
long colFam_TTL = cfDescriptor1.getTimeToLive() * 1000; // TTL: Forever => 2147483647 Seconds
long expiry_past = now - colFam_TTL;
long creationTime = (expiry_past + 3600000); // Expected TTL : 1 hour(3600000 ms)
Put p = new Put(rowkey, creationTime);
该计算对于将TTL设置为maxage:1h或maxage:5d的列系列工作正常
是否有解决方法?如何设置相似的ts?
答案 0 :(得分:0)
对于您要完成的任务,我还不太清楚,但是正如另一位评论者所指出的那样,问题在于,时间戳记Cloud Bigtable时间戳记必须为非负数。
在这种情况下,问题在于,正如您所指出的,在编写时,creationTime为负值,并且时间戳记值必须为正值,对于任何基于时间的GC表达式,其解释为距Unix纪元的毫秒数。
似乎您真正想要的是计算colFam_TTL-现在,而不是相反,并将其限制为0。