Uploaded image for project: 'Traffic Server'
  1. Traffic Server
  2. TS-2471

records.config becomes empty when the disk full

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 4.2.0
    • Manager
    • None

    Description

      we change the config parameters in cluster then the config file records.config becomes empty in race case when the system disk is full.

      in lib/records/RecLocal.cc and lib/records/RecProcess.cc:
      records.config maybe empty when the disk is full because we write records.config directly. we should write to a temp file, then rename it to records.config.
      one of the codes as:

              int nbytes;
              RecDebug(DL_Note, "Writing '%s'", g_rec_config_fpath);
              RecHandle h_file = RecFileOpenW(g_rec_config_fpath);
              RecFileWrite(h_file, tb->bufPtr(), tb->spaceUsed(), &nbytes);
              RecFileClose(h_file);
      

      in mgmt/Rollback.cc: we check the result of write, but do NOT check the return code of fsync and close.
      the codes as:

       466   // Write the buffer into the new configuration file
       467   writeBytes = write(diskFD, buf->bufPtr(), buf->spaceUsed());
       468   closeFile(diskFD);
       469   if (writeBytes != buf->spaceUsed()) {
       470     mgmt_log(stderr, "[Rollback::intrernalUpdate] Unable to write new version of %s : %s\n", fileName, strerror(errno));
       471     returnCode = SYS_CALL_ERROR_ROLLBACK;
       472     goto UPDATE_CLEANUP;
       473   }
      

      we should check the result of closeFile(diskFD)

      Attachments

        Activity

          People

            jamespeach James Peach
            happy_fish100 Yu Qing
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: