prometheus-client-mmap 1.0.0-x86_64-linux → 1.0.2-x86_64-linux

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: 73360e69c9b83ad6a3748094621dc3f93d5fc9d9ff79e881f320bcbb35d9f798
4
- data.tar.gz: 6a9fa48dbb5da204fe5bf5007ec8a24f4be3b3ba5290344c635027b14e997a0d
3
+ metadata.gz: a91f92d624ef1c32f1c60e646f04d63df1f4bd1c2ff7e599abdbc687964997de
4
+ data.tar.gz: 2775a1a98a0cf4309293aaf075406ab543259d530db7a59d80ad9698e835326a
5
5
  SHA512:
6
- metadata.gz: decae167312a1f71047a6a830dc25e6f497f0c537657749c597720f548462ec250c32b44f09f345338b2bde9c3d16d3131f9f8217cb606583f1e2ddd2d93d9f8
7
- data.tar.gz: 426245645098e4296757e9eeb23ebc807fef93b954c92b68b8d678f358fc7540f69bc822dc7d171a6244dba5d686c6b9ccc12ea647da33f142075d05de07c09d
6
+ metadata.gz: 7d9f05cf642375bd3189ebc93343415ed46c4cbf6cd9060640fa5168f2504886e1961b9b6c376a91d2c3e54559c2b34e90db2d4f1ac5eb23eaeeafd1fc7ae14a
7
+ data.tar.gz: 3f28eb9663d990735d010521fd79c7644b6f5ea362986ecfbc71a0582a02d54e779ec82c61e6291aa0e6f17bd913277d1c3eadf9ae05fc818d560ba902b29b98
@@ -91,6 +91,11 @@ impl FileInfo {
91
91
 
92
92
  match self.file.read_to_end(buf) {
93
93
  Ok(n) if n == self.len => Ok(()),
94
+ // A worker may expand the file between our `stat` and `read`, no harm done.
95
+ Ok(n) if n > self.len => {
96
+ self.len = n;
97
+ Ok(())
98
+ }
94
99
  Ok(_) => Err(MmapError::io(
95
100
  "read",
96
101
  &self.path,
@@ -106,6 +111,8 @@ mod test {
106
111
  use magnus::{eval, RArray, Symbol};
107
112
  use rand::{thread_rng, Rng};
108
113
  use sha2::{Digest, Sha256};
114
+ use std::fs;
115
+ use std::io::Write;
109
116
 
110
117
  use super::*;
111
118
  use crate::testhelper::TestFile;
@@ -165,7 +172,7 @@ mod test {
165
172
 
166
173
  let mut info = FileInfo {
167
174
  file,
168
- path,
175
+ path: path.clone(),
169
176
  len: buf.len(),
170
177
  multiprocess_mode: Symbol::new("puma"),
171
178
  type_: Symbol::new("max"),
@@ -187,4 +194,47 @@ mod test {
187
194
 
188
195
  assert_eq!(in_hash, out_hash, "content hashes");
189
196
  }
197
+
198
+ #[test]
199
+ fn test_read_from_file_resized() {
200
+ let _cleanup = unsafe { magnus::embed::init() };
201
+ let ruby = magnus::Ruby::get().unwrap();
202
+ crate::init(&ruby).unwrap();
203
+
204
+ const BUF_LEN: usize = 1 << 14; // 16KiB
205
+
206
+ // Create a buffer with random data.
207
+ let mut buf = vec![0u8; BUF_LEN];
208
+ thread_rng().fill(buf.as_mut_slice());
209
+
210
+ let TestFile {
211
+ file,
212
+ path,
213
+ dir: _dir,
214
+ } = TestFile::new(&buf);
215
+
216
+ let mut info = FileInfo {
217
+ file,
218
+ path: path.clone(),
219
+ len: buf.len(),
220
+ multiprocess_mode: Symbol::new("puma"),
221
+ type_: Symbol::new("max"),
222
+ pid: "worker-0_0".to_string(),
223
+ };
224
+
225
+ let mut resized_file = fs::OpenOptions::new()
226
+ .write(true)
227
+ .append(true)
228
+ .open(path)
229
+ .unwrap();
230
+
231
+ // Write data to file after it has been `stat`ed in the
232
+ // constructor.
233
+ resized_file.write_all(&[1; 1024]).unwrap();
234
+
235
+ let mut out_buf = Vec::new();
236
+ info.read_from_file(&mut out_buf).unwrap();
237
+
238
+ assert_eq!(BUF_LEN + 1024, info.len, "resized file updated len");
239
+ }
190
240
  }
@@ -536,14 +536,14 @@ impl MmapedFile {
536
536
  match file.seek(SeekFrom::Start(len - 1)) {
537
537
  Ok(_) => {}
538
538
  Err(_) => {
539
- return Err(MmapError::WithErrno(format!("Can't lseek {}", len - 1)));
539
+ return Err(MmapError::with_errno(format!("Can't lseek {}", len - 1)));
540
540
  }
541
541
  }
542
542
 
543
543
  match file.write(&[0x0]) {
544
544
  Ok(1) => {}
545
545
  _ => {
546
- return Err(MmapError::WithErrno(format!(
546
+ return Err(MmapError::with_errno(format!(
547
547
  "Can't extend {}",
548
548
  path.display()
549
549
  )));
Binary file
Binary file
Binary file
Binary file
@@ -1,5 +1,5 @@
1
1
  module Prometheus
2
2
  module Client
3
- VERSION = '1.0.0'.freeze
3
+ VERSION = '1.0.2'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-client-mmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Tobias Schmidt
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-11-15 00:00:00.000000000 Z
14
+ date: 2023-12-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rb_sys