drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From paul-rogers <...@git.apache.org>
Subject [GitHub] drill pull request #938: DRILL-5694: Handle HashAgg OOM by spill and retry, ...
Date Wed, 20 Sep 2017 05:29:48 GMT
Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/938#discussion_r139877947
  
    --- Diff: common/src/main/java/org/apache/drill/common/exceptions/UserException.java ---
    @@ -536,6 +542,33 @@ public Builder pushContext(final String name, final double value)
{
          * @return user exception
          */
         public UserException build(final Logger logger) {
    +
    +      // To allow for debugging:
    +      //     A spinner code to make the execution stop here while the file '/tmp/drillspin'
exists
    +      // Can be used to attach a debugger, use jstack, etc
    +      // The processID of the spinning thread should be in a file like /tmp/spin4148663301172491613.tmp
    +      // along with the error message.
    +      File spinFile = new File("/tmp/drillspin");
    +      if ( spinFile.exists() ) {
    +        File tmpDir = new File("/tmp");
    +        File outErr = null;
    +        try {
    +          outErr = File.createTempFile("spin", ".tmp", tmpDir);
    +          BufferedWriter bw = new BufferedWriter(new FileWriter(outErr));
    +          bw.write("Spinning process: " + ManagementFactory.getRuntimeMXBean().getName()
    +          /* After upgrading to JDK 9 - replace with: ProcessHandle.current().getPid()
*/);
    +          bw.write("\nError cause: " +
    +            (errorType == DrillPBError.ErrorType.SYSTEM ? ("SYSTEM ERROR: " + ErrorHelper.getRootMessage(cause))
: message));
    +          bw.close();
    +        } catch (Exception ex) {
    +          logger.warn("Failed creating a spinner tmp message file: {}", ex);
    +        }
    +        while (spinFile.exists()) {
    +          try { sleep(1_000); } catch (Exception ex) { /* ignore interruptions */ }
    --- End diff --
    
    What happens it the fragment executor tries to kill the query? Do we want the spinner
to ignore that request here?


---

Mime
View raw message