{"record":{"id":"1798d645d81eddbb","repo":"apache/hadoop","slug":"not-yet-implemented","errorCode":null,"errorMessage":"Not yet implemented.","messagePattern":"Not yet implemented\\.","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapred/TaskAttemptListenerImpl.java","lineNumber":512,"sourceCode":"    coalesceStatusUpdate(yarnAttemptID, taskAttemptStatus, lastStatusRef);\n\n    return feedback;\n  }\n\n  @Override\n  public long getProtocolVersion(String arg0, long arg1) throws IOException {\n    return TaskUmbilicalProtocol.versionID;\n  }\n\n  @Override\n  public void reportNextRecordRange(TaskAttemptID taskAttemptID, Range range)\n      throws IOException {\n    // This is used when the feature of skipping records is enabled.\n\n    // This call exists as a hadoop mapreduce legacy wherein all changes in\n    // counters/progress/phase/output-size are reported through statusUpdate()\n    // call but not the next record range information.\n    throw new IOException(\"Not yet implemented.\");\n  }\n\n  @Override\n  public JvmTask getTask(JvmContext context) throws IOException {\n\n    // A rough imitation of code from TaskTracker.\n\n    JVMId jvmId = context.jvmId;\n    LOG.info(\"JVM with ID : {} asked for a task\", jvmId);\n\n    JvmTask jvmTask = null;\n    // TODO: Is it an authorized container to get a task? Otherwise return null.\n\n    // TODO: Child.java's firstTaskID isn't really firstTaskID. Ask for update\n    // to jobId and task-type.\n\n    WrappedJvmID wJvmID = new WrappedJvmID(jvmId.getJobId(), jvmId.isMap,\n        jvmId.getId());","sourceCodeStart":494,"sourceCodeEnd":530,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapred/TaskAttemptListenerImpl.java#L494-L530","documentation":"TaskAttemptListenerImpl is the MR ApplicationMaster's implementation of the TaskUmbilicalProtocol that child task JVMs call. reportNextRecordRange is intentionally unimplemented: in MRv2 the next-record-range information travels inside statusUpdate, so a well-matched child never invokes this method. If something does call it -- an old or version-mismatched task runtime using the legacy skip-records flow, or custom code talking to the umbilical directly -- it receives IOException('Not yet implemented.') and the task attempt fails.","triggerScenarios":"Submitting a job with old Hadoop-1-era mapreduce client jars on the classpath while the AM runs Hadoop 2/3; custom Task implementations or test harnesses invoking umbilical.reportNextRecordRange directly; enabling legacy record-skip settings with mismatched runtimes.","commonSituations":"Mixed-version clusters after an upgrade (old task jars in the user's lib directory); third-party frameworks that reuse TaskUmbilicalProtocol; unit tests stubbing the protocol calling this method.","solutions":["Align the Hadoop mapreduce-client version used by the job's jars with the cluster (drop old hadoop-* jars from the job's lib; use provided scope)","Do not call umbilical.reportNextRecordRange; report the range via statusUpdate / TaskReport as MRv2 tasks do","Remove legacy skip-mode settings from the job config if they come from Hadoop-1-era templates (mapreduce.task.skip.*)"],"exampleFix":"// before: legacy/direct call\numbilical.reportNextRecordRange(attemptId, range);\n// after: let the standard task reporter convey range via statusUpdate\numbilical.statusUpdate(taskAttemptId, taskStatus);","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"Catch IOException from umbilical calls in custom task runtimes and fall back to statusUpdate-based reporting; treat 'Not yet implemented.' as a protocol-contract violation to fix in code, not a transient error to retry.","preventionTips":["Never call TaskUmbilicalProtocol.reportNextRecordRange on MRv2; ranges travel in statusUpdate","Pin the job's Hadoop mapreduce-client version to the cluster's version","Audit custom Task subclasses copied from Hadoop-1 for legacy umbilical usage"],"tags":["mapreduce","yarn","application-master","umbilical-protocol","not-implemented","version-mismatch"],"backgroundTag":"not-implemented-exception","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}