Method: LS4::DataServerService#rpc_replicate_pull

Defined in:
lib/ls4/service/data_server.rb

#rpc_replicate_pull(pos, limit) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/ls4/service/data_server.rb', line 82

def rpc_replicate_pull(pos, limit)
	mkeys = []
	msgs = []
	msize = 0
	while true
		raw, npos = UpdateLogBus.get(pos)
		unless raw
			break
		end
		d = UpdateLogData.load(raw)
		# set or delete
		if mkeys.include?(d.key)
			pos = npos
		else
			if d.offset && d.size
				data = StorageBus.read(d.vtime, d.key, d.offset, d.size)
			else
				data = StorageBus.get(d.vtime, d.key)
				mkeys << d.key
			end
			# data may be null => deleted
			if data
				msgs << [d.vtime, d.key, d.offset, data]
				msize += data.size
			else
				# data is deleted
				msgs << [d.vtime, d.key, 0, nil]
			end
			pos = npos
			break if msize > limit
		end
	end
	[pos, msgs]
end