Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update ttl for all records in aerospike

I was stuck in a situation that I have initialised a namesapce with default-ttl to 30 days. There was about 5 million data with that (30-day calculated) ttl-value. Actually, my requirement is that ttl should be zero(0), but It(ttl-30d) was kept with unaware or un-recognise.

So, Now I want to update prev(old) 5 million data with new ttl-value (Zero).

I've checked/tried "set-disable-eviction true", but it is not working, it is removing data according to (old)ttl-value.

How do I overcome out this? (and I want to retrieve the removed data, How can I?).

Someone help me.

like image 270
chikku Avatar asked Jul 08 '17 16:07

chikku


1 Answers

First, eviction and expiration are two different mechanisms. You can disable evictions in various ways, such as the set-disable-eviction config parameter you've used. You cannot disable the cleanup of expired records. There's a good knowledge base FAQ What are Expiration, Eviction and Stop-Writes?. Unfortunately, the expired records that have been cleaned up are gone if their void time is in the past. If those records were merely evicted (i.e. removed before their void time due to crossing the namespace high-water mark for memory or disk) you can cold restart your node, and those records with a future TTL will come back. They won't return if either they were durably deleted or if their TTL is in the past (such records gets skipped).

As for resetting TTLs, the easiest way would be to do this through a record UDF that is applied to all the records in your namespace using a scan.

The UDF for your situation would be very simple:

ttl.lua

function to_zero_ttl(rec)
  local rec_ttl = record.ttl(rec)
  if rec_ttl > 0 then
    record.set_ttl(rec, -1)
    aerospike:update(rec)
  end
end

In AQL:

$ aql
Aerospike Query Client
Version 3.12.0
C Client Version 4.1.4
Copyright 2012-2017 Aerospike. All rights reserved.
aql> register module './ttl.lua'
OK, 1 module added.

aql> execute ttl.to_zero_ttl() on test.foo
like image 131
Ronen Botzer Avatar answered Oct 04 '22 17:10

Ronen Botzer