Exemplo n.º 1
0
        private void PurgeObjects(IModelPurgingRule purgingRule, CancellationToken token)
        {
            try{
                Tracing.Tracer.LogVerboseText($"Purging {purgingRule}");
                var objectsCount = 0;
                if (Application != null)
                {
                    using (var objectSpace = Application.CreateObjectSpace()){
                        StoreExecutionTime(purgingRule, objectSpace);
                        var criteriaOperator = objectSpace.ParseCriteria(purgingRule.Criteria);
                        var objects          = objectSpace.GetObjects(purgingRule.TypeInfo.Type, criteriaOperator);
                        objectSpace.SetTopReturnedObjectsCount(objects, purgingRule.ChunkSize);
                        while (objects.Count > 0)
                        {
                            token.ThrowIfCancellationRequested();
                            objectsCount += objects.Count;
                            objectSpace.Delete(objects);
                            objectSpace.CommitChanges();
                            objectSpace.ReloadCollection(objects);
                        }
                    }
                }

                Tracing.Tracer.LogVerboseText($"Purged {purgingRule}-{objectsCount}");
            }
            catch (TaskCanceledException) {
            }
            catch (Exception e) {
                Tracing.Tracer.LogError(e);
            }
        }
Exemplo n.º 2
0
        private static void StoreExecutionTime(IModelPurgingRule purgingRule, IObjectSpace objectSpace)
        {
            var ruleId = purgingRule.GetParent <IModelClass>().Id() + ((ModelNode)purgingRule).Id;
            var ruleScheduleStorage = objectSpace.GetObjectsQuery <RuleInfoObject>().FirstOrDefault(storage =>
                                                                                                    storage.RuleScheduleType == RuleScheduleType.Purging && storage.RuleId == ruleId) ?? objectSpace.CreateObject <RuleInfoObject>();

            ruleScheduleStorage.RuleScheduleType = RuleScheduleType.Purging;
            ruleScheduleStorage.RuleId           = ((ModelNode)purgingRule).Id;
            ruleScheduleStorage.Executed         = DateTime.Now;
            objectSpace.CommitChanges();
        }