 
 
 	prefetchRegionCache: (table, cb) =>
-		return cb() if @prefetchRegionCacheList[table] or utils.bufferCompare(table, hconstants.META_TABLE_NAME) is 0
+		return cb() if @_prefetchRegionCacheList[table] or utils.bufferCompare(table, hconstants.META_TABLE_NAME) is 0
 		debug "prefetchRegionCache for table: #{table}"
 
+		prefetchEvent = "prefetch-#{table}"
+		return @_prefetchRegionCacheListInProgress[prefetchEvent].push cb if @_prefetchRegionCacheListInProgress[prefetchEvent]
+
+		@once prefetchEvent, () =>
+			loop
+				callback = @_prefetchRegionCacheListInProgress[prefetchEvent].pop()
+				return unless callback
+				callback()
+
+		@_prefetchRegionCacheListInProgress[prefetchEvent] = []
 		startRow = @createRegionName table, null, hconstants.ZEROS, no
 		stopRow = @createRegionName utils.bufferIncrement(table), null, hconstants.ZEROS, no
 

				return done err if err

				unless regionRow.row
					@prefetchRegionCacheList[table] = yes
					work = no
					return done()

				region = @_parseRegionInfo regionRow
				@cacheLocation table, region if region
				done()
		, (err) ->
			console.log err if err
			cb()




	ensureZookeeperTrackers: (cb) =>
		return cb() if @zkStart is "done"
		@_zkStartListener.push cb
		return if @zkStart is "starting"
		@zkStart = "starting"

		@once 'ready', () ->
			loop
				callback = @_zkStartListener.pop()
				return unless callback
				callback()

		@zk.once "connected", (err) =>
			if err
