Error while 'cbtransfer' : struct.error: unpack requires a string argument of length 18


I got the following error while executing ‘cbtransfer’

struct.error: unpack requires a string argument of length 18
Traceback (most recent call last):
File “_ctypes/callbacks.c”, line 314, in 'calling callback function’
File “/opt/couchbase/lib/python/”, line 408, in callback
fn(DocumentInfo._fromStruct(docInfoPtr.contents, self))
File “/opt/couchbase/lib/python/”, line 218, in change_callback
cas, exp, flg, flex_meta, dtype = struct.unpack(SFD_REV_META, doc_info.revMeta)

When I looked at ‘Operation per Second’, it seems like the data from fail-over node properly pushed into the running cluster.
But I got very long list of the above error after ‘cbtransfer’ execution, so I am worrying about any data loss.

Would there be any data loss after the error?


Hey Dynamicscope,

Are you using cbtransfer from a 3.X against the files from a 2.X node? It looks like you are running into this defect.


Yes, I was trying to transfer data from 2.2.0 CE into 3.0.1 CE.

More exactly… what I did is force-stop three 2.2.0 nodes and offline upgrade them to 3.0.1 and start the nodes back up.
(I had to force-stop them because of the rebalancing issue that I posted on this forum: Server down while removing nodes + rebalancing)

I tried rebalancing the cluster with those offline upgraded nodes. But failed to rebalance the cluster because of disk full issue of offline upgraded nodes. Server always in pending state

So I failed over the nodes and tried ‘cbtransfer’…

So in result, does this mean I failed to transfer the data from the storage?
If so, is there any other way to restore data from 2.2.0 CE into 3.0.1 CE?


No data would have been transferred. If you use the cbtransfer from a 2.X and point it at 3.X cluster it will work.