[ https://issues.apache.org/jira/browse/TS-2471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13864867#comment-13864867 ]
Leif Hedstrom commented on TS-2471: ----------------------------------- Assigning to James for review / commit. Thanks! > records.config becomes empty when the disk full > ----------------------------------------------- > > Key: TS-2471 > URL: https://issues.apache.org/jira/browse/TS-2471 > Project: Traffic Server > Issue Type: Bug > Components: Management > Reporter: Yu Qing > Assignee: James Peach > Fix For: 4.2.0 > > Attachments: 0001-TS-2471-records.config-becomes-empty-V2.patch, > 0001-TS-2471-records.config-becomes-empty-when-the-disk-f.patch > > > 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: > {code} > 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); > {code} > in {{mgmt/Rollback.cc}}: we check the result of write, but do NOT check the > return code of fsync and close. > the codes as: > {code} > 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 } > {code} > we should check the result of {{closeFile(diskFD)}} -- This message was sent by Atlassian JIRA (v6.1.5#6160)