Exemplo n.º 1
0
func (ph *Handler) purgeAll(app types.App, pr purgeRequest) (purgeResult, error) {
	var pres = purgeResult(make(map[string]bool))

	for _, uString := range pr {
		pres[uString] = false
		var u, err = url.Parse(uString)
		if err != nil {
			continue
		}
		var location = app.GetLocationFor(u.Host, u.Path)
		if location == nil {
			ph.logger.Logf(
				"[%p] got request to purge an object (%s) that is for a not configured location",
				ph, uString)
			continue
		}

		var oid = location.NewObjectIDForURL(u)

		parts, err := location.Cache.Storage.GetAvailableParts(oid)

		if err != nil {
			if !os.IsNotExist(err) {
				ph.logger.Errorf(
					"[%p] got error while gettings parts of object '%s' - %s",
					ph, oid, err)
				return nil, err
			}
		}

		if len(parts) == 0 {
			continue
		}

		if err = location.Cache.Storage.Discard(oid); err != nil {
			if !os.IsNotExist(err) {
				ph.logger.Errorf(
					"[%p] got error while purging object '%s' - %s",
					ph, oid, err)
				return nil, err
			}
		}

		location.Cache.Algorithm.Remove(parts...)
		pres[uString] = err == nil // err is os.ErrNotExist
	}
	return pres, nil
}