Github user parthchandra commented on a diff in the pull request: https://github.com/apache/drill/pull/1214#discussion_r184199682 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/ops/BaseOperatorContext.java --- @@ -158,25 +159,26 @@ public void close() { } catch (RuntimeException e) { ex = ex == null ? e : ex; } - try { - if (fs != null) { + + for (DrillFileSystem fs : fileSystems) { + try { fs.close(); - fs = null; - } - } catch (IOException e) { + } catch (IOException e) { throw UserException.resourceError(e) - .addContext("Failed to close the Drill file system for " + getName()) - .build(logger); + .addContext("Failed to close the Drill file system for " + getName()) + .build(logger); + } } + if (ex != null) { throw ex; } } @Override public DrillFileSystem newFileSystem(Configuration conf) throws IOException { - Preconditions.checkState(fs == null, "Tried to create a second FileSystem. Can only be called once per OperatorContext"); - fs = new DrillFileSystem(conf, getStats()); + DrillFileSystem fs = new DrillFileSystem(conf, getStats()); --- End diff -- I'm not suggesting we use the same fs for each split, but the opposite. The fs obect used per split/rowgroup should be different so that we get the right fs wait time for every minor fragment. But this change allows more than one fs object per operator context; which we were explicitly preventing earlier. I'm not sure I understand why you needed to change that.
---