You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@accumulo.apache.org by "teamconfx (via GitHub)" <gi...@apache.org> on 2026/01/22 02:12:17 UTC

[I] NullPointerException in MiniAccumuloClusterImpl.getProcesses() [accumulo]

teamconfx opened a new issue, #6070:
URL: https://github.com/apache/accumulo/issues/6070

   **Describe the bug**
   `MiniAccumuloClusterImpl.getProcesses()` throws `NullPointerException` when `managerProcess` is null due to missing null check, while other similar fields (`zooKeeperProcess`, `gcProcess`) have proper null checks.
   
   **Root Cause Analysis**
   
   The `getProcesses()` method has inconsistent null handling for process references:
   
   ```java
   public Map<ServerType,Collection<ProcessReference>> getProcesses() {
       Map<ServerType,Collection<ProcessReference>> result = new HashMap<>();
       MiniAccumuloClusterControl control = getClusterControl();
       result.put(ServerType.MANAGER, references(control.managerProcess));  // BUG: No null check!
       result.put(ServerType.TABLET_SERVER,
           references(control.tabletServerProcesses.toArray(new Process[0])));
       if (control.zooKeeperProcess != null) {  // Has null check
         result.put(ServerType.ZOOKEEPER, references(control.zooKeeperProcess));
       }
       if (control.gcProcess != null) {  // Has null check
         result.put(ServerType.GARBAGE_COLLECTOR, references(control.gcProcess));
       }
       return result;
   }
   ```
   
   When `managerProcess` is null (e.g., before cluster starts or after manager is stopped), it gets passed to `references()` which creates a `ProcessReference`:
   
   ```java
   List<ProcessReference> references(Process... procs) {
       return Stream.of(procs).map(ProcessReference::new).collect(toList());
   }
   ```
   
   The `ProcessReference` constructor enforces non-null:
   
   ```java
   ProcessReference(Process process) {
       this.process = Objects.requireNonNull(process);  // Throws NPE if null
   }
   ```
   
   **Stack Trace**
   
   ```
   Caused by: java.lang.NullPointerException
       at java.base/java.util.Objects.requireNonNull(Objects.java:209)
       at org.apache.accumulo.miniclusterImpl.ProcessReference.<init>(ProcessReference.java:30)
       at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
       at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
       at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
       at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
       at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
       at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
       at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
       at org.apache.accumulo.miniclusterImpl.MiniAccumuloClusterImpl.references(MiniAccumuloClusterImpl.java:776)
       at org.apache.accumulo.miniclusterImpl.MiniAccumuloClusterImpl.getProcesses(MiniAccumuloClusterImpl.java:782)
   ```
   
   **Proposed Fix**
   
   Add null check for `managerProcess` consistent with handling of `zooKeeperProcess` and `gcProcess`:
   
   ```java
   public Map<ServerType,Collection<ProcessReference>> getProcesses() {
       Map<ServerType,Collection<ProcessReference>> result = new HashMap<>();
       MiniAccumuloClusterControl control = getClusterControl();
       if (control.managerProcess != null) {  // ADD NULL CHECK
         result.put(ServerType.MANAGER, references(control.managerProcess));
       }
       result.put(ServerType.TABLET_SERVER,
           references(control.tabletServerProcesses.toArray(new Process[0])));
       if (control.zooKeeperProcess != null) {
         result.put(ServerType.ZOOKEEPER, references(control.zooKeeperProcess));
       }
       if (control.gcProcess != null) {
         result.put(ServerType.GARBAGE_COLLECTOR, references(control.gcProcess));
       }
       return result;
   }
   ```
   **Additional context**
   Happy to send a PR for this
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@accumulo.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [I] NullPointerException in MiniAccumuloClusterImpl.getProcesses() [accumulo]

Posted by "dlmarion (via GitHub)" <gi...@apache.org>.
dlmarion closed issue #6070: NullPointerException in MiniAccumuloClusterImpl.getProcesses()
URL: https://github.com/apache/accumulo/issues/6070


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@accumulo.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org