 ae062f8b09
			
		
	
	ae062f8b09
	
	
	
		
			
			There's a bunch of moving pieces here:
- Add a new RingWriter class.
  Stick it in a new swift.common.ring.io module. You *can* use it like
  the old gzip file, but you can also define named sections which can
  be referenced later on read. Section names may be arbitrary strings,
  but the "swift/" prefix is reserved for upstream use. Sections must
  contain a single length-value encoded BLOB. If sections are used, an
  additional BLOB is written at the end containing a JSON section-index,
  followed by an uncompressed offset for the index.
  Move RingReader to ring/io.py, too.
- Clean up some ring metadata handling:
  - Drop MD5 tracking in RingReader. It was brittle at best anyway, and
    nothing uses it. YAGNI
  - Fix size/raw_size attributes when loading only metadata.
- Add the ability to seek within RingReaders, though you need to know
  what you're doing and only seek to flush points.
- Let RingBuilder objects change how wide their replica2part2dev_id
  arrays are. Add a dev_id_bytes key to serialized ring metadata.
  dev_id_bytes may be either 2 or 4, but 4 requires v2 rings. We
  considered allowing dev_id_bytes of 1, but dropped it as unnecessary
  complexity for a niche use case.
- swift-ring-builder version subcommand added, which takes a ring. This
  lets operators see the serialization format of a ring on disk:
  $ swift-ring-builder object.ring.gz version
  object.ring.gz: Serialization version: 2 (2-byte IDs), build version: 54
Signed-off-by: Tim Burke <tim.burke@gmail.com>
Change-Id: Ia0ac4ea2006d8965d7fdb6659d355c77386adb70
		
	
		
			
				
	
	
		
			11 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			11 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| __RINGFILE__, build version 4, id __BUILDER_ID__
 | |
| 256 partitions, 3.000000 replicas, 4 regions, 4 zones, 4 devices, 2-byte IDs, 100.00 balance, 0.00 dispersion
 | |
| The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
 | |
| The overload factor is 0.00% (0.000000)
 | |
| Ring file __RINGFILE__.ring.gz not found, probably it hasn't been written yet
 | |
| Devices:   id region zone                     ip address:port                  replication ip:port   name   weight partitions balance flags meta
 | |
|             0      0    0 [2001:db8:85a3::8a2e:370:7334]:6200  [2001:db8:85a3::8a2e:370:7334]:6200   sda1   100.00          0 -100.00       some meta data
 | |
|             1      1    1                      127.0.0.1:66201                      127.0.0.1:66201  sda2   100.00          0 -100.00
 | |
|             2      2    2 [2001:db8:85a3::8a2e:370:7336]:6202                    127.0.10.127:7070   sdc3 10000.00          0 -100.00
 | |
|             3      3    3 [2001:db8:85a3::8a2e:370:7337]:6203  [7001:db8:85a3::8a2e:370:7337]:11664  sdd4   100.00          0 -100.00
 |