@@ -159,75 +159,68 @@ namespace milvus::cachinglayer::monitor {
159159 DEFINE_PROMETHEUS_COUNTER (metric_family##_disk, metric_family, label_disk); \
160160 DEFINE_PROMETHEUS_COUNTER (metric_family##_mixed, metric_family, label_mixed);
161161
162- /* Caching Layer Metrics Access Helpers */
163- #define DEFINE_METRIC_HELPER_WITH_DATA_TYPE_AND_LOCATION (metric_type, metric_name ) \
164- static inline metric_type& metric_name (CellDataType t, StorageType loc) { \
165- switch (loc) { \
166- case StorageType::MEMORY: \
167- switch (t) { \
168- case CellDataType::VECTOR_FIELD: \
169- return internal_##metric_name##_vector_field_memory; \
170- case CellDataType::VECTOR_INDEX: \
171- return internal_##metric_name##_vector_index_memory; \
172- case CellDataType::SCALAR_FIELD: \
173- return internal_##metric_name##_scalar_field_memory; \
174- case CellDataType::SCALAR_INDEX: \
175- return internal_##metric_name##_scalar_index_memory; \
176- case CellDataType::OTHER: \
177- return internal_##metric_name##_other_memory; \
178- default : \
179- ThrowInfo (ErrorCode::UnexpectedError, " Unknown CellDataType" ); \
180- } \
181- break ; \
182- case StorageType::DISK: \
183- switch (t) { \
184- case CellDataType::VECTOR_FIELD: \
185- return internal_##metric_name##_vector_field_disk; \
186- case CellDataType::VECTOR_INDEX: \
187- return internal_##metric_name##_vector_index_disk; \
188- case CellDataType::SCALAR_FIELD: \
189- return internal_##metric_name##_scalar_field_disk; \
190- case CellDataType::SCALAR_INDEX: \
191- return internal_##metric_name##_scalar_index_disk; \
192- case CellDataType::OTHER: \
193- return internal_##metric_name##_other_disk; \
194- default : \
195- ThrowInfo (ErrorCode::UnexpectedError, " Unknown CellDataType" ); \
196- } \
197- break ; \
198- case StorageType::MIXED: \
199- switch (t) { \
200- case CellDataType::VECTOR_FIELD: \
201- return internal_##metric_name##_vector_field_mixed; \
202- case CellDataType::VECTOR_INDEX: \
203- return internal_##metric_name##_vector_index_mixed; \
204- case CellDataType::SCALAR_FIELD: \
205- return internal_##metric_name##_scalar_field_mixed; \
206- case CellDataType::SCALAR_INDEX: \
207- return internal_##metric_name##_scalar_index_mixed; \
208- case CellDataType::OTHER: \
209- return internal_##metric_name##_other_mixed; \
210- default : \
211- ThrowInfo (ErrorCode::UnexpectedError, " Unknown CellDataType" ); \
212- } \
213- break ; \
214- default : \
215- ThrowInfo (ErrorCode::UnexpectedError, " Unknown StorageType" ); \
216- } \
162+ #define DEFINE_METRIC_HELPER_WITH_DATA_TYPE_AND_LOCATION (metric_type, metric_name ) \
163+ template <typename data_type, typename storage_type> \
164+ static inline metric_type& metric_name##_for() { \
165+ if constexpr (std::is_same_v<storage_type, memory_storage_type>) { \
166+ if constexpr (std::is_same_v<data_type, vector_field_data_type>) { \
167+ return internal_##metric_name##_vector_field_memory; \
168+ } else if constexpr (std::is_same_v<data_type, vector_field_index_data_type>) { \
169+ return internal_##metric_name##_vector_index_memory; \
170+ } else if constexpr (std::is_same_v<data_type, scalar_field_data_type>) { \
171+ return internal_##metric_name##_scalar_field_memory; \
172+ } else if constexpr (std::is_same_v<data_type, scalar_field_index_data_type>) { \
173+ return internal_##metric_name##_scalar_index_memory; \
174+ } else if constexpr (std::is_same_v<data_type, other_data_type>) { \
175+ return internal_##metric_name##_other_memory; \
176+ } else { \
177+ static_assert (always_false<data_type>::value, " Unknown data_type for metric " #metric_name); \
178+ } \
179+ } else if constexpr (std::is_same_v<storage_type, disk_storage_type>) { \
180+ if constexpr (std::is_same_v<data_type, vector_field_data_type>) { \
181+ return internal_##metric_name##_vector_field_disk; \
182+ } else if constexpr (std::is_same_v<data_type, vector_field_index_data_type>) { \
183+ return internal_##metric_name##_vector_index_disk; \
184+ } else if constexpr (std::is_same_v<data_type, scalar_field_data_type>) { \
185+ return internal_##metric_name##_scalar_field_disk; \
186+ } else if constexpr (std::is_same_v<data_type, scalar_field_index_data_type>) { \
187+ return internal_##metric_name##_scalar_index_disk; \
188+ } else if constexpr (std::is_same_v<data_type, other_data_type>) { \
189+ return internal_##metric_name##_other_disk; \
190+ } else { \
191+ static_assert (always_false<data_type>::value, " Unknown data_type for metric " #metric_name); \
192+ } \
193+ } else if constexpr (std::is_same_v<storage_type, mixed_storage_type>) { \
194+ if constexpr (std::is_same_v<data_type, vector_field_data_type>) { \
195+ return internal_##metric_name##_vector_field_mixed; \
196+ } else if constexpr (std::is_same_v<data_type, vector_field_index_data_type>) { \
197+ return internal_##metric_name##_vector_index_mixed; \
198+ } else if constexpr (std::is_same_v<data_type, scalar_field_data_type>) { \
199+ return internal_##metric_name##_scalar_field_mixed; \
200+ } else if constexpr (std::is_same_v<data_type, scalar_field_index_data_type>) { \
201+ return internal_##metric_name##_scalar_index_mixed; \
202+ } else if constexpr (std::is_same_v<data_type, other_data_type>) { \
203+ return internal_##metric_name##_other_mixed; \
204+ } else { \
205+ static_assert (always_false<data_type>::value, " Unknown data_type for metric " #metric_name); \
206+ } \
207+ } else { \
208+ static_assert (always_false<storage_type>::value, " Unknown storage_type for metric " #metric_name); \
209+ } \
217210 }
218211
219- #define DEFINE_METRIC_HELPER_WITH_LOCATION (metric_type, metric_name ) \
220- static inline metric_type& metric_name (StorageType loc) { \
221- switch (loc ) { \
222- case StorageType::MEMORY: \
223- return internal_##metric_name##_memory; \
224- case StorageType::DISK: \
225- return internal_##metric_name##_disk; \
226- case StorageType::MIXED: \
227- return internal_##metric_name##_mixed; \
228- default : \
229- ThrowInfo (ErrorCode::UnexpectedError , " Unknown StorageType " ); \
230- } \
212+ #define DEFINE_METRIC_HELPER_WITH_LOCATION (metric_type, metric_name ) \
213+ template < typename storage_type> \
214+ static inline metric_type& metric_name##_for( ) { \
215+ if constexpr (std::is_same_v<storage_type, memory_storage_type>) { \
216+ return internal_##metric_name##_memory; \
217+ } else if constexpr (std::is_same_v<storage_type, disk_storage_type>) { \
218+ return internal_##metric_name##_disk; \
219+ } else if constexpr (std::is_same_v<storage_type, mixed_storage_type>) { \
220+ return internal_##metric_name##_mixed; \
221+ } else { \
222+ static_assert (always_false<storage_type>::value , " Unknown storage_type for metric " #metric_name ); \
223+ } \
231224 }
232225
233226/* Metrics for Cache Resource Usage */
0 commit comments