map_info_parser.add_argument('-v', '--verbose', action='store_true',
default=False, help='')
+ hash_parser = subparsers.add_parser('hash', help='Hash snapshot')
+ #group = hash_parser.add_mutually_exclusive_group(required=True)
+ hash_parser.add_argument('-p', '--pool', type=str, nargs='?',
+ help='for backwards compatiblity with rbd')
+ hash_parser.add_argument('name', type=str, help='Snapshot name')
+ hash_parser.set_defaults(func=vlmc.hash)
+
return parser
@classmethod
def get_hash_request(cls, xseg, dst, target, size=0, offset=0):
return cls(xseg, dst, target, op=X_HASH, size=size, offset=offset)
+
+ @classmethod
+ def get_hash_request(cls, xseg, dst, target):
+ return cls(xseg, dst, target, op=X_HASH)
if cli:
sys.stdout.write("Snapshot name: %s\n" % snap_name)
+@exclusive(get_port=True)
+def hash(name, cli=False, **kwargs):
+ if len(name) < 6:
+ raise Error("Name should have at least len 6")
+
+ vtool_port = get_vtool_port()
+ xseg_ctx = Xseg_ctx(segment.get_spec(), vtool_port)
+ mport = peers['mapperd'].portno_start
+ req = Request.get_hash_request(xseg_ctx, mport, name)
+ req.submit()
+ req.wait()
+ ret = req.success()
+ if ret:
+ xhash = req.get_data(xseg_reply_hash).contents
+ hash_name = ctypes.string_at(xhash.target, xhash.targetlen)
+ req.put()
+ xseg_ctx.shutdown()
+
+ if not ret:
+ raise Error("vlmc hash failed")
+ if cli:
+ sys.stdout.write("Hash name: %s\n" % hash_name)
+ return hash_name
+
def list_volumes(**kwargs):
if isinstance(peers['blockerm'], Sosd):
import rados