Ejemplo n.º 1
0
        public ImportResponse ImportStart(ImportStartRequest request)
        {
            Logger.WriteLine("Import request received");
            MAStatistics.StartOperation(MAOperationType.Import);

            ImportResponse      response      = new ImportResponse();
            CachedImportRequest cachedRequest = new CachedImportRequest();

            cachedRequest.Request = request;

            if (cachedRequest.Request.ImportType == OperationType.Delta)
            {
                this.ProcessOperationEvents(AcmaEventOperationType.DeltaImport);
            }
            else
            {
                this.ProcessOperationEvents(AcmaEventOperationType.FullImport);
            }

            byte[] watermark = ActiveConfig.DB.GetHighWatermarkMAObjectsDelta();
            response.Watermark          = watermark == null ? null : Convert.ToBase64String(watermark);
            cachedRequest.HighWatermark = watermark;
            Logger.WriteLine("Got delta watermark: {0}", response.Watermark);

            ResultEnumerator enumerator;

            if (cachedRequest.Request.ImportType == OperationType.Delta)
            {
                enumerator = ActiveConfig.DB.EnumerateMAObjectsDelta(watermark);
            }
            else
            {
                enumerator = ActiveConfig.DB.EnumerateMAObjects(cachedRequest.Request.Schema.Types.Select(t => t.Name).ToList(), null, null);
            }

            cachedRequest.Queue = new ConcurrentQueue <CSEntryChange>();
            cachedRequest.Count = enumerator.TotalCount;
            this.StartProducerThread(enumerator, request.Schema, cachedRequest);

            response.Context = Guid.NewGuid().ToString();

            this.AddToCache(response.Context, cachedRequest);
            this.GetResultPage(response, request.PageSize);

            return(response);
        }