Обновления Aerospike TTL

Я пытаюсь обновить.put() в существующие записи в Aerospike с помощью клиента Python.

Я был взволнован, обнаружив, что вы действительно можете вставить в существующие записи и не обновлять TTL, как показано здесь (мета-параметры): https://www.aerospike.com/apidocs/python/client.html?highlight=ttl. Раньше я делал это, читая TTL, а затем переустанавливая его на новый пут.

Однако я обнаружил, что когда вы используете опцию aerospike.TTL_DONT_UPDATE, TTL сбрасывается на значение cold-start-evict-ttl, установленное в пространстве имен. Как мне избежать этого и просто сохранить прежний TTL без изменений?

Перекрестное размещение на форумах Aerospike: https://discuss.aerospike.com/t/aerospike-ttls-on-put/4993

1 ответ

Решение

Не публиковать образец кода в "отчете об ошибке" - это то же самое, что не мыть руки после посещения туалета. Это также поможет, если вы просто предоставите версию вашего сервера и версию вашего клиента Python.

ttl-test.py

from __future__ import print_function
import aerospike
import sys
from aerospike import exception as e
from time import sleep

config = { 'hosts': [ ('127.0.0.1', 3000) ] }

try:
    client = aerospike.client(config).connect()
except ex.ClientError as e:
    print("Error: {0} [{1}]".format(e.msg, e.code))
    sys.exit(1)

key = ('test', 'demo', 'foo')

try:
    # Write a record
    client.put(key, {
        'name': 'Hey Joe',
        'age': 66
        }, meta={'ttl': 4})
except ex.RecordError as e:
    print("Error: {0} [{1}]".format(e.msg, e.code))
client.put(key, {'z': 26}, meta={'ttl': aerospike.TTL_DONT_UPDATE})

try:
    (key, meta) = client.exists(key)
    print(meta)
except ex.RecordError as e:
    print("Error: {0} [{1}]".format(e.msg, e.code))

sleep(5)

try:
    (key, meta) = client.exists(key)
    print(meta)
except ex.RecordError as e:
    print("Error: {0} [{1}]".format(e.msg, e.code))

client.close()

А теперь, чтобы проверить это:

$ python ttl-test.py 
{'gen': 2, 'ttl': 4}
None

Кажется, работает. Обратите внимание, что я использую версию сервера> = 3.10.1

Другие вопросы по тегам