void ghobject_t::dump(Formatter *f) const
{
hobj.dump(f);
- if (generation != NO_GEN) {
+ if (generation != NO_GEN)
f->dump_int("generation", generation);
+ if (shard_id != shard_id_t::NO_SHARD)
f->dump_int("shard_id", shard_id);
- }
}
void ghobject_t::generate_test_instances(list<ghobject_t*>& o)
from subprocess import call
from subprocess import check_output
+import subprocess
import os
import time
import sys
for basename in db[nspace].keys():
file = os.path.join(DATADIR, nspace + "-" + basename)
JSON = db[nspace][basename]['json']
+ jsondict = json.loads(JSON)
+
+ if 'shard_id' in jsondict:
+ logging.debug("ECobject " + JSON)
+ found = 0
+ for pg in OBJECPGS:
+ OSDS = get_osds(pg, OSDDIR)
+ # Fix shard_id since we only have one json instance for each object
+ jsondict['shard_id'] = int(string.split(pg, 's')[1])
+ JSON = json.dumps(jsondict)
+ for osd in OSDS:
+ cmd = (CFSD_PREFIX + "--pgid {pg} '{json}' get-attr hinfo_key").format(osd=osd, pg=pg, json=JSON)
+ logging.debug("TRY: " + cmd)
+ try:
+ out = check_output(cmd, shell=True, stderr=subprocess.STDOUT)
+ logging.debug("FOUND: {json} in {osd} has value '{val}'".format(osd=osd, json=JSON, val=out))
+ found += 1
+ except subprocess.CalledProcessError, e:
+ if "No such file or directory" not in e.output and "No data available" not in e.output:
+ raise
+ # Assuming k=2 m=1 for the default ec pool
+ if found != 3:
+ logging.error("{json} hinfo_key found {found} times instead of 3".format(json=JSON, found=found))
+ ERRORS += 1
+
for pg in OBJREPPGS:
OSDS = get_osds(pg, OSDDIR)
for osd in OSDS: