Thanks, Norbert!

On Mon, May 12, 2014 at 11:38 AM, Norbert Hartl <norb...@hartl.name> wrote:

>
> Am 12.05.2014 um 10:46 schrieb Sabine Knöfel <sabine.knoe...@gmail.com>:
>
> Hi Norbert,
>
> what about objects which have been written to mongo with the old version
> and will be read with the new version. Can they be read/found with the new
> version? Or is there a migration needed?
>
>
> I’d say it should be safe just to upgrade the code. The exisiting ids
> won’t change because encoding and decoding are always fully reversible.
> Meaning regardless of the encoding scheme the ids are the same in the
> database after being read and written. The only thing changes is the value
> in the OID object in your image. There are two ways where this can fail.
> Either you monkey with id values inside your code. Or you use manual
> references to objects where the referenced id is not written as OID.
> Everything else should be the same with the old and the new code.
> In the meantime I even changed the generation of the id value to reflect
> the mongo spec. Now the values should be comparable to what other drivers
> (including mongo shell) are generating. This also means you can now ask
> your ObjectId about its timestamp. Which of course gives you non-sense with
> ids generated prior to the code update..
>
> Norbert
>
>
>
> On Thu, May 8, 2014 at 11:30 PM, Norbert Hartl <norb...@hartl.name> wrote:
>
>> I needed to change the way ObjectIds are read from and written to BSON.
>> BSON is a format that encodes its byte contents little endian. In mongo
>> database the format of ObjectIds is different. The way an ObjectId is
>> encoded is big endian. You can see this if you compare the outputs for an
>> object when read from mongo shell and from pharo. The ids won’t match.
>>
>> If you do „normal“ stuff with mongo it is unlikely you have noticed the
>> effect. An OID is read the wrong way but also written the wrong way which
>> makes it right again from the mongo database perspective. But it won’t work
>> if you use a mixed query setting. Meaning reading an OID and requesting the
>> database using javascript expression. This will fail.
>>
>> I’m writing this because I’m not sure the change can break existing
>> software. The change is not included in the stable version, yet. If you
>> want to test then load #bleedingEdge and report any problem that might
>> occur. I will use the new behaviour and will take the freedom to make it
>> stable if it works for some time.
>>
>> FYI,
>>
>> Norbert
>>
>>
>>
>
>

Reply via email to