示例#1
0
def test_ChunkServer():
	print '     test begin     '.center(100,'-')
	print
	server=ChunkServer()
	logging.basicConfig(level=logging.DEBUG)

	# mock the newchunk request from client
	req_newchunk=msg.NewChunk_Request()
	req_newchunk.size=32
	req_newchunk.count=1
	ret_newchunk = server.NewChunk(req_newchunk)

	# mock the assemblevolume request from client
	req_assemblevolume=msg.AssembleVolume_Request()
	Guid.assign(req_assemblevolume.volume.guid, ret_newchunk.guids[-1])
	req_assemblevolume.volume.size=32
	ret_assemblevolume = server.AssembleVolume(req_assemblevolume)

	# # mock req_disassemblevolume
	req_disassemblevolume = msg.DisassembleVolume_Request()
	req_disassemblevolume.access_point = ret_assemblevolume.access_point
	ret_disassemblevolume = server.DisassembleVolume(req_disassemblevolume)

	# mock the delchunk request from client
	req_delchunk = msg.DeleteChunk_Request()
 	for a_guid in ret_newchunk.guids:
		t=req_delchunk.guids.add()
		Guid.assign(t, a_guid)
	ret_delchunk = server.DeleteChunk(req_delchunk)
	print
	print '     test end     '.center(100,'-')
示例#2
0
def test_ChunkServer():
    print "     test begin     ".center(100, "-")
    print
    server = ChunkServer()
    logging.basicConfig(level=logging.DEBUG)

    # mock the newchunk request from client
    req_newchunk = msg.NewChunk_Request()
    req_newchunk.size = 32
    req_newchunk.count = 1
    ret_newchunk = server.NewChunk(req_newchunk)

    # mock the assemblevolume request from client
    req_assemblevolume = msg.AssembleVolume_Request()
    Guid.assign(req_assemblevolume.volume.guid, ret_newchunk.guids[-1])
    req_assemblevolume.volume.size = 32
    ret_assemblevolume = server.AssembleVolume(req_assemblevolume)

    # # mock req_disassemblevolume
    req_disassemblevolume = msg.DisassembleVolume_Request()
    req_disassemblevolume.access_point = ret_assemblevolume.access_point
    ret_disassemblevolume = server.DisassembleVolume(req_disassemblevolume)

    # mock the delchunk request from client
    req_delchunk = msg.DeleteChunk_Request()
    for a_guid in ret_newchunk.guids:
        t = req_delchunk.guids.add()
        Guid.assign(t, a_guid)
    ret_delchunk = server.DeleteChunk(req_delchunk)
    print
    print "     test end     ".center(100, "-")
示例#3
0
 def DeleteChunk(self, arg):
     print type(arg)
     ret = msg.DeleteChunk_Response()
     for x in arg.guids:
         ret.guids.add()
         y = ret.guids[-1]
         Guid.assign(y, x)
     return ret
示例#4
0
 def DeleteChunk(self, arg):
     print type(arg)
     ret = msg.DeleteChunk_Response()
     for x in arg.guids:
         ret.guids.add()
         y = ret.guids[-1]
         Guid.assign(y, x)
     return ret
示例#5
0
	def DeleteChunk(self, volumes):
		stub = self.getStub()
		arg = msg.DeleteChunk_Request()
		if not isinstance(volumes, list):
			volumes = [volumes]
		for volume in volumes:
			t = arg.guids.add()
			volguid = Guid.fromStr(volume.guid)
			Guid.assign(t, volguid)
		ret = stub.callMethod('DeleteChunk', arg)
示例#6
0
文件: mds.py 项目: lihuiba/SoftSAN
	def __ForwardNewChunk__(self, arg, target, aresponse):
		self.stub.socket.connect((target.ServiceAddress, target.ServicePort))
		ret0=self.stub.callMethod('NewChunk', arg)
		self.stub.socket.close()
		if aresponse:
			for guid in ret0.guids:
				t=aresponse.guids.add()
				Guid.assign(t, guid)
			if ret0.error:
				t=[group[0].guid, group[0].ServiceAddress, group[0].ServicePort, ret0.error]
				aresponse.error="error from chunk server {0} @ ({1}:{2}):\n{3}".format(*t)
		return ret0
示例#7
0
	def doHeartBeat(self, serviceport, stub):
		serviceip=stub.socket.getsockname()[0]
		while True:
			info=msg.ChunkServerInfo()
			info.ServiceAddress=serviceip
			info.ServicePort=serviceport
			self.lvm.reload_softsan_lvs()
			for lv in self.lvm.softsan_lvs:
				chk=info.chunks.add()
				name4guid = lv.name.split(self.prefix_vol)[1]
				Guid.assign(chk.guid, Guid.fromStr(name4guid))
				chk.size = int(lv.get_sizes(lv.total_extents)[2])
			stub.callMethod('ChunkServerInfo', info)
			print 'for test--------------------------------', random.randint(0,100)
			gevent.sleep(1)
示例#8
0
	def DeleteChunk(self, req):
		self.lvm.reload()
		ret = msg.DeleteChunk_Response()
		print 'ChunkServer:  DeleteChunk'
		for a_guid in req.guids:
			str_guid=Guid.toStr(a_guid)
			lv_name = self.prefix_vol+str_guid
			lv_path = '/dev/'+self.vgname+'/'+lv_name
			output = self.lvm.lv_remove(lv_path)
			if output!=None:
				ret.error = "Unable to delete chunk {0}:\n{1}".format(str_guid, output)
				break
			t=ret.guids.add()
			Guid.assign(t, a_guid)
		return ret
示例#9
0
 def doHeartBeat(self, serviceport, stub):
     serviceip = stub.socket.getsockname()[0]
     while True:
         info = msg.ChunkServerInfo()
         info.ServiceAddress = serviceip
         info.ServicePort = serviceport
         self.lvm.reload_softsan_lvs()
         for lv in self.lvm.softsan_lvs:
             chk = info.chunks.add()
             name4guid = lv.name.split(self.prefix_vol)[1]
             Guid.assign(chk.guid, Guid.fromStr(name4guid))
             chk.size = int(lv.get_sizes(lv.total_extents)[2])
         stub.callMethod("ChunkServerInfo", info)
         print "for test--------------------------------", random.randint(0, 100)
         gevent.sleep(1)
示例#10
0
 def DeleteChunk(self, req):
     self.lvm.reload()
     ret = msg.DeleteChunk_Response()
     print "ChunkServer:  DeleteChunk"
     for a_guid in req.guids:
         str_guid = Guid.toStr(a_guid)
         lv_name = self.prefix_vol + str_guid
         lv_path = "/dev/" + self.vgname + "/" + lv_name
         output = self.lvm.lv_remove(lv_path)
         if output != None:
             ret.error = "Unable to delete chunk {0}:\n{1}".format(str_guid, output)
             break
         t = ret.guids.add()
         Guid.assign(t, a_guid)
     return ret
示例#11
0
 def NewChunk(self, req):
     self.lvm.reload()
     ret = msg.NewChunk_Response()
     size = str(req.size) + "M"
     for i in range(req.count):
         a_guid = Guid.generate()
         lv_name = self.prefix_vol + Guid.toStr(a_guid)
         lv_size = size
         output = self.lvm.lv_create(self.vgname, lv_name, lv_size)
         if output != None:
             ret.error = str(i) + ":" + output + " "
             break
         t = ret.guids.add()
         Guid.assign(t, a_guid)
     return ret
示例#12
0
	def NewChunk(self, req):
		self.lvm.reload()
		ret = msg.NewChunk_Response()
		size = str(req.size)+'M'
		for i in range(req.count):
			a_guid = Guid.generate()
			lv_name = self.prefix_vol+Guid.toStr(a_guid)
			lv_size = size
			output =  self.lvm.lv_create(self.vgname, lv_name, lv_size)
			if output!=None:
				ret.error = str(i) + ':' + output + ' '
				break
			t=ret.guids.add()
			Guid.assign(t, a_guid)
		return ret
示例#13
0
 def __ForwardNewChunk__(self, arg, target, aresponse):
     self.stub.socket.connect((target.ServiceAddress, target.ServicePort))
     ret0 = self.stub.callMethod('NewChunk', arg)
     self.stub.socket.close()
     if aresponse:
         for guid in ret0.guids:
             t = aresponse.guids.add()
             Guid.assign(t, guid)
         if ret0.error:
             t = [
                 group[0].guid, group[0].ServiceAddress,
                 group[0].ServicePort, ret0.error
             ]
             aresponse.error = "error from chunk server {0} @ ({1}:{2}):\n{3}".format(
                 *t)
     return ret0
示例#14
0
def object2message(object, message):
    import guid as Guid, messages_pb2 as msg
    d = object if isinstance(object, dict) else object.__dict__
    for key in d:
        if key.startswith('_'):
            continue
        value = d[key]
        if isinstance(value, list):
            mfield = getattr(message, key)
            appender = (lambda x : mfield.append(x)) if hasattr(mfield, 'append') \
               else (lambda x : object2message(x, mfield.add()))
            for item in value:
                appender(item)
        else:
            try:
                if key == 'guid':
                    value = Guid.fromStr(value)
                    Guid.assign(message.guid, value)
                else:
                    setattr(message, key, value)
            except:
                print 'exception occured'
                pass
示例#15
0
文件: util.py 项目: lihuiba/SoftSAN
def object2message(object, message):
	import guid as Guid, messages_pb2 as msg
	d = object if isinstance(object, dict) else object.__dict__
	for key in d:
		if key.startswith('_'):
			continue
		value=d[key]
		if isinstance(value, list):
			mfield=getattr(message, key)
			appender = (lambda x : mfield.append(x)) if hasattr(mfield, 'append') \
				  else (lambda x : object2message(x, mfield.add()))
			for item in value:
				appender(item)
		else:
			try:
				if key == 'guid':
					value=Guid.fromStr(value)
					Guid.assign(message.guid, value)
				else:
					setattr(message, key, value)
			except:
				print 'exception occured'
				pass
示例#16
0
def test():
	global PARAM
	logging.basicConfig(level=logging.DEBUG)
	socket=gevent.socket.socket()
	socket.connect((PARAM.MDS_IP, int(PARAM.MDS_PORT)))
	guid=msg.Guid()
	guid.a=10
	guid.b=22
	guid.c=30
	guid.d=40
	stub=rpc.RpcStub(guid, socket, mds.MDS)
	arg=msg.GetChunkServers_Request()
	ret=stub.callMethod('GetChunkServers', arg)

	s2=gevent.socket.socket()
	s2.connect((ret.random[0].ServiceAddress, ret.random[0].ServicePort))
	stub2=rpc.RpcStub(guid, s2, ChunkServer.ChunkServer)

	if raw_input('you want to NewChunk ? ')=='y':
		arg2=msg.NewChunk_Request()
		arg2.size=32		
		arg2.count=2
		ret2=stub2.callMethod('NewChunk', arg2)
		print ret2.guids

	if raw_input('you want to assembleVolume ? ')=='y':
		req_assemble = msg.AssembleVolume_Request()
		req_assemble.volume.size = 32
		Guid.assign(req_assemble.volume.guid,ret2.guids[-1])
		res_assemble = stub2.callMethod('AssembleVolume', req_assemble)
		print 'access_point:', res_assemble.access_point

	if raw_input('you want to DisassembleVolume ? ')=='y':
		req_disassemble = msg.DisassembleVolume_Request()
		req_disassemble.access_point = res_assemble.access_point
		print 'req_disassemble.access_point:', req_disassemble.access_point
		stub2.callMethod('DisassembleVolume', req_disassemble)

	if raw_input('you want to DeleteChunk ? ')=='y':
		arg3=msg.DeleteChunk_Request()
		t = arg3.guids.add()
		Guid.assign(t, ret2.guids[0])
		t = arg3.guids.add()
		Guid.assign(t, ret2.guids[1])
		ret_Del=stub2.callMethod('DeleteChunk', arg3)
示例#17
0
def test():
    global PARAM
    logging.basicConfig(level=logging.DEBUG)
    socket = gevent.socket.socket()
    socket.connect((PARAM.MDS_IP, int(PARAM.MDS_PORT)))
    guid = msg.Guid()
    guid.a = 10
    guid.b = 22
    guid.c = 30
    guid.d = 40
    stub = rpc.RpcStub(guid, socket, mds.MDS)
    arg = msg.GetChunkServers_Request()
    ret = stub.callMethod('GetChunkServers', arg)

    s2 = gevent.socket.socket()
    s2.connect((ret.random[0].ServiceAddress, ret.random[0].ServicePort))
    stub2 = rpc.RpcStub(guid, s2, ChunkServer.ChunkServer)

    if raw_input('you want to NewChunk ? ') == 'y':
        arg2 = msg.NewChunk_Request()
        arg2.size = 32
        arg2.count = 2
        ret2 = stub2.callMethod('NewChunk', arg2)
        print ret2.guids

    if raw_input('you want to assembleVolume ? ') == 'y':
        req_assemble = msg.AssembleVolume_Request()
        req_assemble.volume.size = 32
        Guid.assign(req_assemble.volume.guid, ret2.guids[-1])
        res_assemble = stub2.callMethod('AssembleVolume', req_assemble)
        print 'access_point:', res_assemble.access_point

    if raw_input('you want to DisassembleVolume ? ') == 'y':
        req_disassemble = msg.DisassembleVolume_Request()
        req_disassemble.access_point = res_assemble.access_point
        print 'req_disassemble.access_point:', req_disassemble.access_point
        stub2.callMethod('DisassembleVolume', req_disassemble)

    if raw_input('you want to DeleteChunk ? ') == 'y':
        arg3 = msg.DeleteChunk_Request()
        t = arg3.guids.add()
        Guid.assign(t, ret2.guids[0])
        t = arg3.guids.add()
        Guid.assign(t, ret2.guids[1])
        ret_Del = stub2.callMethod('DeleteChunk', arg3)