{"record":{"id":"acfb60d86572c891","repo":"pinpoint-apm/pinpoint","slug":"timewindow-is-required-acfb60","errorCode":null,"errorMessage":"TimeWindow is required.","messagePattern":"TimeWindow is required\\.","errorType":"validation","errorClass":"InvalidParameterException","httpStatus":null,"severity":"error","filePath":"otlpmetric/otlpmetric-web/src/main/java/com/navercorp/pinpoint/otlp/web/vo/OtlpMetricDataQueryParameter.java","lineNumber":186,"sourceCode":"            } else {\n                return doubleTableNameManager.getTableName(this.applicationName);\n            }\n        }\n\n        public Builder setDoubleTableNameManager(TableNameManager doubleTableNameManager) {\n            this.doubleTableNameManager = doubleTableNameManager;\n            return self();\n        }\n\n        public Builder setLongTableNameManager(TableNameManager longTableNameManager) {\n            this.longTableNameManager = longTableNameManager;\n            return self();\n        }\n\n        @Override\n        public OtlpMetricDataQueryParameter build() {\n            if (timeWindow == null) {\n                throw new InvalidParameterException(\"TimeWindow is required.\");\n            }\n\n            return new OtlpMetricDataQueryParameter(this);\n        }\n    }\n\n    @Override\n    public String toString() {\n        return \"OtlpMetricDataQueryParameter{\" +\n                \"tableName='\" + tableName + '\\'' +\n                \", serviceName='\" + serviceName + '\\'' +\n                \", applicationName='\" + applicationName + '\\'' +\n                \", agentId='\" + agentId + '\\'' +\n                \", metricGroupName='\" + metricGroupName + '\\'' +\n                \", metricName='\" + metricName + '\\'' +\n                \", fieldName='\" + fieldName + '\\'' +\n                \", tags=\" + tags +\n                \", rawTags='\" + rawTags + '\\'' +","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/otlpmetric/otlpmetric-web/src/main/java/com/navercorp/pinpoint/otlp/web/vo/OtlpMetricDataQueryParameter.java#L168-L204","documentation":"OtlpMetricDataQueryParameter's builder enforces in build() that a TimeWindow was supplied before constructing the object; otherwise it throws InvalidParameterException. The data query parameter needs the time window to compute the query range and aggregation interval against the pinot/metric storage.","triggerScenarios":"Calling OtlpMetricDataQueryParameter.DataQueryBuilder.build() without a prior timeWindow(...) call, e.g. when setupQueryParameter constructs per-field/per-tag query parameters from a chart parameter that itself lacked a TimeWindow.","commonSituations":"Downstream of error 461: a chart parameter built without TimeWindow propagates a null window into data query parameters; code that clones or copies query parameters and drops the window field; tests building minimal parameters.","solutions":["Ensure the parent OtlpMetricChartQueryParameter is built with a TimeWindow before data query parameters are derived from it.","Call .timeWindow(...) on the data query builder explicitly in every construction path.","Validate request time range (from/to/interval) at the API boundary so a missing window never reaches the builder.","Check the fix for error 461 first — this error is usually a symptom of it."],"exampleFix":"// before\nbuilder.setMetricGroupName(group).setMetricName(name).build(); // timeWindow missing\n// after\nbuilder.setMetricGroupName(group).setMetricName(name)\n       .setTimeWindow(chartParameter.getTimeWindow())\n       .build();","handlingStrategy":"validation","validationCode":"Objects.requireNonNull(chartParam.getTimeWindow(), \"parent chart parameter must carry a TimeWindow before deriving data query parameters\");","typeGuard":"boolean canBuildDataQuery(OtlpMetricDataQueryParameter.DataQueryBuilder b) {\n    return b.getTimeWindow() != null;\n}","tryCatchPattern":"try {\n    List<OtlpMetricDataQueryParameter> list = setupQueryParameter(builder, fields, tagGroup);\n} catch (InvalidParameterException e) {\n    log.error(\"data query parameter missing TimeWindow\", e);\n    throw new InvalidRequestException(\"time range required\", e);\n}","preventionTips":["Propagate TimeWindow from the chart parameter into every derived data query parameter","Reject requests lacking from/to/interval at the API boundary","Write a regression test that builds parameters end-to-end from an HTTP request"],"tags":["java","builder","validation","otlp-metrics"],"backgroundTag":"missing-required-argument","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-17T20:17:13.540Z"}