From bed5f6de5d70378e5a6afeebe23d27c762960a5b Mon Sep 17 00:00:00 2001 From: Jeff Tung <100387939+jtung-apple@users.noreply.github.com> Date: Mon, 10 Feb 2025 14:01:36 -0800 Subject: [PATCH 1/3] [Darwin] Add logging for sync storage duration over a threshold --- .../CHIP/MTRDeviceControllerDataStore.mm | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm index 8a0057ca1ed9f2..10d654bcc6ceb5 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm @@ -26,6 +26,9 @@ #include #include +// Log error each time sync storage takes longer than this threshold +#define SYNC_OPERATION_DURATION_LOG_THRESHOLD (2.0) + // FIXME: Are these good key strings? https://github.com/project-chip/connectedhomeip/issues/28973 static NSString * sResumptionNodeListKey = @"caseResumptionNodeList"; static NSString * sLastLocallyUsedNOCKey = @"lastLocallyUsedControllerNOC"; @@ -134,6 +137,7 @@ - (nullable instancetype)initWithController:(MTRDeviceController *)controller __block id resumptionNodeList; __block NSArray * nodesWithAttributeInfo; + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ @autoreleasepool { // NOTE: controller, not our weak ref, since we know it's still @@ -146,6 +150,10 @@ - (nullable instancetype)initWithController:(MTRDeviceController *)controller nodesWithAttributeInfo = [self _fetchNodeIndex]; } }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore init took %0.6lf seconds to read from storage", syncDuration); + } if (resumptionNodeList != nil) { if (![resumptionNodeList isKindOfClass:[NSArray class]]) { MTR_LOG_ERROR("List of CASE resumption node IDs is not an array"); @@ -177,11 +185,16 @@ - (void)fetchAttributeDataForAllDevices:(MTRDeviceControllerDataStoreClusterData MTRDeviceController * controller = _controller; VerifyOrReturn(controller != nil); // No way to call delegate without controller. + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ if ([self->_storageDelegate respondsToSelector:@selector(valuesForController:securityLevel:sharingType:)]) { dataStoreSecureLocalValues = [self->_storageDelegate valuesForController:controller securityLevel:MTRStorageSecurityLevelSecure sharingType:MTRStorageSharingTypeNotShared]; } }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore fetchAttributeDataForAllDevices took %0.6lf seconds to read from storage", syncDuration); + } if (dataStoreSecureLocalValues.count) { clusterDataHandler([self _getClusterDataFromSecureLocalValues:dataStoreSecureLocalValues]); @@ -204,6 +217,7 @@ - (void)storeResumptionInfo:(MTRCASESessionResumptionInfo *)resumptionInfo VerifyOrReturn(controller != nil); // No way to call delegate without controller. auto * oldInfo = [self findResumptionInfoByNodeID:resumptionInfo.nodeID]; + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ if (oldInfo != nil) { // Remove old resumption id key. No need to do that for the @@ -241,6 +255,10 @@ - (void)storeResumptionInfo:(MTRCASESessionResumptionInfo *)resumptionInfo securityLevel:MTRStorageSecurityLevelSecure sharingType:MTRStorageSharingTypeNotShared]; }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore storeResumptionInfo took %0.6lf seconds to store to storage", syncDuration); + } } - (void)clearAllResumptionInfo @@ -274,6 +292,7 @@ - (void)_clearResumptionInfoForNodeID:(NSNumber *)nodeID controller:(MTRDeviceCo { auto * oldInfo = [self findResumptionInfoByNodeID:nodeID]; if (oldInfo != nil) { + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ [_storageDelegate controller:controller removeValueForKey:ResumptionByResumptionIDKey(oldInfo.resumptionID) @@ -284,7 +303,11 @@ - (void)_clearResumptionInfoForNodeID:(NSNumber *)nodeID controller:(MTRDeviceCo securityLevel:MTRStorageSecurityLevelSecure sharingType:MTRStorageSharingTypeNotShared]; }); - } + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore _clearResumptionInfoForNodeID took %0.6lf seconds to remove from storage", syncDuration); + } + } } - (CHIP_ERROR)storeLastLocallyUsedNOC:(MTRCertificateTLVBytes)noc @@ -293,6 +316,7 @@ - (CHIP_ERROR)storeLastLocallyUsedNOC:(MTRCertificateTLVBytes)noc VerifyOrReturnError(controller != nil, CHIP_ERROR_PERSISTED_STORAGE_FAILED); // No way to call delegate without controller. __block BOOL ok; + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ ok = [_storageDelegate controller:controller storeValue:noc @@ -300,6 +324,10 @@ - (CHIP_ERROR)storeLastLocallyUsedNOC:(MTRCertificateTLVBytes)noc securityLevel:MTRStorageSecurityLevelSecure sharingType:MTRStorageSharingTypeNotShared]; }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore storeLastLocallyUsedNOC took %0.6lf seconds to store to storage", syncDuration); + } return ok ? CHIP_NO_ERROR : CHIP_ERROR_PERSISTED_STORAGE_FAILED; } @@ -309,6 +337,7 @@ - (MTRCertificateTLVBytes _Nullable)fetchLastLocallyUsedNOC VerifyOrReturnValue(controller != nil, nil); // No way to call delegate without controller. __block id data; + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ @autoreleasepool { data = [_storageDelegate controller:controller @@ -317,6 +346,10 @@ - (MTRCertificateTLVBytes _Nullable)fetchLastLocallyUsedNOC sharingType:MTRStorageSharingTypeNotShared]; } }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore fetchLastLocallyUsedNOC took %0.6lf seconds to read from storage", syncDuration); + } if (data == nil) { return nil; @@ -340,6 +373,7 @@ - (nullable MTRCASESessionResumptionInfo *)_findResumptionInfoWithKey:(nullable } __block id resumptionInfo; + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ @autoreleasepool { resumptionInfo = [_storageDelegate controller:controller @@ -348,6 +382,10 @@ - (nullable MTRCASESessionResumptionInfo *)_findResumptionInfoWithKey:(nullable sharingType:MTRStorageSharingTypeNotShared]; } }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore _findResumptionInfoWithKey took %0.6lf seconds to read from storage", syncDuration); + } if (resumptionInfo == nil) { return nil; @@ -866,6 +904,7 @@ - (void)clearAllStoredClusterData } __block NSMutableDictionary * clusterDataToReturn = nil; + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ std::lock_guard lock(self->_nodeArrayLock); @@ -924,6 +963,10 @@ - (void)clearAllStoredClusterData } } }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore getStoredClusterDataForNodeID took %0.6lf seconds to read from storage", syncDuration); + } return clusterDataToReturn; } @@ -934,9 +977,14 @@ - (nullable MTRDeviceClusterData *)getStoredClusterDataForNodeID:(NSNumber *)nod // when the consumer knows that we're supposed to have data for this cluster // path. __block MTRDeviceClusterData * clusterDataToReturn = nil; + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ clusterDataToReturn = [self _fetchClusterDataForNodeID:nodeID endpointID:endpointID clusterID:clusterID]; }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore getStoredClusterDataForNodeID took %0.6lf seconds to read from storage", syncDuration); + } return clusterDataToReturn; } @@ -1173,6 +1221,7 @@ - (NSString *)_deviceDataKeyForNodeID:(NSNumber *)nodeID - (nullable NSDictionary *)getStoredDeviceDataForNodeID:(NSNumber *)nodeID { __block NSDictionary * deviceData = nil; + NSDate *startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ MTRDeviceController * controller = self->_controller; VerifyOrReturn(controller != nil); // No way to call delegate without controller. @@ -1204,6 +1253,10 @@ - (NSString *)_deviceDataKeyForNodeID:(NSNumber *)nodeID // to do that. deviceData = dictionary; }); + NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + MTR_LOG_ERROR("MTRDeviceControllerDataStore getStoredDeviceDataForNodeID took %0.6lf seconds to read from storage", syncDuration); + } return deviceData; } From 30e8c8f1e73f102f10c6180575e01c49399d0e91 Mon Sep 17 00:00:00 2001 From: Jeff Tung <100387939+jtung-apple@users.noreply.github.com> Date: Mon, 10 Feb 2025 22:33:16 -0800 Subject: [PATCH 2/3] restyled --- .../CHIP/MTRDeviceControllerDataStore.mm | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm index 10d654bcc6ceb5..c225a8cb1cdbc8 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm @@ -27,7 +27,7 @@ #include // Log error each time sync storage takes longer than this threshold -#define SYNC_OPERATION_DURATION_LOG_THRESHOLD (2.0) +#define SYNC_OPERATION_DURATION_LOG_THRESHOLD (2.0) // FIXME: Are these good key strings? https://github.com/project-chip/connectedhomeip/issues/28973 static NSString * sResumptionNodeListKey = @"caseResumptionNodeList"; @@ -137,7 +137,7 @@ - (nullable instancetype)initWithController:(MTRDeviceController *)controller __block id resumptionNodeList; __block NSArray * nodesWithAttributeInfo; - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ @autoreleasepool { // NOTE: controller, not our weak ref, since we know it's still @@ -185,7 +185,7 @@ - (void)fetchAttributeDataForAllDevices:(MTRDeviceControllerDataStoreClusterData MTRDeviceController * controller = _controller; VerifyOrReturn(controller != nil); // No way to call delegate without controller. - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ if ([self->_storageDelegate respondsToSelector:@selector(valuesForController:securityLevel:sharingType:)]) { dataStoreSecureLocalValues = [self->_storageDelegate valuesForController:controller securityLevel:MTRStorageSecurityLevelSecure sharingType:MTRStorageSharingTypeNotShared]; @@ -217,7 +217,7 @@ - (void)storeResumptionInfo:(MTRCASESessionResumptionInfo *)resumptionInfo VerifyOrReturn(controller != nil); // No way to call delegate without controller. auto * oldInfo = [self findResumptionInfoByNodeID:resumptionInfo.nodeID]; - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ if (oldInfo != nil) { // Remove old resumption id key. No need to do that for the @@ -292,7 +292,7 @@ - (void)_clearResumptionInfoForNodeID:(NSNumber *)nodeID controller:(MTRDeviceCo { auto * oldInfo = [self findResumptionInfoByNodeID:nodeID]; if (oldInfo != nil) { - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ [_storageDelegate controller:controller removeValueForKey:ResumptionByResumptionIDKey(oldInfo.resumptionID) @@ -307,7 +307,7 @@ - (void)_clearResumptionInfoForNodeID:(NSNumber *)nodeID controller:(MTRDeviceCo if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { MTR_LOG_ERROR("MTRDeviceControllerDataStore _clearResumptionInfoForNodeID took %0.6lf seconds to remove from storage", syncDuration); } - } + } } - (CHIP_ERROR)storeLastLocallyUsedNOC:(MTRCertificateTLVBytes)noc @@ -316,7 +316,7 @@ - (CHIP_ERROR)storeLastLocallyUsedNOC:(MTRCertificateTLVBytes)noc VerifyOrReturnError(controller != nil, CHIP_ERROR_PERSISTED_STORAGE_FAILED); // No way to call delegate without controller. __block BOOL ok; - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ ok = [_storageDelegate controller:controller storeValue:noc @@ -337,7 +337,7 @@ - (MTRCertificateTLVBytes _Nullable)fetchLastLocallyUsedNOC VerifyOrReturnValue(controller != nil, nil); // No way to call delegate without controller. __block id data; - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ @autoreleasepool { data = [_storageDelegate controller:controller @@ -373,7 +373,7 @@ - (nullable MTRCASESessionResumptionInfo *)_findResumptionInfoWithKey:(nullable } __block id resumptionInfo; - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ @autoreleasepool { resumptionInfo = [_storageDelegate controller:controller @@ -904,7 +904,7 @@ - (void)clearAllStoredClusterData } __block NSMutableDictionary * clusterDataToReturn = nil; - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ std::lock_guard lock(self->_nodeArrayLock); @@ -977,7 +977,7 @@ - (nullable MTRDeviceClusterData *)getStoredClusterDataForNodeID:(NSNumber *)nod // when the consumer knows that we're supposed to have data for this cluster // path. __block MTRDeviceClusterData * clusterDataToReturn = nil; - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ clusterDataToReturn = [self _fetchClusterDataForNodeID:nodeID endpointID:endpointID clusterID:clusterID]; }); @@ -1221,7 +1221,7 @@ - (NSString *)_deviceDataKeyForNodeID:(NSNumber *)nodeID - (nullable NSDictionary *)getStoredDeviceDataForNodeID:(NSNumber *)nodeID { __block NSDictionary * deviceData = nil; - NSDate *startTime = [NSDate now]; + NSDate * startTime = [NSDate now]; dispatch_sync(_storageDelegateQueue, ^{ MTRDeviceController * controller = self->_controller; VerifyOrReturn(controller != nil); // No way to call delegate without controller. From 5b87a957a9d18c308f55a041d55c2651cca1389e Mon Sep 17 00:00:00 2001 From: Jeff Tung <100387939+jtung-apple@users.noreply.github.com> Date: Tue, 11 Feb 2025 12:01:31 -0800 Subject: [PATCH 3/3] Clarify constant name per review comment --- .../CHIP/MTRDeviceControllerDataStore.mm | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm index c225a8cb1cdbc8..7baa49060dd282 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.mm @@ -27,7 +27,7 @@ #include // Log error each time sync storage takes longer than this threshold -#define SYNC_OPERATION_DURATION_LOG_THRESHOLD (2.0) +#define SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS (2.0) // FIXME: Are these good key strings? https://github.com/project-chip/connectedhomeip/issues/28973 static NSString * sResumptionNodeListKey = @"caseResumptionNodeList"; @@ -151,7 +151,7 @@ - (nullable instancetype)initWithController:(MTRDeviceController *)controller } }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore init took %0.6lf seconds to read from storage", syncDuration); } if (resumptionNodeList != nil) { @@ -192,7 +192,7 @@ - (void)fetchAttributeDataForAllDevices:(MTRDeviceControllerDataStoreClusterData } }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore fetchAttributeDataForAllDevices took %0.6lf seconds to read from storage", syncDuration); } @@ -256,7 +256,7 @@ - (void)storeResumptionInfo:(MTRCASESessionResumptionInfo *)resumptionInfo sharingType:MTRStorageSharingTypeNotShared]; }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore storeResumptionInfo took %0.6lf seconds to store to storage", syncDuration); } } @@ -304,7 +304,7 @@ - (void)_clearResumptionInfoForNodeID:(NSNumber *)nodeID controller:(MTRDeviceCo sharingType:MTRStorageSharingTypeNotShared]; }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore _clearResumptionInfoForNodeID took %0.6lf seconds to remove from storage", syncDuration); } } @@ -325,7 +325,7 @@ - (CHIP_ERROR)storeLastLocallyUsedNOC:(MTRCertificateTLVBytes)noc sharingType:MTRStorageSharingTypeNotShared]; }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore storeLastLocallyUsedNOC took %0.6lf seconds to store to storage", syncDuration); } return ok ? CHIP_NO_ERROR : CHIP_ERROR_PERSISTED_STORAGE_FAILED; @@ -347,7 +347,7 @@ - (MTRCertificateTLVBytes _Nullable)fetchLastLocallyUsedNOC } }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore fetchLastLocallyUsedNOC took %0.6lf seconds to read from storage", syncDuration); } @@ -383,7 +383,7 @@ - (nullable MTRCASESessionResumptionInfo *)_findResumptionInfoWithKey:(nullable } }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore _findResumptionInfoWithKey took %0.6lf seconds to read from storage", syncDuration); } @@ -964,7 +964,7 @@ - (void)clearAllStoredClusterData } }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore getStoredClusterDataForNodeID took %0.6lf seconds to read from storage", syncDuration); } @@ -982,7 +982,7 @@ - (nullable MTRDeviceClusterData *)getStoredClusterDataForNodeID:(NSNumber *)nod clusterDataToReturn = [self _fetchClusterDataForNodeID:nodeID endpointID:endpointID clusterID:clusterID]; }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore getStoredClusterDataForNodeID took %0.6lf seconds to read from storage", syncDuration); } return clusterDataToReturn; @@ -1254,7 +1254,7 @@ - (NSString *)_deviceDataKeyForNodeID:(NSNumber *)nodeID deviceData = dictionary; }); NSTimeInterval syncDuration = -[startTime timeIntervalSinceNow]; - if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD) { + if (syncDuration > SYNC_OPERATION_DURATION_LOG_THRESHOLD_SECONDS) { MTR_LOG_ERROR("MTRDeviceControllerDataStore getStoredDeviceDataForNodeID took %0.6lf seconds to read from storage", syncDuration); } return deviceData;