Skip to content

Latest commit

ย 

History

History
103 lines (84 loc) ยท 5.05 KB

File metadata and controls

103 lines (84 loc) ยท 5.05 KB

10. Future API ์„ค๋ช…

get, getSome

Arcus java client๋Š” ๋น„๋™๊ธฐ ์—ฐ์‚ฐ์— ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ Future๋ฅผ ๊ตฌํ˜„ํ•œ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ์ด ๊ตฌํ˜„์ฒด๋“ค์„ ์ด์šฉํ•ด ๋‹จ์ˆœํžˆ ๋น„๋™๊ธฐ ์—ฐ์‚ฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ ๋ฐ›๋Š” ๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ์ค‘์— get()๊ณผ getSome() API๋ฅผ ํ†ตํ•ด ์—ฐ์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ์ด๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž

get

์ผ๋ฐ˜์ ์ธ Future์˜ get()์€ timeout ์—†์ด ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜์—ฌ ์—ฐ์‚ฐ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด์™€ ๋‹ค๋ฅด๊ฒŒ Arcus java client์—์„œ๋Š” default timeout์ด ์„ค์ •๋˜์–ด ์žˆ์–ด์„œ, ์„ค์ •๋œ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๊ทธ๋™์•ˆ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋Š” ๋ชจ๋‘ ๋ฒ„๋ ค์ง€๊ณ  OperationTimeoutException๊ณผ ํ•จ๊ป˜ null์ด ๋ฐ˜ํ™˜๋œ๋‹ค. (all or nothing)

V get()
V get(long timeout, TimeUnit unit)
  • get()์€ default timeout์ธ 700ms ๋งŒํผ ๋Œ€๊ธฐํ•œ๋‹ค. ๋Œ€๊ธฐํ•œ 700ms ์‹œ๊ฐ„ ์•ˆ์— ์‘๋‹ต์ด ์—†์œผ๋ฉด, OperationTimeoutException์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • get(long timeout, TimeUnit unit) ๋ฉ”์†Œ๋“œ๋Š” get() ๋ฉ”์†Œ๋“œ์˜ ๋™์ž‘๊ณผ ๋™์ผํ•˜์ง€๋งŒ, timeout ์‹œ๊ฐ„์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • get() ์—ฐ์‚ฐ์˜ default timeout์€ ConnectionFactoryBuilder์˜ setOpTimeout() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฐ์‚ฐ ์ž‘์—… ์ฒ˜๋ฆฌ ๋„์ค‘ ํ•ด๋‹น ์—ฐ์‚ฐ ์ž‘์—…์ด ์ธํ„ฐ๋ŸฝํŠธ ๋˜๋ฉด InterruptedException์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • ์—ฐ์‚ฐ ์ž‘์—… ์ฒ˜๋ฆฌ ๋„์ค‘ ์œ„์™€ ์–ธ๊ธ‰ํ•œ ์˜ˆ์™ธ ์ด์™ธ์— ๋‹ค๋ฅธ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ExecutionException์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

getSome

asyncGetBulk(), asyncGetsBulk() API ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ฐ˜ํ™˜๋ฐ›๋Š” BulkGetFuture์—์„œ๋Š” getSome() API๋ฅผ ์ง€์›ํ•œ๋‹ค.
์ด API๋Š” timeout์ด ๋ฐœ์ƒํ•˜๋ฉด get() API์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ทธ ์‹œ์ ๊นŒ์ง€ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค (partial). ๋”ฐ๋ผ์„œ, ์‘์šฉ์—์„œ๋Š” ๋ฐ˜ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๋ฆฌ์†Œ์Šค์˜ ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

V getSome(long timeout, TimeUnit unit)

์•„๋ž˜ ์ฝ”๋“œ๋Š” get()๊ณผ getSome()์„ ์‹คํ–‰ํ•œ ์˜ˆ์ œ์ฝ”๋“œ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด get()๊ณผ getSome() ์ฐจ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. get()์€ ์ง€์ •ํ•œ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด TimeoutException์„, getSome()์€ ์ง€์ • ์‹œ๊ฐ„๋™์•ˆ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค.

List<String> keyList = new ArrayList<String>();
for(int i = 1; i < 300; i++) {
  client.set("key" + i, 5 * 60, "value");
  keyList.add("key"+i);
}

Map<String, Object> map = null;
BulkFuture<Map<String, Object>> future = client.asyncGetBulk(keyList);

try {
  map = future.get(6, TimeUnit.MILLISECONDS);
} catch (ExecutionException e) {
  e.printStackTrace();
} catch (TimeoutException e) {
  e.printStackTrace();
}

System.out.println(map);

Map<String, Object> map2 = null;
BulkFuture<Map<String, Object>> future2 = client.asyncGetBulk(keyList);
try {
  map2 = future2.getSome(6, TimeUnit.MILLISECONDS);
} catch (ExecutionException e) {
  e.printStackTrace();
}

System.out.println(map2);

ํ•ด๋‹น ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

# get()
null

# getSome()
{
key118=value, key117=value, key114=value, key234=value, key113=value, key237=value, key115=value, key231=value, key230=value,
key42=value, key111=value, key199=value, key232=value, key37=value, key36=value, key35=value, key34=value, key190=value, 
key38=value, key191=value, key129=value, key128=value, key249=value, key51=value, key125=value, key124=value, key245=value, 
key248=value, key126=value, key247=value, key55=value, key121=value, key242=value, key54=value, key53=value, key243=value,
key47=value, key46=value, key217=value, key216=value, key219=value, key62=value, key61=value, key179=value, key60=value, 
key215=value, key297=value, key65=value, key175=value, key211=value, key299=value, key177=value, key58=value, key171=value, 
key292=value, key174=value, key295=value, key56=value, key170=value, key107=value, key228=value, key106=value, key109=value, 
key103=value, key224=value, key102=value, key71=value, key105=value, key226=value, key225=value, key187=value, key76=value, 
key189=value, key74=value, key100=value, key221=value, key183=value, key68=value, key185=value, key67=value, key180=value
}
  • get()์€ timeout์— ์˜ํ•ด null์„ ๋ฐ˜ํ™˜ํ•˜์˜€๋‹ค. (all or nothing)
  • getSome()์€ timeout ์‹œ์ ๊นŒ์ง€ ์กฐํšŒ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์˜€๋‹ค. (partial)

getStatus, getOperationStatus

Arcus java client์˜ Future ๊ตฌํ˜„์ฒด๋“ค ์ค‘ getStatus() ๋˜๋Š” getOperationStatus() API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด API๋“ค์€ ์—ฐ์‚ฐ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” API์ด๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์œผ๋ฉด ์„ฑ๊ณต ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ Future๋ฅผ ํ†ตํ•ด ๋ช…๋ น์„ cancel ์‹œํ‚ค๊ฑฐ๋‚˜ ๋‚ด๋ถ€์ ์œผ๋กœ cancel ๋œ ๊ฒฝ์šฐ CANCELED ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ •๋ณด๋Š” ์ถ”ํ›„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ด ์™€์„œ ์‘๋‹ต์„ ์ฝ์—ˆ์„ ๋•Œ ๋ฎ์–ด์“ฐ์—ฌ์งˆ ์ˆ˜ ์žˆ๋‹ค.

OperationStatus getStatus()
CollectionOperationStatus getOperationStatus()