cnvrg 1.11.23 → 1.11.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b8064702c190a7af0e1541f7a523e950e771439caa1f68d98177c094551dbb5
4
- data.tar.gz: 982aa81d2da514f30b45ad45e4ec4b9a12a648e22c9b60d98afe318eba30e753
3
+ metadata.gz: e8a5d09f38ee4ce25caecdaf73b77e37fadff3b745454030cb15863210c1b319
4
+ data.tar.gz: 1f3e27bc4fa778ff048e7257f2ce753009ceaf0801c4ca3f4facfdc3011ad940
5
5
  SHA512:
6
- metadata.gz: 9f3dcc03516cbe0a3ffd8bd5fa57f976b09028568e8014f161d43581fbc4b8c4def858297b55ef1d750efcd0af276905c006e5ebe7f3e17dd1268e81ad34f084
7
- data.tar.gz: de7a4ea731e3230c225149d345e0ab2dde8466b2dd66008aba09d90a0bc287a9d61a8fb266f755a4665ce57c27e7c97c198b7435ab15c0d1fb63977552677150
6
+ metadata.gz: 14d79f14723eff1d8df81907183fabbe97270fd49610d4aa456fa820e4c19994c3d2bd1b7c64160f4d66a0636ff385a32b86f6fed2bedf9c0ed98c7968267c23
7
+ data.tar.gz: 80b4644fc6f560e54280ab726983f4e5d89978255991b29c510452b5514019025a3dcae45e4ad5f9a36e97823909eb6d1f2ee892cc63ef5090fa78ecacf595fe
data/lib/cnvrg/api.rb CHANGED
@@ -31,6 +31,10 @@ module Cnvrg
31
31
  end
32
32
  def self.request(resource, method = 'GET', data = {}, parse_request = true)
33
33
  resource = URI::encode resource
34
+
35
+ # We need to remoe all double slashes from the url to work with the proxy
36
+ resource = resource.gsub(/[\/]{2,}/, "/").gsub("https:/", "https://").gsub("http:/", "http://")
37
+
34
38
  begin
35
39
  n = Netrc.read
36
40
  rescue => e
data/lib/cnvrg/cli.rb CHANGED
@@ -1210,6 +1210,7 @@ module Cnvrg
1210
1210
  @dataset = Dataset.new(dataset_info: {:owner => owner, :slug => slug})
1211
1211
  @datafiles = Cnvrg::Datafiles.new(owner, slug, dataset: @dataset)
1212
1212
  @files = @datafiles.verify_files_exists(files)
1213
+ @files = @files.uniq { |t| t.gsub('./', '')}
1213
1214
 
1214
1215
  if @files.blank?
1215
1216
  raise SignalException.new(1, "Cant find files to upload, exiting.")
@@ -47,6 +47,7 @@ module Cnvrg
47
47
  file = file[0..-2] if file.end_with? '/'
48
48
  if File.exists? file
49
49
  if File.directory? file
50
+ paths << file unless file == '.'
50
51
  paths += Dir.glob("#{file}/**/*")
51
52
  else
52
53
  paths << file
@@ -351,11 +352,11 @@ module Cnvrg
351
352
  progress_mutex = Mutex.new
352
353
  file_queue = Queue.new
353
354
  progress_queue = Queue.new
355
+ dirs_queue = Queue.new
354
356
  worker_threads = []
355
357
  progress_threads = []
356
358
 
357
359
  # Vars to keep track of uploaded files and directories
358
- dirs = []
359
360
  uploaded_files = []
360
361
 
361
362
  begin
@@ -378,6 +379,29 @@ module Cnvrg
378
379
  end
379
380
  end
380
381
 
382
+ dir_thread = Thread.new do
383
+ dirs_to_create = []
384
+ loop do
385
+ progress_mutex.synchronize {
386
+ dir = dirs_queue.deq(non_block: true) rescue nil
387
+ dirs_to_create << dir unless dir.nil?
388
+ }
389
+ if dirs_to_create.size >= 1000 || progressbar.finished?
390
+ resp = Cnvrg::API.request(@base_resource + "create_dirs", "POST", {dirs: dirs_to_create, commit_sha1: commit_sha1})
391
+
392
+ break if resp == false # if resp is false it means 404 which is old server
393
+ unless Cnvrg::CLI.is_response_success(resp, false)
394
+ time = Time.current
395
+ Cnvrg::Logger.log_error_message("Failed to create dirs: #{time}, #{resp.try(:fetch, "message")}")
396
+ dirs_to_create = []
397
+ next
398
+ end
399
+ dirs_to_create = []
400
+ end
401
+ break if progressbar.finished? && dirs_queue.empty? && dirs_to_create.empty?
402
+ end
403
+ end
404
+
381
405
  # init the thread that handles the file upload progress and saving them in the server
382
406
  threads.times do |i|
383
407
  progress_threads[i] = Thread.new do
@@ -385,7 +409,6 @@ module Cnvrg
385
409
  file = progress_queue.deq(non_block: true) rescue nil # to prevent deadlocks
386
410
  unless file.nil?
387
411
  blob_ids = []
388
- dirs_to_upload = []
389
412
 
390
413
  progress_mutex.synchronize {
391
414
  progressbar.progress += 1
@@ -393,9 +416,7 @@ module Cnvrg
393
416
 
394
417
  if uploaded_files.size >= chunk_size or progressbar.finished?
395
418
  blob_ids = uploaded_files.map {|f| f['bv_id']}
396
- dirs_to_upload = dirs.clone
397
419
  uploaded_files = []
398
- dirs = []
399
420
  end
400
421
  }
401
422
 
@@ -403,10 +424,9 @@ module Cnvrg
403
424
  refresh_storage_token
404
425
  Cnvrg::Logger.info("Finished upload chunk of #{chunk_size} files, Sending Upload files save")
405
426
 
406
-
407
427
  retry_count = 0
408
428
  loop do
409
- upload_resp = Cnvrg::API.request(@base_resource + "upload_files_save", "POST", {commit: commit_sha1, blob_ids: blob_ids, dirs: dirs_to_upload})
429
+ upload_resp = Cnvrg::API.request(@base_resource + "upload_files_save", "POST", {commit: commit_sha1, blob_ids: blob_ids})
410
430
 
411
431
  if not (Cnvrg::CLI.is_response_success(upload_resp, false))
412
432
  retry_count += 1
@@ -429,8 +449,8 @@ module Cnvrg
429
449
 
430
450
  if progressbar.finished?
431
451
  Cnvrg::Logger.info("Progress bar finished closing queues")
432
- file_queue.close()
433
- progress_queue.close()
452
+ file_queue.close
453
+ progress_queue.close
434
454
  Thread.exit
435
455
  end
436
456
  end
@@ -443,7 +463,21 @@ module Cnvrg
443
463
  files_chunk = chunk.map{|p| p.gsub(/^\.\//, '')}
444
464
  Cnvrg::Logger.info("Generating chunk idx")
445
465
  tree = @dataset.generate_chunked_idx(files_chunk, prefix: prefix, threads: threads, cli: cli)
466
+
467
+ progress_mutex.synchronize {
468
+ # Handle directories:
469
+ new_dirs = tree.keys.select { |k| tree[k].nil? }
470
+
471
+ if new_dirs.blank?
472
+ ## we need to send 1 file so we will inflated dirs from in case when we dont have folders in the tree
473
+ file = tree.keys.find { |k| tree[k] != nil }
474
+ dirs_queue.push file
475
+ end
476
+
477
+ new_dirs.each { |dir| dirs_queue.push dir }
478
+ }
446
479
  Cnvrg::Logger.info("Getting files info from server")
480
+
447
481
  results = request_upload_files(commit_sha1, tree, override, new_branch, partial_commit)
448
482
  next unless results
449
483
 
@@ -452,11 +486,8 @@ module Cnvrg
452
486
  next
453
487
  end
454
488
 
455
- # Handle directories:
456
- new_dirs = tree.keys.select {|k| tree[k].nil?}
457
- dirs += new_dirs
458
-
459
489
  files_to_upload = results['files']
490
+
460
491
  progress_mutex.synchronize {
461
492
  progressbar.progress += tree.keys.length - files_to_upload.length
462
493
  }
@@ -468,7 +499,10 @@ module Cnvrg
468
499
  file_queue.push tree[key].merge(files_to_upload[key])
469
500
  end
470
501
  end
502
+
471
503
  Cnvrg::Logger.info("Waiting to progress and workers to finish")
504
+ dir_thread.join
505
+ dirs_queue.close
472
506
  progress_threads.each(&:join)
473
507
  worker_threads.each(&:join)
474
508
  Thread.report_on_exception = true
data/lib/cnvrg/dataset.rb CHANGED
@@ -564,7 +564,8 @@ module Cnvrg
564
564
  safe_path = file
565
565
  safe_path = file[1..-1] if file.start_with? "/"
566
566
 
567
- label = safe_path.gsub(self.local_path + "/", "")
567
+ dataset_local_path = self.local_path + "/"
568
+ label = safe_path.start_with?(dataset_local_path) ? safe_path.sub(dataset_local_path, "") : safe_path
568
569
  label = "#{prefix}/#{label}" if prefix.present?
569
570
  if not Cnvrg::Files.valid_file_name?(label)
570
571
  if cli
@@ -598,6 +599,7 @@ module Cnvrg
598
599
  }
599
600
  end
600
601
  end
602
+
601
603
  if prefix.present? #add the prefix as dirs to the files
602
604
  #lets say the prefix is a/b/c so we want that a/, a/b/, a/b/c/ will be in our files_list
603
605
  dirs = prefix.split('/')
data/lib/cnvrg/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cnvrg
2
- VERSION = '1.11.23'
3
- end
2
+ VERSION = '1.11.24'
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cnvrg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.23
4
+ version: 1.11.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yochay Ettun
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-02-17 00:00:00.000000000 Z
13
+ date: 2021-02-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler