The GitHub Actions job "CI" on kvrocks.git has failed. Run started by GitHub user git-hulk (triggered by git-hulk).
Head commit for run: 4059b43f38601e560fd0812c597759eecaf463be / hulk <hulk.webs...@gmail.com> Implement an unify key-value iterator for Kvrocks (#2004) Currently, we need to iterate all keys in the database in different places like the cluster migration and kvrocks2redis, but don't have an iterator for this purpose. It's very error-prone to implement this in different places since Kvrocks may add a new column family in the future, and we must be careful to iterate all keys in all column families. This would be a burden for maintenance, So we want to implement an iterator for iterating keys. ```C++ DBIter iter(storage, read_option); for (iter.Seek(); iter.Valid(); iter.Next()) { if (iter.Type() == kRedisString || iter.Type() == kRedisJSON) { // the string/json type didn't have subkeys continue; } auto subkey_iter = iter.GetSubKeyIterator(); for (subkey_iter.Seek(); subkey_iter.Valid(); subkey_iter.Next()) { // handle its subkey and value here } } ``` When using this iterator, it will iterate the metadata column family first and check its type, if it's not a string or JSON, then it will iterate the corresponding column family to get subkeys. That said, if we have a key foo with type hash, then the iterator will iterate foo and foo:field1, foo:field2, and so on. This solution can bring those benefits: - The codes look more intuitive - Can reuse this iterator if we want to iterate keys only This closes #1989 Report URL: https://github.com/apache/kvrocks/actions/runs/7500809148 With regards, GitHub Actions via GitBox