VictoriaFreSh 2021.8.20 → 2022.1.8

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.
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: []