VictoriaFreSh 2021.8.20 → 2022.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/victoriafresh.rb +29 -18
  3. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a56b845c853ea051b1161ab0ecfa3c234dbf9516d1556bd80abab4f40229091c
4
- data.tar.gz: b0be7bf5028590e06c48603586199a5c4bf11169489cec752d750fa895e44f1f
3
+ metadata.gz: 41105b47d70e0d767e72badf4280f170ca7654668f344255b2718ce6a46f827c
4
+ data.tar.gz: 218bdf0c648500f0c518cc1f4d84515528ebbb7512dd0e876c1957bbe26414d6
5
5
  SHA512:
6
- metadata.gz: 91f6eab1bb592d56387183e2bcbb932c7b2c0b8c111410ec707f80d56a4c8a3246a1d316f3691df272b7f44fc303f9c12ed8214771db2dfa32b530649aac69c7
7
- data.tar.gz: 10ee5a210c1030ed986c80b66dc3d9b64bcef2694a0d84f96aeb3ca8362e472e2184c7c362406f9f2d23932f31580b1e127052b04e2aedbac109f9b44518b5b6
6
+ metadata.gz: bea4abcee34ca2430ba9756e2ded00872c373c8ba2eff827a4d163d31556a5ec5bb793a2eb51a2bd65a4a8cfc1297174ed631756958b07de4bad8ae166f76d6b
7
+ data.tar.gz: 5bc98b7f1f12f007c2f38cd90fdee5c7f123576f8bf9780908ea2335a06afc01099745e9b47ac67f72e66eb0ee2fe2a37b1cc72b74ed447943eba661f6b0e003
data/lib/victoriafresh.rb CHANGED
@@ -4,6 +4,7 @@ require 'pathname'
4
4
  require 'fileutils'
5
5
  require 'cbor'
6
6
  require 'get_process_mem'
7
+ require 'digest'
7
8
 
8
9
  # require File.dirname(__FILE__)+'/VictoriaFreSh/filemessage_pb.rb'
9
10
 
@@ -25,6 +26,20 @@ class VictoriaFresh
25
26
  @currentDiskFlushSuffix=0 #当前的磁盘文件后缀
26
27
  @bufferLength=0 #缓冲区总长度
27
28
  @externalDataFile={} #外部数据文件对象
29
+ @nextFileIdToUse=1 # 下一个要用的文件编号。
30
+ @md5FileIdMap={} # MD5 与文件编号之间的映射
31
+ end
32
+
33
+ # 计算文件内容的MD5。
34
+ def calculateMd5(currentFileContent)
35
+ Digest::MD5.hexdigest currentFileContent #=> "90015098..."
36
+ end
37
+
38
+ # 下一个可用的文件编号
39
+ def nextFileId
40
+ result=@nextFileIdToUse # 结果
41
+
42
+ @nextFileIdToUse=@nextFileIdToUse+1
28
43
  end
29
44
 
30
45
  def checkMemoryUsage(lineNumber)
@@ -320,8 +335,6 @@ class VictoriaFresh
320
335
  @diskWriteFileObject.syswrite(contentToWrite) #写入内容
321
336
 
322
337
  @diskWriteFileObject.close
323
-
324
-
325
338
  else #单个磁盘文件
326
339
  @diskWriteFileObject.syswrite(contentToWrite) #写入内容
327
340
 
@@ -377,19 +390,29 @@ class VictoriaFresh
377
390
 
378
391
  if isFile #是文件,不用再列出其子文件了。
379
392
  packagedFile['file_length']=directoryPathName.size #记录文件的内容长度。
393
+ packagedFile['id']= nextFileId # 设置下一个文件编号
380
394
 
381
395
  #读取文件内容:
382
396
  fileToReadContent=File.new(directoryPath,"rb") #创建文件。
383
397
  currentFileContent=fileToReadContent.read #全部读取
384
- @contentPartArray << currentFileContent
385
- @bufferLength=@bufferLength+ currentFileContent.length #记录缓冲区总长度
386
- # @contentString= @contentString + fileToReadContent.read #全部读取。
398
+
399
+ currentContentMd5=calculateMd5(currentFileContent) # 计算文件内容的MD5。
400
+
401
+ sameFileId=@md5FileIdMap[currentContentMd5] # 尝试寻找对应的相同文件的编号。
402
+
403
+ if sameFileId.nil? # 不存在相同的文件
404
+ @contentPartArray << currentFileContent
405
+ @bufferLength=@bufferLength+ currentFileContent.length #记录缓冲区总长度
406
+ @md5FileIdMap[currentContentMd5]=packagedFile['id'] # 尝试寻找对应的相同文件的编号。
407
+ else # 存在相同的文件
408
+ packagedFile['is_duplicate']=true # 是重复文件。
409
+ packagedFile['same_file_id']=sameFileId # 设置相同文件的编号。
410
+ end # if sameFileId.nil? # 不存在相同的文件
387
411
 
388
412
  assessDiskFlush(layer) #考虑是否要向磁盘先输出内容
389
413
  elsif (isSymLink) #是符号链接
390
414
  linkTarget=directoryPathName.readlink #获取链接目标
391
415
 
392
- # 待续,设置内容长度。符号链接字符串的长度
393
416
  packagedFile['file_length']=linkTarget.to_s.bytesize #记录文件的内容长度。
394
417
 
395
418
  #读取文件内容:
@@ -397,12 +420,9 @@ class VictoriaFresh
397
420
  currentFileContent=StringIO.new(linkTarget.to_s).binmode.read #全部读取。
398
421
  @contentPartArray << currentFileContent #加入数组
399
422
  @bufferLength=@bufferLength + currentFileContent.length #记录缓冲区总长度
400
- # @contentString= @contentString + StringIO.new(linkTarget.to_s).binmode.read #全部读取。
401
423
 
402
424
  assessDiskFlush(layer) #考虑是否要向磁盘先输出内容
403
-
404
425
  else #是目录。
405
- # contentString="" #容纳内容的字符串。
406
426
  subFileStartIndex=startIndex #子文件的起始位置,以此目录的起始位置为基准。
407
427
 
408
428
  packagedFile['file_length']=0 #本目录的内容长度。
@@ -410,9 +430,6 @@ class VictoriaFresh
410
430
  puts "Listing for #{directoryPathName}" # Debug
411
431
 
412
432
  directoryPathName.each_child do |subFile| #一个个文件地处理。
413
- # puts("sub file: #{subFile}, class: #{subFile.class}, symlink: #{subFile.symlink?}, expand_path: #{subFile.expand_path}, file?: #{subFile.file?}") #Debug.
414
- # checkMemoryUsage(221)
415
-
416
433
  begin
417
434
  realPath=subFile.expand_path #获取绝对路径。
418
435
 
@@ -420,12 +437,6 @@ class VictoriaFresh
420
437
 
421
438
  packagedFile['sub_files'] << packagedSubFile #加入到子文件列表中。
422
439
 
423
- # puts("sub file content: #{subFileContent}, nil?: #{subFileContent.nil?}" ) #Debug
424
-
425
- # puts(" content: #{contentString}, nil?: #{contentString.nil? }") #Debug
426
-
427
- # contentString = contentString + subFileContent #串接文件内容。
428
-
429
440
  assessDiskFlush(layer) #考虑是否要向磁盘先输出内容
430
441
 
431
442
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: VictoriaFreSh
3
3
  version: !ruby/object:Gem::Version
4
- version: 2021.8.20
4
+ version: 2022.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hxcan Cai
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-20 00:00:00.000000000 Z
11
+ date: 2022-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hx_cbor
@@ -50,7 +50,7 @@ homepage: http://rubygems.org/gems/VictoriaFreSh
50
50
  licenses:
51
51
  - MIT
52
52
  metadata: {}
53
- post_install_message:
53
+ post_install_message:
54
54
  rdoc_options: []
55
55
  require_paths:
56
56
  - lib
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  version: '0'
67
67
  requirements: []
68
68
  rubygems_version: 3.1.6
69
- signing_key:
69
+ signing_key:
70
70
  specification_version: 4
71
71
  summary: VictoriaFreSh
72
72
  test_files: []