Skip to content
Snippets Groups Projects
  1. Apr 20, 2020
  2. Apr 16, 2020
    • Serge Petrenko's avatar
      relay: move relay_schedule_pending_gc before status update · a1386759
      Serge Petrenko authored
      relay_schedule_pending_gc() is executed after relay status update,
      which made perfect sense before we've introduced local spaces rework, making
      local space operations use a special instance id: 0.
      Relay status update is performed only when the remote instance has
      reported a bigger vclock, than its previous one. However, we may have an
      entire WAL file filled with local space changes, in which case the
      changes won't be transmitted to replica, and it will report the same
      vclock as before, postponing the scheduled gc until a non-local row is
      created on master.
      
      Fix this by reordering relay_schedule_pending_gc() and relay status
      update. In case nothing new is added to pending_gc queue and replica
      clock is not updated, relay_schedule_pending_gc() will exit on the first
      loop iteration, so it doesn't add an overhead.
      
      Also make relay_schedule_pending_gc() use vclock_compare_ignore0() instead
      of plain vclock_compare().
      
      Follow-up #4114
      
      (cherry picked from commit e7ffddce)
      a1386759
    • Serge Petrenko's avatar
      box: start counting local space requests separately · cc6e7b34
      Serge Petrenko authored
      Sign local space requests with a zero instance id. This allows to split
      local changes aside from the changes, which should be visible to the whole
      cluster, and stop sending NOPs to replicas to follow local vclock.
      
      Moreover, it fixes the following bug with local spaces and replication.
      In a situation when there are a master and a replica set up, replica may
      still write to local spaces even if it's read-only. Local space
      operations used to promote instance's lsn before this patch. Eventually,
      master would have vclock {1:x} and replica'd have vclock {1:x, 2:y},
      where y > 0, due to local space requests performed by the replica.
      If a snapshot happens on replica side, replica will delete it's .xlog
      files prior to the snapshot, since no one replicates from it and thus it
      doesn't have any registered GC consumers.
      From this point, every attempt to configure replication from replica to
      master will fail, since master will try to fetch records which account
      for the difference in master's and replica's vclocks: {1:x} vs {1:x,2:y},
      even though master will never need the rows in range {2:1} - {2:y},
      since they'll be turned to NOPs during replication.
      
      Starting from this patch, in the situation described above, replica's
      clock will be {0:y, 1:x}, and, since local space requests are now not
      replicated at all, master will be able to follow replica, turning the
      configuration to master-master.
      
      Closes #4114
      
      (cherry picked from commit 7eb4650e)
      cc6e7b34
    • Serge Petrenko's avatar
      gc: rely on minimal vclock components instead of signatures · efee6cf0
      Serge Petrenko authored
      The current WAL GC implementation tracks consumers (i.e. remote replicas) by
      their vclock signature, which is the sum of all vclock components.
      This approach is wrong, and this can be shown by a little example.
      The example will be a little synthetic, but it'll illustrate the problem.
      Say, you have 2 masters, A and B with ids 1 and 2 respectively, and a replica C
      with id 3. Say, С replicates from both A and B, and there is no replication
      between A and B (say, the instances were reconfigured to not replicate from each
      other). Now, say replica C has followed A and B to vclock {1:5, 2:13}. At the
      same time, A has lsn 10 and B has lsn 15. A and B do not know about each other’s
      changes, so A’s vclock is {1:10} and B’s vclock is {2:15}. Now imagine A does a
      snapshot and creates a new xlog with signature 10. A’s directory will look like:
      00…000.xlog 00…010.snap 00….010.xlog
      Replica C reports its vclock {1:5, 2:13} to A, A uses the vclock to update the
      corresponding GC consumer. Since signatures are used, GC consumer is assigned a
      signature = 13 + 5 = 18. This is greater than the signature of the last xlog on
      A (which is 10), so the previous xlog (00…00.xlog) can be deleted (at least A
      assumes it can be). Actually, replica still needs 00…00.xlog, because it
      contains rows corresponding to vclocks {1:6} - {1:10}, which haven’t been
      replicated yet.
      
      If instead of using vclock signatures, gc consumers used vclocks, such a problem
      wouldn’t arise. Replica would report its vclock {1:5, 2:13}. The vclock is NOT
      strictly greater than A’s most recent xlog vclock ({1:10}), so the previous log
      is kept until replica reports a vclock {1:10, 2:something} or {1:11, …} and so
      on.
      
      Rewrite gc to perform cleanup based on finding minimal vclock
      components present in at least one of the consumer vclocks instead of
      just comparing vclock signatures.
      
      Prerequisite #4114
      
      (cherry picked from commit 11804b46)
      efee6cf0
    • sergepetrenko's avatar
      vclock: ignore 0th component in comparisons · 00eac4c3
      sergepetrenko authored
      0th vclock component will be used to count replica-local rows.
      These rows won't be replicated and different instances will have different
      values in vclock[0].
      
      Add a function vclock_compare_ingore0, which doesn't order vclocks by 0
      component and use it where appropriate.
      
      Part of #4114
      
      (cherry picked from commit 1a2037b1)
      00eac4c3
    • Serge Petrenko's avatar
      replication: omit 0-th vclock component in replication responses · 9004cb5a
      Serge Petrenko authored
      When local space requests will be signed with 0 instance id, every
      instance writing to local spaces will have its own 0th vclock component.
      In order to not pollute other instances 0th vclock components, we have
      to omit it in replication responses.
      
      In order to do so, introduce a new function - vclock_size_ignore0(),
      which doesn't count 0th clock component, and patch xrow_encode_vclock()
      to skip 0th clock component if it's present.
      
      Prerequisite #4114
      
      (cherry picked from commit 93ae77fc)
      9004cb5a
    • Mergen Imeev's avatar
      sql: do not change order of inserted values · 7db7c6ff
      Mergen Imeev authored
      Before this patch, if an ephemeral space was used during INSERT or
      REPLACE, the inserted values were sorted by the first column,
      since this was the first part of the index. This can lead to an
      error when using the AUTOINCREMENT feature, since changing the
      order of the inserted value can change the value inserted instead
      of NULL. To avoid this, the patch makes the rowid of the inserted
      row in the ephemeral space the only part of the ephemeral space
      index.
      
      Closes #4256
      
      (cherry picked from commit 2cc7e608)
      7db7c6ff
    • Mergen Imeev's avatar
      sql: specify field types in ephemeral space format · 9ae6ae6d
      Mergen Imeev authored
      This patch specifies field types in ephemeral space format in SQL.
      Prior to this patch, all fields had a SCALAR field type.
      
      This patch allows us to not use the primary index to obtain field
      types, since now the ephemeral space has field types in the
      format. This allows us to change the structure of the primary
      index, which helps to solve the issue #4256. In addition, since we
      can now set the field types of the ephemeral space, we can use
      this feature to set the field types according to the left value of
      the IN operator. This will fix issue #4692.
      
      Needed for #4256
      Needed for #4692
      Closes #3841
      
      (cherry picked from commit 2103f587)
      9ae6ae6d
    • Mergen Imeev's avatar
      box: extend ephemeral space format · a3f6360a
      Mergen Imeev authored
      This patch allows to set field types and names in ephemeral space
      formats.
      
      Needed for #4256
      Needed for #4692
      Part of #3841
      
      (cherry picked from commit 032de39f)
      a3f6360a
  3. Apr 15, 2020
    • Alexander V. Tikhonov's avatar
      gitlab-ci: move sources tarball creation to gitlab · dbdd9ae7
      Alexander V. Tikhonov authored
      Moved sources tarball creation from travis-ci to gitlab-ci,
      moved its jobs for sources packing and sources deploying.
      
      Close #4895
      
      (cherry picked from commit 34f87bc6)
      dbdd9ae7
    • Alexander V. Tikhonov's avatar
      gitlab-ci: remove Ubuntu 19.04 Disco · bc341006
      Alexander V. Tikhonov authored
      Removed Ubuntu 19.04 Disco from testing which is EOL.
      
      Close #4896
      
      (cherry picked from commit 05df6b31)
      bc341006
    • Alexander V. Tikhonov's avatar
      Added ability to remove packages from S3 · 97fa4e31
      Alexander V. Tikhonov authored
      Added ability to remove given in options package from S3. TO remove the
      needed package need to set '-r=<package name with version>' option,
      like:
        ./tools/update_repo.sh -o=<OS> -d=<DIST> -b=<S3 repo> \
          -r=tarantool-2.2.2.0
      it will remove all found appropriate source and binaries packages from
      the given S3 repository, also the meta files will be corrected there.
      
      Close #4839
      
      (cherry picked from commit d6c50af1)
      97fa4e31
    • Alexander.V Tikhonov's avatar
      Add help instruction on 'product' option · ca51e72e
      Alexander.V Tikhonov authored
      Added instructions on 'product' option with examples.
      
      Part of #4839
      
      (cherry picked from commit cccc989c)
      ca51e72e
    • Alexander.V Tikhonov's avatar
      Enable script for saving packages in S3 for modules · 92e4e61d
      Alexander.V Tikhonov authored
      Found that modules may have only binaries packages w/o sources
      packages. Script changed to be able to work with only binaries
      either sources packages.
      
      Part of #4839
      
      (cherry picked from commit 4527a4da)
      92e4e61d
    • Alexander V. Tikhonov's avatar
      Add metafiles cleanup routines at S3 pack script · 5dbb590b
      Alexander V. Tikhonov authored
      Added cleanup functionality for the meta files.
      Script may have the following situations:
      
       - package files removed at S3, but it still registered:
         Script stores and registers the new packages at S3 and
         removes all the other registered blocks for the sames
         files in meta files.
      
       - package files already exists at S3 with the same hashes:
         Script passes it with warning message.
      
       - package files already exists at S3 with the old hashes:
         Script fails w/o force flag, otherwise it stores and
         registers the new packages at S3 and removes all the other
         registered blocks for the sames files in meta files.
      
      Added '-s|skip_errors' option flag to skip errors on changed
      packages to avoid of exits on script run.
      
      Part of #4839
      
      (cherry picked from commit ed491409)
      5dbb590b
    • Alexander V. Tikhonov's avatar
      gitlab-ci: set static docker build release testing · 550461b9
      Alexander V. Tikhonov authored
      Returned the static build based on Dockerfile to gitlab-ci release branches
      testing after the issues with missed openssl version fixed at PR #4831.
      
      Follow up #4831
      
      (cherry picked from commit b09f44b856e91f1006bd5b3e226a7be0b65b7859)
      (cherry picked from commit 6f618d62)
      550461b9
    • Alexander V. Tikhonov's avatar
      build: disable cache for static build Dockerfile · b6631b18
      Alexander V. Tikhonov authored
      Found that static build based on Dockerfile used external link
      and missed that it was removed, like it was in #4830. To avoid
      of the same issues the cache for building the Dockerfile was
      disabled with '--no-cache' option at docker build command.
      
      Follow up #4830
      
      (cherry picked from commit 1207821e4fc18312a9916d81a55a8eacd75a67b3)
      (cherry picked from commit c5d27312)
      b6631b18
    • Sergey Bronnikov's avatar
      Fix flaky test engine/ddl · 93fc5b49
      Sergey Bronnikov authored
      Test was a flaky from the beginning 39d0e427
      Time of building indexes varies from time to time and the problem was due to
      abcense of synchronization in index building and checking numbers of these
      indexes.
      
      Fixes #4353
      
      (cherry picked from commit 5f96ee59)
      93fc5b49
  4. Apr 08, 2020
Loading