Skip to content

Commit

Permalink
Revert "Fix the issue of ignoring callback calls for removed keys. (#789
Browse files Browse the repository at this point in the history
)" (#804)

This reverts commit e0f394c.

The reason is unexpected behavior change of `get_entry`. ref: #789 (comment)
  • Loading branch information
qiluo-msft authored Aug 1, 2023
1 parent 82581cf commit 7ff768a
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 35 deletions.
2 changes: 1 addition & 1 deletion common/configdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ class ConfigDBConnector_Native : public SonicV2Connector_Native
## Dynamic typed functions used in python
@staticmethod
def raw_to_typed(raw_data):
if not raw_data or not raw_data.keys():
if raw_data is None:
return None
typed_data = {}
for raw_key in raw_data:
Expand Down
45 changes: 11 additions & 34 deletions tests/test_redis_ut.py
Original file line number Diff line number Diff line change
Expand Up @@ -634,40 +634,29 @@ def thread_coming_entry():
def test_ConfigDBInit():
table_name_1 = 'TEST_TABLE_1'
table_name_2 = 'TEST_TABLE_2'
table_name_3 = 'TEST_TABLE_3'
test_key = 'key1'
test_data = {'field1': 'value1'}

queue = multiprocessing.Queue()
test_data_update = {'field1': 'value2'}

manager = multiprocessing.Manager()
ret_data = manager.dict()

def test_handler(table, key, data, ret, q=None):
if data is None:
ret[table] = {k: v for k, v in ret[table].items() if k != key}
else:
ret[table] = {key: data}

if q:
q.put(ret[table])
def test_handler(table, key, data, ret):
ret[table] = {key: data}

def test_init_handler(data, ret, queue):
def test_init_handler(data, ret):
ret.update(data)
queue.put(ret)

def thread_listen(ret, queue):
def thread_listen(ret):
config_db = ConfigDBConnector()
config_db.connect(wait_for_init=False)

config_db.subscribe(table_name_1, lambda table, key, data: test_handler(table, key, data, ret),
fire_init_data=False)
config_db.subscribe(table_name_2, lambda table, key, data: test_handler(table, key, data, ret),
fire_init_data=True)
config_db.subscribe(table_name_3, lambda table, key, data: test_handler(table, key, data, ret, queue),
fire_init_data=False)

config_db.listen(init_data_handler=lambda data: test_init_handler(data, ret, queue))
config_db.listen(init_data_handler=lambda data: test_init_handler(data, ret))

config_db = ConfigDBConnector()
config_db.connect(wait_for_init=False)
Expand All @@ -677,27 +666,15 @@ def thread_listen(ret, queue):
# Init table data
config_db.set_entry(table_name_1, test_key, test_data)
config_db.set_entry(table_name_2, test_key, test_data)
config_db.set_entry(table_name_3, test_key, {})

thread = multiprocessing.Process(target=thread_listen, args=(ret_data, queue))
thread = multiprocessing.Process(target=thread_listen, args=(ret_data,))
thread.start()

init_data = queue.get(5)

# Verify that all tables initialized correctly
assert init_data[table_name_1] == {test_key: test_data}
assert init_data[table_name_2] == {test_key: test_data}
assert init_data[table_name_3] == {test_key: {}}

# Remove the entry (with no attributes) from the table.
# Verify that the update is received and a callback is called
config_db.set_entry(table_name_3, test_key, None)

table_3_data = queue.get(5)
assert test_key not in table_3_data

time.sleep(5)
thread.terminate()

assert ret_data[table_name_1] == {test_key: test_data}
assert ret_data[table_name_2] == {test_key: test_data}


def test_DBConnectFailure():
""" Verify that a DB connection failure will not cause a process abort
Expand Down

0 comments on commit 7ff768a

Please sign in to comment.