public override Task Init(IWorkerGrain self, PredicateBase predicate, IPrincipalGrain principalGrain) { base.Init(self, predicate, principalGrain); ulong filesize = ((ScanPredicate)predicate).FileSize; tableId = ((ScanPredicate)predicate).TableID; separator = ((ScanPredicate)predicate).Separator; string extensionKey = ""; Guid key = this.GetPrimaryKey(out extensionKey); ulong i = UInt64.Parse(extensionKey); ulong num_grains = (ulong)((ScanPredicate)predicate).NumberOfGrains; ulong partition = filesize / num_grains; ulong start_byte = i * partition; ulong end_byte = num_grains - 1 == i?filesize:(i + 1) * partition; reader = new ScanStreamReader(((ScanPredicate)predicate).File); if (!reader.GetFile(start_byte)) { return(Task.FromException(new Exception("unable to get file"))); } start = start_byte; end = end_byte; if (start != 0) { start += reader.TrySkipFirst(); } Console.WriteLine("Init: start byte: " + start.ToString() + " end byte: " + end.ToString()); return(Task.CompletedTask); }
public async Task Initialize() { reader = new ScanStreamReader(file, separator, idxes); if (!reader.GetFile(start)) { throw new Exception("unable to get file"); } if (start != 0) { start += await reader.TrySkipFirst(); } else { await reader.FillBuffer(); } }