func()

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
}