in go/storage/certdatabase.go [488:529]
func (db *CertDatabase) moveOneBinOfAliasedSerials(aTmpDir string, aExpDate types.ExpDate, aPreIssuer types.Issuer, aIssuer types.Issuer) error {
aliasedSerials, err := db.ReadSerialsFromStorage(aExpDate, aPreIssuer)
if err != nil {
return err
}
if len(aliasedSerials) > 0 {
glog.Infof("[%s] Moving %d aliased serials from %s", aIssuer.ID(), len(aliasedSerials), aPreIssuer.ID())
} else {
return nil
}
storedSerials, err := db.ReadSerialsFromStorage(aExpDate, aIssuer)
if err != nil {
return err
}
// Concatenate the serial lists and remove any duplicates
serials := append(storedSerials, aliasedSerials...)
serials = types.SerialList(serials).Dedup()
// Write the merged serial list to a temporary file, and atomically
// overwrite the issuer's file if all goes well.
path := db.serialFile(aExpDate, aIssuer)
t, err := renameio.TempFile(aTmpDir, path)
if err != nil {
return err
}
defer t.Cleanup()
err = WriteSerialList(t, aExpDate, aIssuer, serials)
if err != nil {
return err
}
err = t.CloseAtomicallyReplace()
if err != nil {
return err
}
return nil
}