{"record":{"id":"7b1a895cb4c9def8","repo":"risingwavelabs/risingwave","slug":"invalid-time-value-encoding-secs-0-nano-1","errorCode":null,"errorMessage":"invalid Time value encoding: secs: {0} nano: {1}","messagePattern":"invalid Time value encoding: secs: (.+?) nano: (.+?)","errorType":"error_code","errorClass":"ValueEncodingError","httpStatus":null,"severity":"error","filePath":"src/common/src/util/value_encoding/error.rs","lineNumber":27,"sourceCode":"// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nuse thiserror::Error;\n\n#[derive(Error, Debug)]\npub enum ValueEncodingError {\n    #[error(\"Invalid bool value encoding: {0}\")]\n    InvalidBoolEncoding(u8),\n    #[error(\"Invalid UTF8 value encoding: {0}\")]\n    InvalidUtf8(#[from] std::string::FromUtf8Error),\n    #[error(\"Invalid Date value encoding: days: {0}\")]\n    InvalidDateEncoding(i32),\n    #[error(\"invalid Timestamp value encoding: secs: {0} nsecs: {1}\")]\n    InvalidTimestampEncoding(i64, u32),\n    #[error(\"invalid Time value encoding: secs: {0} nano: {1}\")]\n    InvalidTimeEncoding(u32, u32),\n    #[error(\"Invalid null tag value encoding: {0}\")]\n    InvalidTagEncoding(u8),\n    #[error(\"Invalid jsonb encoding\")]\n    InvalidJsonbEncoding,\n    #[error(\"Invalid variant encoding\")]\n    InvalidVariantEncoding,\n    #[error(\"Invalid struct encoding: {0}\")]\n    InvalidStructEncoding(\n        #[source]\n        #[backtrace]\n        crate::array::ArrayError,\n    ),\n    #[error(\"Invalid list encoding: {0}\")]\n    InvalidListEncoding(\n        #[source]\n        #[backtrace]\n        crate::array::ArrayError,","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/common/src/util/value_encoding/error.rs#L9-L45","documentation":"`ValueEncodingError::InvalidTimeEncoding` is raised when decoding a value-encoded TIME: time is stored as a (secs, nanos) pair where secs is seconds since midnight (must be < 86400) and nanos < 1_000_000_000; values outside these constraints cannot form a valid `NaiveTime`. The message reports both stored values.","triggerScenarios":"Decoding a TIME whose secs >= 86400 or whose nanos exceed 999_999_999, wrong-offset reads that read the wrong bytes as the pair, or external writers encoding total-millis/secs-of-day in the wrong field.","commonSituations":"Hand-rolled encoders writing 24h+ values or epoch-style numbers into TIME fields, corrupted/truncated payloads, unit confusion (micros vs nanos) between writer and reader.","solutions":["Ensure secs < 86400 and nanos < 1_000_000_000 before encoding/decoding a TIME","If your writer stores micros/millis-of-day, convert to (secs, nanos) first","Validate offsets/endianness when slicing value-encoded buffers manually","Regenerate data using RisingWave's value-encoding APIs"],"exampleFix":"// before\nlet (secs, nano) = (86_400u32, 0u32); // equals midnight next day — invalid\n// after\nlet (secs, nano) = (86_399u32, 999_999_999u32); // max valid time-of-day","handlingStrategy":"validation","validationCode":"// validate time-of-day pair before encoding a TIME\nfn is_valid_time(secs: u32, nano: u32) -> bool {\n    secs < 86_400 && nano < 1_000_000_000\n        && chrono::NaiveTime::from_num_seconds_from_midnight_opt(secs, nano).is_some()\n}\n","typeGuard":null,"tryCatchPattern":"match NaiveTime::try_from_value_encoding(bytes) {\n    Ok(t) => t,\n    Err(ValueEncodingError::InvalidTimeEncoding(secs, nano)) => {\n        return Err(anyhow!(\"bad time secs={secs} nano={nano}\"));\n    }\n    Err(e) => return Err(e.into()),\n}","preventionTips":["Ensure secs-of-day < 86400 and nanos < 1e9 before encoding","Convert millis/micros-of-day into (secs, nanos) at the producer","Avoid hand-rolled TIME serialization; use value-encoding APIs"],"tags":["value-encoding","time","deserialization","risingwave"],"backgroundTag":"value-out-of-range","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}