in common/redis_table_waiter.cpp [67:101]
bool RedisTableWaiter::waitUntilFieldSet(
DBConnector &db,
const std::string &tableName,
const std::string &key,
const std::string &fieldName,
unsigned int maxWaitSec,
ConditionFunc &cond)
{
auto sep = SonicDBConfig::getSeparator(&db);
auto value = db.hget(tableName + sep + key, fieldName);
if (value && cond(*value.get()))
{
return true;
}
CheckFunc checkFunc = [&](const KeyOpFieldsValuesTuple &kco) -> bool {
if (SET_COMMAND == kfvOp(kco))
{
if (key == kfvKey(kco))
{
auto& values = kfvFieldsValues(kco);
for (auto& fvt: values)
{
if (fieldName == fvField(fvt))
{
return cond(fvValue(fvt));
}
}
}
}
return false;
};
return waitUntil(db, tableName, maxWaitSec, checkFunc);
}