@@ -187,7 +187,7 @@ namespace NKikimr::NStorage {
187187 return true ;
188188 }
189189
190- bool HasStorageQuorum (const NKikimrBlobStorage::TStorageConfig& config, std::span<TSuccessfulDisk> successful,
190+ std::optional< bool > HasStorageQuorum (const NKikimrBlobStorage::TStorageConfig& config, std::span<TSuccessfulDisk> successful,
191191 const THashMap<TString, TBridgePileId>& /* bridgePileNameMap*/ , TBridgePileId singleBridgePileId,
192192 const TNodeWardenConfig& nwConfig, bool allowUnformatted, IOutputStream *out, const char *name) {
193193 auto makeError = [&](TString error) -> bool {
@@ -323,17 +323,27 @@ namespace NKikimr::NStorage {
323323 }
324324 }
325325
326- return true ; // all group meet their quorums
326+ return groups.empty()
327+ ? std::nullopt // we don't know for sure about quorum -- no static groups defined
328+ : std::make_optional(true ); // all groups meet their quorums
327329 }
328330
329331 bool HasConfigQuorum (const NKikimrBlobStorage::TStorageConfig& config, std::span<TSuccessfulDisk> successful,
330332 const THashMap<TString, TBridgePileId>& bridgePileNameMap, TBridgePileId singleBridgePileId,
331333 const TNodeWardenConfig& nwConfig, bool mindPrev, TStringStream *out) {
332- return HasDiskQuorum (config, successful, bridgePileNameMap, singleBridgePileId, out, " new" ) &&
333- HasStorageQuorum (config, successful, bridgePileNameMap, singleBridgePileId, nwConfig, true , out, " new" ) &&
334- (!mindPrev || !config.HasPrevConfig () ||
335- HasDiskQuorum (config.GetPrevConfig (), successful, bridgePileNameMap, singleBridgePileId, out, " prev" ) &&
336- HasStorageQuorum (config.GetPrevConfig (), successful, bridgePileNameMap, singleBridgePileId, nwConfig, false , out, " prev" ));
334+ auto getQuorum = [&](auto & config, const char *name, bool allowUnformatted) {
335+ auto q = HasStorageQuorum (config, successful, bridgePileNameMap, singleBridgePileId, nwConfig,
336+ allowUnformatted, out, name);
337+ if (!q) {
338+ q.emplace (HasDiskQuorum (config, successful, bridgePileNameMap, singleBridgePileId, out, name));
339+ }
340+ return *q;
341+ };
342+ bool q = getQuorum (config, " new" , true );
343+ if (q && mindPrev && config.HasPrevConfig ()) {
344+ q = getQuorum (config.GetPrevConfig (), " prev" , false );
345+ }
346+ return q;
337347 }
338348
339349} // NKikimr::NStorage
0 commit comments