bool RedisTableWaiter::waitUntilFieldSet()

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);
}