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);
        }
Exemplo n.º 2
0
 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();
     }
 }