MCPcopy
hub / github.com/uber/aresdb / PrepareEnumCases

Method PrepareEnumCases

client/schema.go:199–255  ·  view source on GitHub ↗

PrepareEnumCases prepares enum cases

(tableName, columnName string, enumCases []string)

Source from the content-addressed store, hash-verified

197
198// PrepareEnumCases prepares enum cases
199func (cf *CachedSchemaHandler) PrepareEnumCases(tableName, columnName string, enumCases []string) error {
200 newEnumCases := make([]string, 0, len(enumCases))
201 cf.RLock()
202 schema, exist := cf.schemas[tableName]
203 if !exist {
204 cf.RUnlock()
205 return nil
206 }
207 columnID, exist := schema.ColumnDict[columnName]
208 if !exist {
209 cf.RUnlock()
210 return nil
211 }
212
213 caseInsensitive := schema.Table.Columns[columnID].CaseInsensitive
214 disableAutoExpand := schema.Table.Columns[columnID].DisableAutoExpand
215 for _, enumCase := range enumCases {
216 if _, exist := cf.enumMappings[tableName][columnID][enumCase]; !exist {
217 newEnumCases = append(newEnumCases, enumCase)
218 }
219 }
220 cf.RUnlock()
221
222 numNewEnumCases := len(newEnumCases)
223 if disableAutoExpand && numNewEnumCases > 0 {
224 // It's recommended to set up elk or sentry logging to catch this error.
225 cf.logger.With(
226 "TableName", tableName,
227 "ColumnName", columnName,
228 "ColumnID", columnID,
229 "newEnumCasesSet", newEnumCases,
230 "caseInsensitive", caseInsensitive,
231 ).Warn("Finding new enum cases during ingestion but enum auto expansion is disabled")
232 cf.metricScope.Tagged(
233 map[string]string{
234 "TableName": tableName,
235 "ColumnID": strconv.Itoa(columnID),
236 },
237 ).Counter("new_enum_cases_ignored").Inc(int64(numNewEnumCases))
238 return nil
239 }
240
241 enumIDs, err := cf.schemaFetcher.ExtendEnumCases(tableName, columnName, newEnumCases)
242 if err != nil {
243 return err
244 }
245
246 cf.Lock()
247 for index, enumCase := range newEnumCases {
248 if caseInsensitive {
249 enumCase = strings.ToLower(enumCase)
250 }
251 cf.enumMappings[tableName][columnID][enumCase] = enumIDs[index]
252 }
253 cf.Unlock()
254 return nil
255}
256

Callers 1

prepareEnumCasesMethod · 0.80

Calls 7

RLockMethod · 0.65
RUnlockMethod · 0.65
WarnMethod · 0.65
WithMethod · 0.65
ExtendEnumCasesMethod · 0.65
LockMethod · 0.45
UnlockMethod · 0.45

Tested by

no test coverage detected