arcus-java-client icon indicating copy to clipboard operation
arcus-java-client copied to clipboard

FEATURE: Add CompletableFuture Pipeline API

Open oliviarla opened this issue 1 month ago โ€ข 0 comments

๐Ÿ”— 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์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

oliviarla avatar Dec 23 '25 04:12 oliviarla