Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-11426

2/2 Olafs agree: changelog entries are emitted out of order

    XMLWordPrintable

Details

    • 3
    • 9223372036854775807

    Description

      When storing changelogs we do not strictly order the entries with respect to index.

      int mdd_changelog_store(const struct lu_env *env, struct mdd_device *mdd,
                              struct llog_changelog_rec *rec, struct thandle *th)
      {
              ...
      
              /* llog_lvfs_write_rec sets the llog tail len */
              rec->cr_hdr.lrh_type = CHANGELOG_REC;
              rec->cr.cr_time = cl_time();
      
              spin_lock(&mdd->mdd_cl.mc_lock);
              /* NB: I suppose it's possible llog_add adds out of order wrt cr_index,
               * but as long as the MDD transactions are ordered correctly for e.g.
               * rename conflicts, I don't think this should matter. */
              rec->cr.cr_index = ++mdd->mdd_cl.mc_index;
              spin_unlock(&mdd->mdd_cl.mc_lock);
      
              ctxt = llog_get_context(obd, LLOG_CHANGELOG_ORIG_CTXT);
              if (ctxt == NULL)
                      return -ENXIO;
      
              llog_th = thandle_get_sub(env, th, ctxt->loc_handle->lgh_obj);
              if (IS_ERR(llog_th))
                      GOTO(out_put, rc = PTR_ERR(llog_th));
      
              /* nested journal transaction */
              rc = llog_add(env, ctxt->loc_handle, &rec->cr_hdr, NULL, llog_th);
      

      This may not be a bug in itself but it means that a changelog consumer must account for gaps in the sequence when clearing changelog entries.

      Attachments

        Issue Links

          Activity

            People

              qian_wc Qian Yingjin
              jhammond John Hammond
              Votes:
              0 Vote for this issue
              Watchers:
              18 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: