deb-s3-lock-fix 0.11.8.fix7 → 0.11.8.fix8

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: 64a940f929792ef7097c9833c41692f970f42aa1943020468147d9960ab88edb
4
- data.tar.gz: 6ec72dd113fa7cfdaaf04223e7f85c23d4b2b0a4e61a7a7edf04ca34727cad78
3
+ metadata.gz: 1a7f40985258d5212ac5f40cf777e3c18ead8e1f73768444462a14f4b04727fe
4
+ data.tar.gz: d90d94de2da1ffab4439347e2f9fbe964b41b0663f58b509c110a71a91f32878
5
5
  SHA512:
6
- metadata.gz: 531da15da212e104d6a3702cd522ce6c5e4b6718dc5d79773dc5ed409973b40913735dc42bb81a7b9407db07b84692ded0e8f16f59bc1967964438d314e551c3
7
- data.tar.gz: ec1259ba39dae97af68702687459fa3b16629444724a785dcd17721fe5f6032d0ab296e000c70d6cad7a788463b8094c13201e9ca2ed401eed029f8c2bfee182
6
+ metadata.gz: 7dffaadf897accef8d6427768d393d543959843531bd2e2ce7756243580b3c6793cb917bf1f78eed47e2314ac03bc640e89b7cd252c9380aea2e258224e293d1
7
+ data.tar.gz: 749f27fca151c95688da92a2b7ed3686bb59df8c6118120c80ae385987091224c6bf0e00a8f3b49defd1ed4b56b1c920756b567e4676832f6cfe54bae6fbf814
data/README.md CHANGED
@@ -1,8 +1,18 @@
1
- # deb-s3
1
+ # deb-s3-lock-fix
2
2
 
3
3
  [![Build Status](https://travis-ci.org/deb-s3/deb-s3.svg?branch=master)](https://travis-ci.org/deb-s3/deb-s3)
4
4
 
5
- **This repository is a fork of [krobertson/deb-s3](https://github.com/krobertson/deb-s3).**
5
+ **This repository is a fork of [deb-s3](https://github.com/deb-s3/deb-s3).**
6
+
7
+ Note: The locking mechanism in the original deb-s3 library does not prevent race conditions.
8
+ It relies on S3 for distributed locking, which will not work consistently due to S3's eventual
9
+ consistency model. This fork uses DynamoDB for distributed locking, since it ensures atomic
10
+ conditional put operations on the lock.
11
+
12
+ To use this library create a DynamoDB table and export the following three env variables:
13
+ `DEB_S3_LOCK_ACCESS_KEY_ID`
14
+ `DEB_S3_LOCK_SECRET_ACCESS_KEY`
15
+ `AWS_BUILDERS_REGION`
6
16
 
7
17
  `deb-s3` is a simple utility to make creating and managing APT repositories on
8
18
  S3.
data/lib/deb/s3/cli.rb CHANGED
@@ -165,7 +165,7 @@ class Deb::S3::CLI < Thor
165
165
  if options[:lock]
166
166
  log("Checking for existing lock file")
167
167
  log("Locking repository for updates")
168
- Deb::S3::Lock.lock(options[:codename])
168
+ Deb::S3::Lock.lock(options[:bucket], options[:codename])
169
169
  @lock_acquired = true
170
170
  end
171
171
 
@@ -257,7 +257,7 @@ class Deb::S3::CLI < Thor
257
257
  log("Update complete.")
258
258
  ensure
259
259
  if options[:lock] && @lock_acquired
260
- Deb::S3::Lock.unlock(options[:codename])
260
+ Deb::S3::Lock.unlock(options[:bucket], options[:codename])
261
261
  log("Lock released.")
262
262
  end
263
263
  end
@@ -406,7 +406,7 @@ class Deb::S3::CLI < Thor
406
406
  if options[:lock]
407
407
  log("Checking for existing lock file")
408
408
  log("Locking repository for updates")
409
- Deb::S3::Lock.lock(options[:codename])
409
+ Deb::S3::Lock.lock(options[:bucket], options[:codename])
410
410
  @lock_acquired = true
411
411
  end
412
412
 
@@ -448,7 +448,7 @@ class Deb::S3::CLI < Thor
448
448
  log "Copy complete."
449
449
  ensure
450
450
  if options[:lock] && @lock_acquired
451
- Deb::S3::Lock.unlock(options[:codename])
451
+ Deb::S3::Lock.unlock(options[:bucket], options[:codename])
452
452
  log("Lock released.")
453
453
  end
454
454
  end
@@ -501,7 +501,7 @@ class Deb::S3::CLI < Thor
501
501
  if options[:lock]
502
502
  log("Checking for existing lock file")
503
503
  log("Locking repository for updates")
504
- Deb::S3::Lock.lock(options[:codename])
504
+ Deb::S3::Lock.lock(options[:bucket], options[:codename])
505
505
  @lock_acquired = true
506
506
  end
507
507
 
@@ -549,7 +549,7 @@ class Deb::S3::CLI < Thor
549
549
  end
550
550
  ensure
551
551
  if options[:lock] && @lock_acquired
552
- Deb::S3::Lock.unlock(options[:codename])
552
+ Deb::S3::Lock.unlock(options[:bucket], options[:codename])
553
553
  log("Lock released.")
554
554
  end
555
555
  end
@@ -615,7 +615,7 @@ class Deb::S3::CLI < Thor
615
615
  if options[:lock]
616
616
  log("Checking for existing lock file")
617
617
  log("Locking repository for updates")
618
- Deb::S3::Lock.lock(options[:codename])
618
+ Deb::S3::Lock.lock(options[:bucket], options[:codename])
619
619
  @lock_acquired = true
620
620
  end
621
621
 
@@ -679,7 +679,7 @@ class Deb::S3::CLI < Thor
679
679
  end
680
680
  ensure
681
681
  if options[:lock] && @lock_acquired
682
- Deb::S3::Lock.unlock(options[:codename])
682
+ Deb::S3::Lock.unlock(options[:bucket], options[:codename])
683
683
  log("Lock released.")
684
684
  end
685
685
  end
data/lib/deb/s3/lock.rb CHANGED
@@ -30,10 +30,10 @@ class Deb::S3::Lock
30
30
  end
31
31
 
32
32
  class << self
33
- def lock(codename, max_attempts = 60, max_wait_interval = 10)
33
+ def lock(bucket, codename, max_attempts = 60, max_wait_interval = 10)
34
34
  uuid = SecureRandom.uuid
35
35
  lock_body = "#{Etc.getlogin}@#{Socket.gethostname}-#{uuid}"
36
- lock_key = codename
36
+ lock_key = "#{bucket}/#{codename}"
37
37
 
38
38
  $stderr.puts("Current job's hostname with UUID: #{lock_body}")
39
39
 
@@ -51,7 +51,7 @@ class Deb::S3::Lock
51
51
  })
52
52
  return
53
53
  rescue Aws::DynamoDB::Errors::ConditionalCheckFailedException
54
- lock_holder = current_lock_holder(codename)
54
+ lock_holder = current_lock_holder(bucket, codename)
55
55
  current_time = Time.now.strftime("%Y-%m-%d %H:%M:%S")
56
56
  $stderr.puts("[#{current_time}] Repository is locked by another user: #{lock_holder.user} at host #{lock_holder.host_with_uuid}")
57
57
  $stderr.puts("Attempting to obtain a lock after #{wait_interval} second(s).")
@@ -62,20 +62,20 @@ class Deb::S3::Lock
62
62
  raise "Unable to obtain a lock after #{max_attempts} attemtps, giving up."
63
63
  end
64
64
 
65
- def unlock(codename)
65
+ def unlock(bucket, codename)
66
66
  dynamodb.delete_item({
67
67
  table_name: DYNAMODB_TABLE_NAME,
68
68
  key: {
69
- 'lock_key' => codename
69
+ 'lock_key' => "#{bucket}/#{codename}"
70
70
  }
71
71
  })
72
72
  end
73
73
 
74
- def current_lock_holder(codename)
74
+ def current_lock_holder(bucket, codename)
75
75
  response = dynamodb.get_item({
76
76
  table_name: DYNAMODB_TABLE_NAME,
77
77
  key: {
78
- 'lock_key' => codename
78
+ 'lock_key' => "#{bucket}/#{codename}"
79
79
  }
80
80
  })
81
81
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deb-s3-lock-fix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.8.fix7
4
+ version: 0.11.8.fix8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Braeden Wolf & Ken Robertson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-15 00:00:00.000000000 Z
11
+ date: 2023-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -82,7 +82,7 @@ dependencies:
82
82
  version: '11'
83
83
  description: Fork of deb-s3 with a specific fix for locking. Original work by Ken
84
84
  Robertson.
85
- email: braedenwolf@outlook.com & ken@invalidlogic.com
85
+ email: braeden.wolf@sanctuary.ai & ken@invalidlogic.com
86
86
  executables:
87
87
  - deb-s3
88
88
  extensions: []
@@ -99,7 +99,7 @@ files:
99
99
  - lib/deb/s3/templates/package.erb
100
100
  - lib/deb/s3/templates/release.erb
101
101
  - lib/deb/s3/utils.rb
102
- homepage: https://github.com/braedenwolf/deb-s3-lock-fix
102
+ homepage: https://gitlab.com/sanctuaryai/precog2/infrastructure/deb-s3-lock-fix
103
103
  licenses:
104
104
  - MIT
105
105
  metadata: {}