func()

in go/storage/certdatabase.go [403:445]


func (db *CertDatabase) moveOneBinOfCachedSerialsToStorage(aTmpDir string, aExpDate types.ExpDate, aIssuer types.Issuer) error {
	cachedSerials := db.ReadSerialsFromCache(aExpDate, aIssuer)
	if len(cachedSerials) == 0 {
		return nil
	}

	storedSerials, err := db.ReadSerialsFromStorage(aExpDate, aIssuer)
	if err != nil {
		return err
	}

	// Concatenate the serial lists and remove any duplicates
	serials := append(storedSerials, cachedSerials...)
	serials = types.SerialList(serials).Dedup()

	// Write the merged serial list to a temporary file, and atomically
	// overwrite the storage 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
	}

	// It's now safe to remove cachedSerials from the cache.
	cacheWriter := db.GetSerialCacheAccessor(aExpDate, aIssuer)
	err = cacheWriter.RemoveMany(cachedSerials)
	if err != nil {
		glog.Warningf("Failed to remove serial from cache: %s", err)
	}

	return nil
}