litestack 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/BENCHMARKS.md +1 -1
 - data/CHANGELOG.md +15 -0
 - data/README.md +4 -4
 - data/bench/bench.rb +3 -3
 - data/bench/bench_cache_raw.rb +10 -5
 - data/bench/bench_jobs_rails.rb +20 -14
 - data/bench/bench_jobs_raw.rb +26 -12
 - data/bench/skjob.rb +5 -3
 - data/bench/uljob.rb +5 -4
 - data/lib/active_job/queue_adapters/litejob_adapter.rb +7 -3
 - data/lib/active_record/connection_adapters/litedb_adapter.rb +1 -1
 - data/lib/litestack/litejob.rb +18 -13
 - data/lib/litestack/litejobqueue.rb +132 -29
 - data/lib/litestack/litequeue.rb +14 -4
 - data/lib/litestack/litesupport.rb +32 -8
 - data/lib/litestack/version.rb +1 -1
 - data/lib/sequel/adapters/shared/litedb.rb +1054 -0
 - metadata +3 -3
 - data/lib/active_support/cache/ultralite_cache_store.rb +0 -100
 
    
        data/lib/litestack/litequeue.rb
    CHANGED
    
    | 
         @@ -52,8 +52,11 @@ class Litequeue 
     | 
|
| 
       52 
52 
     | 
    
         
             
              alias_method :"<<", :push
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
              # pop an item from the queue, optionally with a specific queue name (default queue name is 'default')
         
     | 
| 
       55 
     | 
    
         
            -
              def pop(queue='default')
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
      
 55 
     | 
    
         
            +
              def pop(queue='default', limit = 1)
         
     | 
| 
      
 56 
     | 
    
         
            +
               res = @queue.acquire {|q| res = q.stmts[:pop].execute!(queue, limit) }
         
     | 
| 
      
 57 
     | 
    
         
            +
               return res[0] if res.length == 1
         
     | 
| 
      
 58 
     | 
    
         
            +
               return nil if res.empty?
         
     | 
| 
      
 59 
     | 
    
         
            +
               res
         
     | 
| 
       57 
60 
     | 
    
         
             
              end
         
     | 
| 
       58 
61 
     | 
    
         | 
| 
       59 
62 
     | 
    
         
             
              # delete an item from the queue
         
     | 
| 
         @@ -62,7 +65,7 @@ class Litequeue 
     | 
|
| 
       62 
65 
     | 
    
         
             
              #   queue.delete(id) # => "somevalue"
         
     | 
| 
       63 
66 
     | 
    
         
             
              #   queue.pop # => nil
         
     | 
| 
       64 
67 
     | 
    
         
             
              def delete(id, queue='default')
         
     | 
| 
       65 
     | 
    
         
            -
                fire_at, id = id.split(" 
     | 
| 
      
 68 
     | 
    
         
            +
                fire_at, id = id.split("-")
         
     | 
| 
       66 
69 
     | 
    
         
             
                result = @queue.acquire{|q| q.stmts[:delete].execute!(queue, fire_at.to_i, id)[0] } 
         
     | 
| 
       67 
70 
     | 
    
         
             
              end
         
     | 
| 
       68 
71 
     | 
    
         | 
| 
         @@ -80,6 +83,13 @@ class Litequeue 
     | 
|
| 
       80 
83 
     | 
    
         
             
              def size
         
     | 
| 
       81 
84 
     | 
    
         
             
                @queue.acquire{|q| q.get_first_value("SELECT size.page_size * count.page_count FROM pragma_page_size() AS size, pragma_page_count() AS count") }
         
     | 
| 
       82 
85 
     | 
    
         
             
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
              
         
     | 
| 
      
 87 
     | 
    
         
            +
              def close
         
     | 
| 
      
 88 
     | 
    
         
            +
                @queue.acquire do |q| 
         
     | 
| 
      
 89 
     | 
    
         
            +
                  q.stmts.each_pair {|k, v| q.stmts[k].close }
         
     | 
| 
      
 90 
     | 
    
         
            +
                  q.close
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
              end
         
     | 
| 
       83 
93 
     | 
    
         | 
| 
       84 
94 
     | 
    
         
             
              private  
         
     | 
| 
       85 
95 
     | 
    
         | 
| 
         @@ -90,7 +100,7 @@ class Litequeue 
     | 
|
| 
       90 
100 
     | 
    
         
             
                db.mmap_size = @options[:mmap_size]
         
     | 
| 
       91 
101 
     | 
    
         
             
                db.execute("CREATE TABLE IF NOT EXISTS _ul_queue_(queue TEXT DEFAULT('default') NOT NULL ON CONFLICT REPLACE, fire_at INTEGER DEFAULT(unixepoch()) NOT NULL ON CONFLICT REPLACE, id TEXT DEFAULT(hex(randomblob(8)) || (strftime('%f') * 100)) NOT NULL ON CONFLICT REPLACE, value TEXT, created_at INTEGER DEFAULT(unixepoch()) NOT NULL ON CONFLICT REPLACE, PRIMARY KEY(queue, fire_at ASC, id) ) WITHOUT ROWID")
         
     | 
| 
       92 
102 
     | 
    
         
             
                db.stmts[:push] = db.prepare("INSERT INTO _ul_queue_(queue, fire_at, value) VALUES ($1, (strftime('%s') + $2), $3) RETURNING fire_at || '-' || id")
         
     | 
| 
       93 
     | 
    
         
            -
                db.stmts[:pop] = db.prepare("DELETE FROM _ul_queue_ WHERE (queue, fire_at, id)  
     | 
| 
      
 103 
     | 
    
         
            +
                db.stmts[:pop] = db.prepare("DELETE FROM _ul_queue_ WHERE (queue, fire_at, id) IN (SELECT queue, fire_at, id FROM _ul_queue_ WHERE queue = ifnull($1, 'default') AND fire_at <= (unixepoch()) ORDER BY fire_at ASC LIMIT ifnull($2, 1)) RETURNING fire_at || '-' || id, value")
         
     | 
| 
       94 
104 
     | 
    
         
             
                db.stmts[:delete] = db.prepare("DELETE FROM _ul_queue_ WHERE queue = ifnull($1, 'default') AND fire_at = $2 AND id = $3 RETURNING value")
         
     | 
| 
       95 
105 
     | 
    
         
             
                db
         
     | 
| 
       96 
106 
     | 
    
         
             
              end
         
     | 
| 
         @@ -11,6 +11,11 @@ module Litesupport 
     | 
|
| 
       11 
11 
     | 
    
         
             
                @env ||= detect_environment
         
     | 
| 
       12 
12 
     | 
    
         
             
              end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
      
 14 
     | 
    
         
            +
              def self.max_contexts
         
     | 
| 
      
 15 
     | 
    
         
            +
                return 50 if environment == :fiber || environment == :polyphony
         
     | 
| 
      
 16 
     | 
    
         
            +
                5    
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
                
         
     | 
| 
       14 
19 
     | 
    
         
             
              # identify which environment we are running in
         
     | 
| 
       15 
20 
     | 
    
         
             
              # we currently support :fiber, :polyphony, :iodine & :threaded
         
     | 
| 
       16 
21 
     | 
    
         
             
              # in the future we might want to expand to other environments
         
     | 
| 
         @@ -32,8 +37,8 @@ module Litesupport 
     | 
|
| 
       32 
37 
     | 
    
         
             
                end
         
     | 
| 
       33 
38 
     | 
    
         
             
                # we should never reach here
         
     | 
| 
       34 
39 
     | 
    
         
             
              end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
              def self. 
     | 
| 
      
 40 
     | 
    
         
            +
                
         
     | 
| 
      
 41 
     | 
    
         
            +
              def self.context
         
     | 
| 
       37 
42 
     | 
    
         
             
                if environment == :fiber || environment == :poylphony
         
     | 
| 
       38 
43 
     | 
    
         
             
                  Fiber.current.storage
         
     | 
| 
       39 
44 
     | 
    
         
             
                else
         
     | 
| 
         @@ -41,8 +46,12 @@ module Litesupport 
     | 
|
| 
       41 
46 
     | 
    
         
             
                end
         
     | 
| 
       42 
47 
     | 
    
         
             
              end
         
     | 
| 
       43 
48 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
              def self. 
     | 
| 
       45 
     | 
    
         
            -
                 
     | 
| 
      
 49 
     | 
    
         
            +
              def self.current_context
         
     | 
| 
      
 50 
     | 
    
         
            +
                if environment == :fiber || environment == :poylphony
         
     | 
| 
      
 51 
     | 
    
         
            +
                  Fiber.current
         
     | 
| 
      
 52 
     | 
    
         
            +
                else
         
     | 
| 
      
 53 
     | 
    
         
            +
                  Thread.current
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
       46 
55 
     | 
    
         
             
              end
         
     | 
| 
       47 
56 
     | 
    
         | 
| 
       48 
57 
     | 
    
         
             
              # switch the execution context to allow others to run
         
     | 
| 
         @@ -55,7 +64,7 @@ module Litesupport 
     | 
|
| 
       55 
64 
     | 
    
         
             
                  Thread.current.switch_fiber
         
     | 
| 
       56 
65 
     | 
    
         
             
                  true
         
     | 
| 
       57 
66 
     | 
    
         
             
                else
         
     | 
| 
       58 
     | 
    
         
            -
                  # 
     | 
| 
      
 67 
     | 
    
         
            +
                  #Thread.pass
         
     | 
| 
       59 
68 
     | 
    
         
             
                  false
         
     | 
| 
       60 
69 
     | 
    
         
             
                end   
         
     | 
| 
       61 
70 
     | 
    
         
             
              end
         
     | 
| 
         @@ -105,6 +114,21 @@ module Litesupport 
     | 
|
| 
       105 
114 
     | 
    
         
             
                end
         
     | 
| 
       106 
115 
     | 
    
         | 
| 
       107 
116 
     | 
    
         
             
              end
         
     | 
| 
      
 117 
     | 
    
         
            +
               
         
     | 
| 
      
 118 
     | 
    
         
            +
              module Forkable
         
     | 
| 
      
 119 
     | 
    
         
            +
                
         
     | 
| 
      
 120 
     | 
    
         
            +
                def _fork(*args)
         
     | 
| 
      
 121 
     | 
    
         
            +
                  ppid = Process.pid
         
     | 
| 
      
 122 
     | 
    
         
            +
                  result = super      
         
     | 
| 
      
 123 
     | 
    
         
            +
                  if Process.pid != ppid
         
     | 
| 
      
 124 
     | 
    
         
            +
                    # trigger a restart of all connections owned by Litesupport::Pool
         
     | 
| 
      
 125 
     | 
    
         
            +
                  end
         
     | 
| 
      
 126 
     | 
    
         
            +
                  result
         
     | 
| 
      
 127 
     | 
    
         
            +
                end
         
     | 
| 
      
 128 
     | 
    
         
            +
                
         
     | 
| 
      
 129 
     | 
    
         
            +
              end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
              #::Process.singleton_class.prepend(::Litesupport::Forkable)
         
     | 
| 
       108 
132 
     | 
    
         | 
| 
       109 
133 
     | 
    
         
             
              class Pool
         
     | 
| 
       110 
134 
     | 
    
         | 
| 
         @@ -120,11 +144,12 @@ module Litesupport 
     | 
|
| 
       120 
144 
     | 
    
         
             
                end
         
     | 
| 
       121 
145 
     | 
    
         | 
| 
       122 
146 
     | 
    
         
             
                def acquire
         
     | 
| 
      
 147 
     | 
    
         
            +
                  # check for pid changes
         
     | 
| 
       123 
148 
     | 
    
         
             
                  acquired = false
         
     | 
| 
       124 
149 
     | 
    
         
             
                  result = nil
         
     | 
| 
       125 
150 
     | 
    
         
             
                  while !acquired do
         
     | 
| 
       126 
151 
     | 
    
         
             
                    @mutex.synchronize do
         
     | 
| 
       127 
     | 
    
         
            -
                      if resource = @resources.find{|r| r[1] == :free}
         
     | 
| 
      
 152 
     | 
    
         
            +
                      if resource = @resources.find{|r| r[1] == :free }
         
     | 
| 
       128 
153 
     | 
    
         
             
                        resource[1] = :busy
         
     | 
| 
       129 
154 
     | 
    
         
             
                        begin
         
     | 
| 
       130 
155 
     | 
    
         
             
                          result = yield resource[0]
         
     | 
| 
         @@ -133,11 +158,10 @@ module Litesupport 
     | 
|
| 
       133 
158 
     | 
    
         
             
                        ensure
         
     | 
| 
       134 
159 
     | 
    
         
             
                          resource[1] = :free
         
     | 
| 
       135 
160 
     | 
    
         
             
                          acquired = true
         
     | 
| 
       136 
     | 
    
         
            -
                          return nil              
         
     | 
| 
       137 
161 
     | 
    
         
             
                        end
         
     | 
| 
       138 
162 
     | 
    
         
             
                      end
         
     | 
| 
       139 
163 
     | 
    
         
             
                    end
         
     | 
| 
       140 
     | 
    
         
            -
                    sleep 0. 
     | 
| 
      
 164 
     | 
    
         
            +
                    sleep 0.001 unless acquired
         
     | 
| 
       141 
165 
     | 
    
         
             
                  end
         
     | 
| 
       142 
166 
     | 
    
         
             
                  result
         
     | 
| 
       143 
167 
     | 
    
         
             
                end
         
     | 
    
        data/lib/litestack/version.rb
    CHANGED