<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 05/07/2015 01:05 PM, Martin Babinsky
      wrote:<br>
    </div>
    <blockquote cite="mid:554B4715.7090408@redhat.com" type="cite">On
      05/06/2015 07:41 PM, thierry bordaz wrote:
      <br>
      <blockquote type="cite">On 05/06/2015 05:56 PM, Martin Babinsky
        wrote:
        <br>
        <blockquote type="cite">On 05/06/2015 04:25 PM, thierry bordaz
          wrote:
          <br>
          <blockquote type="cite">On 05/06/2015 03:19 PM, Martin
            Babinsky wrote:
            <br>
            <blockquote type="cite">Hello Thierry,
              <br>
              <br>
              replies are inline.
              <br>
              <br>
              On 05/06/2015 02:22 PM, thierry bordaz wrote:
              <br>
              <blockquote type="cite">On 05/06/2015 01:54 PM, Martin
                Babinsky wrote:
                <br>
                <blockquote type="cite">The attached patch tries to fix
                  <br>
                  <a class="moz-txt-link-freetext" href="https://fedorahosted.org/freeipa/ticket/4378">https://fedorahosted.org/freeipa/ticket/4378</a>
                  <br>
                  <br>
                  After discussion with Thierry we concluded that while
                  this issue is
                  <br>
                  more complex than it seems, the transition from
                  REPLACE to DEL/ADD
                  <br>
                  operations when updating nsDS5ReplicaId should suffice
                  for this
                  <br>
                  ticket.
                  <br>
                  <br>
                </blockquote>
                Hello Martin,
                <br>
                <br>
                Few comments, you are using MOD_DEL 'replicaID' with
                None value. So
                <br>
                this
                <br>
                is going to delete all previous values and it should be
                equivalent
                <br>
                to a
                <br>
                MOD_REPL.
                <br>
                I was thinking you wanted to retrieve the id_value and
                call MOD_DEL
                <br>
                'replicaID' <current_value>. So that if by the
                time you fetched the
                <br>
                replicaId, an other replica updated the replicaId, the
                MOD_DEL/MOD_ADD
                <br>
                would fail and you need a new iteration.
                <br>
                <br>
              </blockquote>
              Sorry I didn't know you can MOD_DEL a particular value
              (I'm LDAP noob
              <br>
              I know). Will fix this.
              <br>
              <blockquote type="cite">If replicaId was multi-valued and
                you want to make it single
                <br>
                valued, you
                <br>
                may want to do create a more complex MOD (e.g.
                (ldap.MOD_DELETE,
                <br>
                'nsDS5ReplicaId', str(value1), (ldap.MOD_DELETE,
                'nsDS5ReplicaId',
                <br>
                str(value2)...)
                <br>
                <br>
              </blockquote>
              AFAIK ReplicaId is single-valued (looking at the schema
              right now) so
              <br>
              this shouldn't be problem.
              <br>
              <blockquote type="cite">If it is updating successfully do
                you want to return 'retval' or
                <br>
                'retval+1' ?
                <br>
                <br>
                If several replicas try to update the replicaId of the
                master and the
                <br>
                current replicaId is 1000.
                <br>
                Replica1 successfully updates the replicaId and gets
                1001 as the new
                <br>
                value.
                <br>
                Replica2 successfully updates the replicaId and gets
                1002.
                <br>
                The final value on master will be 1002, but replica1
                will assum it is
                <br>
                1001. Is it a problem ?
                <br>
                <br>
              </blockquote>
              I studied the code in the master branch and IIUC (and
              please correct
              <br>
              me if I got this wrong) nsDS5ReplicaId attribute in
              <br>
              'cn=replication,cn=etc,$SUFFIX' represents replicaID of
              the _next_
              <br>
              replica that will be installed.
              <br>
              <br>
              So if a replica is installed, it sets the current value of
              <br>
              nsDS5ReplicaId as its replica ID (the function returns
              'retval') and
              <br>
              then increments it in 'cn=replication,cn=etc,$SUFFIX'
              entry ('retval +
              <br>
              1' is written to master) so that the next installed
              replica fetches
              <br>
              this updated value.
              <br>
              <br>
              So the case you described should be the expected behavior.
              To change
              <br>
              it would require different patch IMHO.
              <br>
            </blockquote>
            <br>
            Thank for your precious explanations, in fact the value in
            <br>
            'cn=replication,cn=etc,SUFFIX' is the next available
            replicaId value and
            <br>
            is the centralized mechanism that assign unique replicaID.
            <br>
            <br>
            The risk was that several replica pick the same value. So
            yes it is
            <br>
            important that the MOD_DEL specifies the previously read
            value so that
            <br>
            the test/set will be atomic. If several replicas read the
            same value,
            <br>
            only the faster one will use it to install the replica.
            <br>
            <br>
            thanks
            <br>
            thierry
            <br>
            <blockquote type="cite">
              <blockquote type="cite">thanks
                <br>
                thierry
                <br>
              </blockquote>
              <br>
              <br>
            </blockquote>
            <br>
          </blockquote>
          <br>
          Attaching updated patch with fixed MOD_DELETE operation.
          <br>
          <br>
        </blockquote>
        <br>
        Hi Martin,
        <br>
        <br>
        The fix looks good to me except I think you need to do
        (ldap.MOD_DELETE,
        <br>
        'nsDS5ReplicaId', *str(*retval*)*)
        <br>
        <br>
        thanks
        <br>
        thierry
        <br>
      </blockquote>
      <br>
      Attaching updated patch.
      <br>
      <br>
    </blockquote>
    <font face="Times New Roman, Times, serif">Thanks Martin,<br>
      <br>
      The fix is good for me. Ack.<br>
      <br>
      thierry<br>
    </font>
  </body>
</html>