1. 27 Nov, 2015 3 commits
  2. 26 Nov, 2015 2 commits
  3. 25 Nov, 2015 4 commits
    • Rafael Monnerat's avatar
      agent has no recipe anymore. · cfbab038
      Rafael Monnerat authored
      cfbab038
    • Rafael Monnerat's avatar
    • Kirill Smelkov's avatar
      check-url: Quote $URL in -z check · c1ecf017
      Kirill Smelkov authored
      If one wants to check URLs on UNIX-sockets, there is no full URL schema
      in curl for this, but the following has to be used instead:
      
          curl --unix-socket /path/to/socket http:/<url-path>
      
      For this to work, one can do e.g. the following trick:
      
          [promise-unicorn]
          recipe  = slapos.cookbook:check_url_available
          url     = --unix-socket ${unicorn:socket}  http:/
      
      but then generated promise scripts fails this way:
      
          ./etc/promise/unicorn: line 7: [: too many arguments
      
      via quoting $URL in emptiness check we can support both usual URLs and
      urls with --unix-socket prepended trick.
      
      /reviewed-by @cedric.leninivin  (on !31)
      c1ecf017
    • Kirill Smelkov's avatar
      check-url: Allow to specify expected HTTP code · 35024175
      Kirill Smelkov authored
      In gitlab SR a service I need to check - gitlab-workhorse, returns 200
      only when request comes to some repository and authentication backend
      allows it.
      
      Requiring access to repositories is not very good just to check if the
      service is alive, and also auth backend can be not alive, and initially
      there are no repositories at all. So gitlab-workhorse is checked to be
      alive by pinging it with non-existing URL and expecting 403.
      
      For this to work we need to allow clients to specify expected HTTP code
      instead of previously hardcoded 200 (which still remains the default).
      
      /reviewed-by @cedric.leninivin  (on nexedi/slapos!31)
      35024175
  4. 24 Nov, 2015 2 commits
  5. 23 Nov, 2015 4 commits
  6. 19 Nov, 2015 1 commit
  7. 18 Nov, 2015 1 commit
  8. 17 Nov, 2015 1 commit
  9. 09 Nov, 2015 1 commit
  10. 06 Nov, 2015 8 commits
  11. 05 Nov, 2015 3 commits
  12. 04 Nov, 2015 4 commits
    • Kirill Smelkov's avatar
      slapos/recipe/redis: Add support for UNIX sockets · cbbfd405
      Kirill Smelkov authored
      It is well known that UNIX sockets are faster than TCP over loopback.
      
      E.g. on my machine according to lmbench[1] they have ~ 2 times
      lower latency and ~ 2-3 times more throughput compared to TCP over
      loopback:
      
          *Local* Communication latencies in microseconds - smaller is better
          ---------------------------------------------------------------------
          Host                 OS 2p/0K  Pipe AF     UDP  RPC/   TCP  RPC/ TCP
                                  ctxsw       UNIX         UDP         TCP conn
          --------- ------------- ----- ----- ---- ----- ----- ----- ----- ----
          teco      Linux 4.2.0-1  13.8  29.2 26.8  45.0  47.9  48.5  55.5  45.
      
          *Local* Communication bandwidths in MB/s - bigger is better
          -----------------------------------------------------------------------------
          Host                OS  Pipe AF    TCP  File   Mmap  Bcopy  Bcopy  Mem   Mem
                                       UNIX      reread reread (libc) (hand) read write
          --------- ------------- ---- ---- ---- ------ ------ ------ ------ ---- -----
          teco      Linux 4.2.0-1 1084 4353 1493 2329.1 3720.7 1613.8 1109.2 3402 1404.
      
      The same ratio holds for our std shuttle servers.
      
      API to work with unix sockets is essentially the same as with TCP/UDP.
      Because of that it is easy to support both TCP and UNIX socket in one
      software, and this way a lot of software support unix sockets out of the
      box, including Redis.
      
      Because of lower latencies and higher throughput, for performance
      reasons, it makes sense to interconnect services on one machine via unix
      sockets and talk via TCP only to outside world.
      
      Here we add support for unix sockets to Redis recipe.
      
      [1] http://www.bitmover.com/lmbench/
      
      /reviewed-by @kazuhiko  (on !27)
      /cc @alain.takoudjou, @jerome, @vpelletier
      cbbfd405
    • Kirill Smelkov's avatar
      slapos/recipe/redis/promise: Don't create connection pool explicitly · 442866bc
      Kirill Smelkov authored
      Because redis.Redis(...) ctor creates connection pool on initialization
      and we can rely on it.
      
      Another reason: Redis ctor (in form of StrictRedis.__init__()) has logic
      how to process arguments and does selecting - either it is TCP (`host` and
      `port` args), or UNIX socket (`unix_socket_path` arg):
      
          https://lab.nexedi.com/nexedi/slapos/blob/95dbb5b2/slapos/recipe/redis/MyRedis2410.py#L560
      
      Since we are going to introduce unix socket support to redis recipe in
      the next patch, and don't want to duplicate StrictRedis.__init__() logic
      in promise code, let's refactor promise to delegate argument processing
      logic to Redis.
      
      /reviewed-by @kazuhiko  (on !27)
      /cc @alain.takoudjou
      442866bc
    • Kirill Smelkov's avatar
      redis: v↑ (2.8.23) · 9b3cfff4
      Kirill Smelkov authored
      - update Redis software to latest upstream in 2.8.* series (which now
        supports IPv6 out of the box);
      
      - update Redis instance template to the one from 2.8.23 and re-merge our
        templating changes to it (file/dir locations, port and binding, master
        password).
      
        The whole diff to pristine 2.8.23 redis conf is now this:
      
        diff --git a/.../redis-2.8.23/redis.conf b/slapos/recipe/redis/template/redis.conf.in
        index 870959f..2895539 100644
        --- a/.../redis-2.8.23/redis.conf
        +++ b/slapos/recipe/redis/template/redis.conf.in
        @@ -46 +46 @@ daemonize no
        -pidfile /var/run/redis.pid
        +pidfile %(pid_file)s
        @@ -50 +50 @@ pidfile /var/run/redis.pid
        -port 6379
        +port %(port)s
        @@ -69,0 +70 @@ tcp-backlog 511
        +bind %(ipv6)s
        @@ -108 +109 @@ loglevel notice
        -logfile ""
        +logfile %(log_file)s
        @@ -174 +175 @@ rdbcompression yes
        -# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
        +# hit to pay (around 10%%) when saving and loading RDB files, so you can disable it
        @@ -192 +193 @@ dbfilename dump.rdb
        -dir ./
        +dir %(server_dir)s
        @@ -217 +218 @@ dir ./
        -# masterauth <master-password>
        +%(master_passwd)s
      
      NOTE There are test failures for almost all Redis versions when machine
      have not small amount of CPUs:
      
          https://github.com/antirez/redis/issues/2715#issuecomment-151608948
      
      Because the failure is in replication test, and so far we do not use
      replication, and there is no feedback from upstream author to handle
      this (for 7 days for my detailed report, and for ~ 3 months for this
      issue in general), we can just disable replication test as a temporary
      solution.  ( to handle remote patches with md5 hash easily the building
      recipe is changed to slapos.recipe.cmmi )
      
      NOTE Redis updated to 2.8 version because GitLab uses this series.
      If/when we need more recent one we can add [redis30] in addition to
      [redis28].
      
      /reviewed-by @kazuhiko  (on !27 and on !26)
      /cc @alain.takoudjou, @jerome
      9b3cfff4
    • Kirill Smelkov's avatar
      ruby: v↑ ruby2.1 (2.1.7) · e393ada8
      Kirill Smelkov authored
      Ruby 2.1.7 contain security and other bugfixes:
      
          https://www.ruby-lang.org/en/news/2015/08/18/ruby-2-1-7-released/
      
      /reviewed-by @kazuhiko  (on nexedi/slapos!28)
      e393ada8
  13. 03 Nov, 2015 6 commits
    • Kirill Smelkov's avatar
      helloworld & helloweb: Go version · 24e82414
      Kirill Smelkov authored
      We added support for Go in the previous patch. Let's now illustrate how
      to use the toolchain and build simple service based on it.
      
      /cc @gabriel, @Camata
      24e82414
    • Kirill Smelkov's avatar
      Go component · f7db20a7
      Kirill Smelkov authored
      Add support for Go language in the form of providing component for Go
      toolchain and stdlib.
      
      Current Go stable series is 1.5.* but to bootstrap it one need to have
      Go 1.4.* available, which itself needs C compiler to bootstrap.
      
      We need Go support for upcoming GitLab SR, where one server is written
      in this language:
      
          https://gitlab.com/gitlab-org/gitlab-workhorse
      
      /cc @gabriel, @Camata
      f7db20a7
    • Kirill Smelkov's avatar
      helloworld & helloweb: Ruby version · 31a45a94
      Kirill Smelkov authored
      To illustrate how to build Ruby software, let's add helloweb-ruby
      component and integrate it into helloworld SR as a service.
      
      helloweb-ruby installation is a bit tricky, because we do not have it
      initially as a released gem, and have to build it with Bundler by hand.
      
      Changes for integration into helloworld services infrastructure are
      small, thanks for the "kind" rework we did in previous patch.
      
      /cc @kazuhiko
      31a45a94
    • Kirill Smelkov's avatar
      helloworld & helloweb: Prepare to show different kinds of helloweb to the world · 2b6c1e47
      Kirill Smelkov authored
      Prepare to have several helloweb programs each written in its own
      language, and installed into bin/ as helloworld-<language> and exposed
      as separate service to the web on its own port.
      
      For component/helloweb we just rename installed script and section.
      
      For software/helloworld we split helloweb & helloweb-promise section
      into base and generate requested helloweb-<kinds> & friends via jinja2
      programming; the same for exposing url for each kind.
      
      So far it is only preparatory changes for new kinds - i.e. instance code
      now supports it, but the only kind so far is still python.
      
      /cc @jerome
      2b6c1e47
    • Kirill Smelkov's avatar
      helloworld: Convert instance.cfg.in to jinja2 · eb270605
      Kirill Smelkov authored
      Jinja2 is currently the preferred way to do instance templating, because
      it has control structures.
      
      We'll need control structures in the following patches, but even without
      it, it is better to show "how to" do instances the preferred way.
      
      /cc @jerome
      eb270605
    • Kirill Smelkov's avatar
      helloworld: Move helloweb program to component/helloweb · e3a11eaa
      Kirill Smelkov authored
      This
      
      - better illustrates what components do (provide building recipes for
        programs) and what software do (gather components and provide recipes
        for instances).
      
      - illustrates how to build the software properly - usually we build
        eggs or scripts with zc.recipe.egg:* , not generate python programs via
        jinja2 templating. Because when installing via egg, it is possible to
        import other installed eggs relatively straghtforward, and for jinja2
        way it is hard to do.
      
      The helloweb program itself is moved into newly introduced helloweb.git
      repository and, as almost all other software, becomes separate from
      slapos.git .
      
      /cc @jerome
      e3a11eaa