Uploaded image for project: 'Hadoop HDFS'
  1. Hadoop HDFS
  2. HDFS-14701

Change Log Level to warn in SlotReleaser

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • None
    • 3.3.0
    • None
    • None

    Description

       if the corresponding DataNode has been stopped or restarted and DFSClient close shared memory segment,releaseShortCircuitFds API throw expection and log a ERROR Message. I think it should not be a ERROR log,and that log a warn log is more reasonable.

      // @Override
      public void run() {
        LOG.trace("{}: about to release {}", ShortCircuitCache.this, slot);
        final DfsClientShm shm = (DfsClientShm)slot.getShm();
        final DomainSocket shmSock = shm.getPeer().getDomainSocket();
        final String path = shmSock.getPath();
        boolean success = false;
        try (DomainSocket sock = DomainSocket.connect(path);
             DataOutputStream out = new DataOutputStream(
                 new BufferedOutputStream(sock.getOutputStream()))) {
          new Sender(out).releaseShortCircuitFds(slot.getSlotId());
          DataInputStream in = new DataInputStream(sock.getInputStream());
          ReleaseShortCircuitAccessResponseProto resp =
              ReleaseShortCircuitAccessResponseProto.parseFrom(
                  PBHelperClient.vintPrefixed(in));
          if (resp.getStatus() != Status.SUCCESS) {
            String error = resp.hasError() ? resp.getError() : "(unknown)";
            throw new IOException(resp.getStatus().toString() + ": " + error);
          }
          LOG.trace("{}: released {}", this, slot);
          success = true;
        } catch (IOException e) {
          LOG.error(ShortCircuitCache.this + ": failed to release " +
              "short-circuit shared memory slot " + slot + " by sending " +
              "ReleaseShortCircuitAccessRequestProto to " + path +
              ".  Closing shared memory segment.", e);
        } finally {
          if (success) {
            shmManager.freeSlot(slot);
          } else {
            shm.getEndpointShmManager().shutdown(shm);
          }
        }
      }
      

       exception stack:

      2019-08-05,15:28:03,838 ERROR [ShortCircuitCache_SlotReleaser] org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache: ShortCircuitCache(0x65849546): failed to release short-circuit shared memory slot Slot(slotIdx=62, shm=DfsClientShm(70593ef8b3d84cba3c2f0a1e81377eb1)) by sending ReleaseShortCircuitAccessRequestProto to /home/work/app/hdfs/c3micloudsrv-hdd/datanode/dn_socket.  Closing shared memory segment.
      
      java.io.IOException: ERROR_INVALID: there is no shared memory segment registered with shmId 70593ef8b3d84cba3c2f0a1e81377eb1
      

       

      Attachments

        1. HDFS-14701.001.patch
          1 kB
          Lisheng Sun
        2. HDFS-14701.002.patch
          2 kB
          Lisheng Sun

        Activity

          People

            leosun08 Lisheng Sun
            leosun08 Lisheng Sun
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: