func historyRotate()

in server/datasource/mongo/history/history_dao.go [136:181]


func historyRotate(ctx context.Context, kvID, project, domain string) error {
	filter := bson.M{"id": kvID, "domain": domain, "project": project}
	collection := mongo.GetClient().GetDB().Collection(mmodel.CollectionKVRevision)
	curTotal, err := collection.CountDocuments(ctx, filter)
	if err != nil {
		return err
	}
	if curTotal <= datasource.MaxHistoryNum {
		return nil
	}
	opt := options.Find().SetSort(map[string]interface{}{
		"update_revision": 1,
	})
	opt = opt.SetLimit(curTotal - datasource.MaxHistoryNum)
	cur, err := collection.Find(ctx, filter, opt)
	if err != nil {
		return err
	}
	defer cur.Close(ctx)
	if cur.Err() != nil {
		return err
	}
	for cur.Next(ctx) {
		curKV := &model.KVDoc{}
		if err := cur.Decode(curKV); err != nil {
			openlog.Error("decode to KVs error: " + err.Error())
			return err
		}
		_, err := collection.DeleteOne(ctx, bson.M{
			"id":              kvID,
			"domain":          domain,
			"project":         project,
			"update_revision": curKV.UpdateRevision,
		})
		if err != nil {
			return err
		}
		openlog.Debug("delete overflowed revision", openlog.WithTags(openlog.Tags{
			"id":       curKV.ID,
			"key":      curKV.Key,
			"revision": curKV.UpdateRevision,
		}))
	}

	return nil
}