litestream 0.7.2-x86_64-darwin → 0.9.0-x86_64-darwin

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e42df5e3a4192b9b1aaf2ad78d934419c6db0a5e687a7b60da72e6e162223cb
4
- data.tar.gz: a7710f8160f888305e2fb8ebbef2dbbd15136d04f057d5f1f01833e770cd3f7f
3
+ metadata.gz: bc937c14c8cdbc08db031431903637338b95fed9cee32fcffa945da97bcc5927
4
+ data.tar.gz: 8b305efd28e72ef7316fc53e790ca10ef29cc317d74fd72474ed4007a0469936
5
5
  SHA512:
6
- metadata.gz: 633fe0f89a2a187cb1a07646ce7bced92f9024e93d0ae616741a7ce66d507f4915a8d9593be213bd399c22a24001ee66745126bed723fd7c376f2960f1f29755
7
- data.tar.gz: f3661e0473a3c1dea76f3f57fb5d96d39dc4e45c5e34ad291b7720913858d9137acae1209e8632caea73b9b443c796e3b7c57a008d295cf152c35a40310e1c76
6
+ metadata.gz: 672231f8716e812ee516d13cfab97386001cd9084f2aa03418d1f17838bbaaa8442e6ccc4ddf3c3edd654743e2f2f11b8f72b5d887f79060d405ac03d2de9832
7
+ data.tar.gz: e19b81794bfc2fae07aff2bc1b6c9084a10bd309fda38f2a1f8340791262475fd4d0a5171bd067322a4342c31bb69fcfbf8eea9fd27ec497b76b37dd3bf746ad
@@ -102,16 +102,29 @@ module Litestream
102
102
  }.merge(argv)
103
103
  restore(database, async: false, **args)
104
104
 
105
- restored_tables_count = `sqlite3 #{backup} "select count(*) from sqlite_schema where type='table';"`.chomp.to_i
106
- restored_size = File.size(backup)
107
- original_tables_count = `sqlite3 #{database} "select count(*) from sqlite_schema where type='table';"`.chomp.to_i
108
- original_size = File.size(database)
105
+ restored_schema = `sqlite3 #{backup} "select name, type from sqlite_schema;"`.chomp.split("\n")
106
+ restored_data = restored_schema.map { _1.split("|") }.group_by(&:last)
107
+ restored_rows_count = restored_data["table"]&.sum { |tbl, _| `sqlite3 #{backup} "select count(*) from #{tbl};"`.chomp.to_i }
108
+
109
+ original_schema = `sqlite3 #{database} "select name, type from sqlite_schema;"`.chomp.split("\n")
110
+ original_data = original_schema.map { _1.split("|") }.group_by(&:last)
111
+ original_rows_count = original_data["table"]&.sum { |tbl, _| `sqlite3 #{database} "select count(*) from #{tbl};"`.chomp.to_i }
109
112
 
110
113
  Dir.glob(backup + "*").each { |file| File.delete(file) }
111
114
 
112
115
  {
113
- "size" => {"original" => original_size, "restored" => restored_size},
114
- "tables" => {"original" => original_tables_count, "restored" => restored_tables_count}
116
+ "original" => {
117
+ "path" => database,
118
+ "tables" => original_data["table"]&.size,
119
+ "indexes" => original_data["index"]&.size,
120
+ "rows" => original_rows_count
121
+ },
122
+ "restored" => {
123
+ "path" => backup,
124
+ "tables" => restored_data["table"]&.size,
125
+ "indexes" => restored_data["index"]&.size,
126
+ "rows" => restored_rows_count
127
+ }
115
128
  }
116
129
  end
117
130
 
@@ -1,3 +1,3 @@
1
1
  module Litestream
2
- VERSION = "0.7.2"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -93,18 +93,53 @@ namespace :litestream do
93
93
  options.symbolize_keys!
94
94
 
95
95
  result = Litestream::Commands.verify(database, async: true, **options)
96
-
97
- puts <<~TXT if result
98
-
99
- size
100
- original #{result["size"]["original"]}
101
- restored #{result["size"]["restored"]}
102
- delta #{result["size"]["original"] - result["size"]["restored"]}
103
-
104
- tables
105
- original #{result["tables"]["original"]}
106
- restored #{result["tables"]["restored"]}
107
- delta #{result["tables"]["original"] - result["tables"]["restored"]}
108
- TXT
96
+ original_tables = result["original"]["tables"]
97
+ restored_tables = result["restored"]["tables"]
98
+ original_indexes = result["original"]["indexes"]
99
+ restored_indexes = result["restored"]["indexes"]
100
+ original_rows = result["original"]["rows"]
101
+ restored_rows = result["restored"]["rows"]
102
+
103
+ same_number_of_tables = original_tables == restored_tables
104
+ same_number_of_indexes = original_indexes == restored_indexes
105
+ same_number_of_rows = original_rows == restored_rows
106
+
107
+ if same_number_of_tables && same_number_of_indexes && same_number_of_rows
108
+ puts "Backup for `#{database}` verified as consistent!\n" + [
109
+ " tables #{original_tables}",
110
+ " indexes #{original_indexes}",
111
+ " rows #{original_rows}"
112
+ ].compact.join("\n")
113
+ else
114
+ abort "Verification failed for #{database}:\n" + [
115
+ (unless same_number_of_tables
116
+ if original_tables > restored_tables
117
+ diff = original_tables - restored_tables
118
+ " Backup is missing #{diff} table#{"s" if diff > 1}"
119
+ else
120
+ diff = restored_tables - original_tables
121
+ " Backup has extra #{diff} table#{"s" if diff > 1}"
122
+ end
123
+ end),
124
+ (unless same_number_of_indexes
125
+ if original_indexes > restored_indexes
126
+ diff = original_indexes - restored_indexes
127
+ " Backup is missing #{diff} index#{"es" if diff > 1}"
128
+ else
129
+ diff = restored_indexes - original_indexes
130
+ " Backup has extra #{diff} index#{"es" if diff > 1}"
131
+ end
132
+ end),
133
+ (unless same_number_of_rows
134
+ if original_rows > restored_rows
135
+ diff = original_rows - restored_rows
136
+ " Backup is missing #{diff} row#{"s" if diff > 1}"
137
+ else
138
+ diff = restored_rows - original_rows
139
+ " Backup has extra #{diff} row#{"s" if diff > 1}"
140
+ end
141
+ end)
142
+ ].compact.join("\n")
143
+ end
109
144
  end
110
145
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: litestream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.9.0
5
5
  platform: x86_64-darwin
6
6
  authors:
7
7
  - Stephen Margheim
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-02 00:00:00.000000000 Z
11
+ date: 2024-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logfmt