arcus-java-client
arcus-java-client copied to clipboard
FEATURE: Add CompletableFuture Pipeline API
๐ Related Issue
- Pipeline API๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ฌ์ฉ ๋ฐฉ๋ฒ
- Pipeline ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํ๋์ ํ์ดํ๋ผ์ธ์ผ๋ก ํฌํจํ ๋ช ๋ น๋ค์ ์กฐํฉํ๋ค.
- ํ์ดํ๋ผ์ธ์ ํฌํจํ ์ ์๋ ๋ช ๋ น๋ค์ ์ ํํ ์ ์๋ค. (๋ช ๋ น์ด์ ์ข ๋ฅ, ๊ฐ์)
- ๋ช ๋ น์ด์ ๊ฐ์๋ ์ต๋ 500๊ฐ๋ก ์ ํํ๋ค. ์ด๋ฅผ ํตํด ํ ๋ ธ๋์๋ ์ต๋ ํ๋์ ํ์ดํ๋ผ์ธ์ด ๋ณด๋ด์ง๋ค.
- AsyncArcusCommands ๊ฐ์ฒด ์ ์ญ์ ์ผ๋ก flush ์ฌ๋ถ๋ฅผ ์ค์ ํ์ง ์์ผ๋ฏ๋ก ์ธ๋ฐํ๊ฒ ํ์ดํ๋ผ์ธ์ ํฌํจํ ๋ช ๋ น์ ์ง์ ํ ์ ์๋ค.
public class Pipeline<V> { // ๋ค์ํ ๋ช ๋ น์ ํฌํจํ ์ ์๋ PipelineOperationImpl ํ์ ์ value์ ์ ์ฅํ๋ค. private Map<MemcachedNode, Operation> ops; public Pipeline() { // ... } public Pipeline<V> lopInsert(String key, int index, V value) { // ... return this; } public Pipeline<V> mopInsert(String key, String mkey, V value) { // ... return this; } // ... }- ๋ช ๋ น์ ์กฐํฉ ์์๋๋ก ํ์ดํ๋ผ์ธ์ด ๋ง๋ค์ด์ง์ง๋ง, ์๋ฒ์์ ์ฒ๋ฆฌ ๋์ค ๋ค๋ฅธ ์ฐ์ฐ์ด ๋ผ์ด๋ค ์ ์๋ค.
- ์๋ก ๋ค๋ฅธ ์ฌ๋ฌ ํค๋ฅผ ํ์ดํ๋ผ์ธ์ ํฌํจํ๋ ๊ฒฝ์ฐ, ๊ฐ ๋ ธ๋ ๋ณ๋ก ํ์ดํ๋ผ์ธ์ด ์์ฑ๋์ด ๋ ธ๋์ ์ ๋ฌ๋๋ค.
- Pipeline ๊ฐ์ฒด๋ฅผ execute ๋ฉ์๋์ ๋๊ฒจ์ผ ํ์ดํ๋ผ์ธ์ด ์ํ๋๋ฉฐ,
List<Object>์ ๊ฐ ๋ช ๋ น์ ๋ํ ์๋ต์ด ๋ด๊ธด๋ค.
ArcusFuture<List<Object>> execute(Pipeline<T> pipeline)
โจ๏ธ What I did
- ์์ธ ์ฒ๋ฆฌ
- ๋ชจ๋ ์๋ต์ด ์ฌ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ์ฌ๋ฌ ์์ฒญ์์ ๋ฐ์ํ ์คํจ/์๋ฌ๋ค์ ํ๋์ CompositeException ํ์ ์ผ๋ก ๋ชจ์ ๋์ง๋ค.
- switchover ์ฒ๋ฆฌ
- responseIndex๋ฅผ ์ฌ์ฉํ์ฌ ์์ง ์๋ต์ด ์ค์ง ์์ operation๋ค๋ง ์๋ก์ด master ๋ ธ๋์์ initializeํ ๋ ํฌํจ๋๋๋ก ํ๋ค.
- migration ์ฒ๋ฆฌ
- gotStatus ๋ฉ์๋์ ์ธ์๋ก Operation์ ๋ฐ์, ์ฌ๋ฌ Operation์ผ๋ก ๋ถ๋ฆฌ๋๋๋ผ๋ ์๋ณธ ์ฝ๋ฐฑ์์ ์๋ณธ index์ ๊ฐ์ ์ถ๊ฐํ ์ ์๋๋ก ํ๋ค.