in AdlsDotNetSDK/FileTransfer/FileUploader.cs [143:212]
protected override void FirstPassProducerRun()
{
do
{
if (CancelToken.IsCancellationRequested)
{
return;
}
var dir = UploaderProducerQueue.Poll();
if (dir == null) //Means end of Producer
{
UploaderProducerQueue.Add(null); //Notify if any other threads are waiting
return;
}
try
{
long numSubDirs = 0, isEmpty=0;
IEnumerable<DirectoryInfo> enumDir = dir.EnumerateDirectories();
foreach (var subDir in enumDir)
{
isEmpty = 1;
if (NotRecurse) //Directly add the directories to be created since we won't go in recursively
{
if (!AddDirectoryToConsumerQueue(subDir.FullName, true))
{
continue;
}
}
else
{
UploaderProducerQueue.Add(subDir);
}
numSubDirs++;
}
IEnumerable<FileInfo> enumFiles = dir.EnumerateFiles();
long numFiles = 0, totChunks = 0, unchunkedFiles = 0, totSize = 0;
foreach (var file in enumFiles)
{
isEmpty = 1;
if (RecordedMetadata.EntryTransferredSuccessfulLastTime(file.FullName))
{
continue;
}
long fileSizeToTransfer;
long chunks = AddFileToConsumerQueue(file.FullName, file.Length, file.Length > ChunkSize, out fileSizeToTransfer);
totChunks += chunks;
if (file.Length <= ChunkSize)
{
unchunkedFiles++;
}
numFiles++;
totSize += fileSizeToTransfer;
}
bool isDirectoryEmptyAndNotUploadedYet = false;
if (isEmpty == 0)
{
isDirectoryEmptyAndNotUploadedYet = AddDirectoryToConsumerQueue(dir.FullName, true);
}
// If there are any directories and it is not recurse update the number of directories
StatusUpdate(numFiles, unchunkedFiles, totChunks, totSize, NotRecurse ? numSubDirs : (isDirectoryEmptyAndNotUploadedYet ? 1 : 0));
}
catch (Exception ex)
{
Status.EntriesFailed.Add(new SingleEntryTransferStatus(dir.FullName, null, ex.StackTrace,
EntryType.Directory, SingleChunkStatus.Failed));
}
} while (!NotRecurse);
}