我遵循了以下 Realm 指令,介绍如何将自定义适配器从 Realm Cloud Platform 编写到 Kafka。
Realm 平台 - 构建您自己的适配器
代码 :
console.log('Initialising ....')
let creds = Realm.Sync.Credentials.usernamePassword('my_username', 'my_password', false);
Realm.Sync.User.login("https://myapp.us1a.cloud.realm.io", creds).then(user => {
console.log('loged in successully!')
console.log('Waiting for new realm transaction ....')
this.adapter = new Realm.Sync.Adapter(
config.local_path,
'realms://myapp.us1a.cloud.realm.io',
user,
config.realm_path_regex,
(realm_path) => {
console.log('new transaction received!')
var current_instructions = this.adapter.current(realm_path);
while (current_instructions) {
// if defined, process the current array of instructions
this.process_instructions(current_instructions);
// call advance to progress to the next transaction
this.adapter.advance(realm_path);
current_instructions = this.adapter.current(realm_path);
}
}
)
}).catch(err => {
console.log(err)
})
代码工作正常并开始接收更新,直到有毒导致以下错误并使应用程序崩溃。
错误 :
../src/object-store/src/server/adapter.cpp:524: [realm-core-6.0.4] ArrayMove not supported by adapter.
异常从 c++ 领域核心库引发 - 从以下方法 https://github.com/realm/realm-object-store/blob/master/src/server/adapter.cpp
void operator()(const Instruction::ArrayMove&)
{
if (!m_list_property_name.size())
return; // FIXME
REALM_TERMINATE("ArrayMove not supported by adapter.");
}
我花了一整天来解决这个问题,但没有运气。 任何建议表示赞赏!
完整的错误消息:
Initialising ....
loged in successully!
Waiting for new realm transaction ....
Connection[1]: Session[1]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[1]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55162')
Connection[2]: Session[2]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[3]: Session[3]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[4]: Session[4]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[5]: Session[5]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[6]: Session[6]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[2]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55169')
Connection[3]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55171')
Connection[4]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55173')
Connection[6]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55175')
Connection[5]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55174')
Connection[7]: Session[7]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[8]: Session[8]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[9]: Session[9]: client_reset_config = false, Realm exists = true, async open = false, client reset = false
Connection[7]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55176')
Connection[8]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55177')
Connection[9]: Connected to endpoint '54.184.28.225:443' (from '192.168.0.101:55178')
../src/object-store/src/server/adapter.cpp:524: [realm-core-6.0.4] ArrayMove not supported by adapter.
0 realm.node 0x0000000106dca6cc _ZN5realm4utilL18terminate_internalERNSt3__118basic_stringstreamIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE + 28
1 realm.node 0x0000000106dca986 _ZN5realm4util9terminateEPKcS2_lOSt16initializer_listINS0_9PrintableEE + 390
2 realm.node 0x0000000106941fab _ZNK5realm4sync11Instruction5visitIRN12_GLOBAL__N_133ChangesetCookerInstructionHandlerEEEDaOT_ + 1935
3 realm.node 0x00000001069f88cd _ZN5realm4sync15ChangesetParser5State9parse_oneEv + 3101
4 realm.node 0x00000001069f7bf8 _ZN5realm4sync15ChangesetParser5parseERNS_5_impl17NoCopyInputStreamERNS0_18InstructionHandlerE + 184
5 realm.node 0x0000000106941006 _ZN12_GLOBAL__N_115ChangesetCooker14cook_changesetERKN5realm5GroupEPKcmRNS1_4util12AppendBufferIcNS7_16DefaultAllocatorEEE + 360
6 realm.node 0x0000000106992282 _ZN5realm5_impl17ClientHistoryImpl27integrate_server_changesetsERKNS_4sync12SyncProgressEPKyPKNS2_11Transformer15RemoteChangesetEmRNS2_11VersionInfoERNS2_21ClientReplicationBase16IntegrationErrorERNS_4util6LoggerEPNSE_20SyncTransactReporterEPKNS2_27SerialTransactSubstitutionsE + 1362
7 realm.node 0x00000001069c6752 _ZN5realm5_impl14ClientImplBase7Session20integrate_changesetsERNS_4sync21ClientReplicationBaseERKNS3_12SyncProgressEyRKNSt3__16vectorINS3_11Transformer15RemoteChangesetENS9_9allocatorISC_EEEERNS3_11VersionInfoERNS4_16IntegrationErrorE + 114
8 realm.node 0x00000001069c6fa7 _ZN5realm5_impl14ClientImplBase7Session29initiate_integrate_changesetsEyRKNSt3__16vectorINS_4sync11Transformer15RemoteChangesetENS3_9allocatorIS7_EEEE + 103
9 realm.node 0x0000000106a0892a _ZN12_GLOBAL__N_111SessionImpl29initiate_integrate_changesetsEyRKNSt3__16vectorIN5realm4sync11Transformer15RemoteChangesetENS1_9allocatorIS6_EEEE + 42
10 realm.node 0x00000001069c4f6c _ZN5realm5_impl14ClientImplBase7Session24receive_download_messageERKNS_4sync12SyncProgressEyRKNSt3__16vectorINS3_11Transformer15RemoteChangesetENS7_9allocatorISA_EEEE + 636
11 realm.node 0x00000001069c19af _ZN5realm5_impl14ClientProtocol22parse_message_receivedINS0_14ClientImplBase10ConnectionEEEvRT_PKcm + 7903
12 realm.node 0x00000001069bba14 _ZN5realm5_impl14ClientImplBase10Connection33websocket_binary_message_receivedEPKcm + 52
13 realm.node 0x00000001069ee210 _ZN12_GLOBAL__N_19WebSocket17frame_reader_loopEv + 2416
14 realm.node 0x00000001069cb4a3 _ZN5realm4util7network7Service9AsyncOper29do_recycle_and_execute_helperINSt3__18functionIFvNS5_10error_codeEmEEEJS7_mEEEvbRbT_DpT0_ + 163
15 realm.node 0x00000001069cb2d7 _ZN5realm4util7network7Service9AsyncOper22do_recycle_and_executeINSt3__18functionIFvNS5_10error_codeEmEEEJRS7_RmEEEvbRT_DpOT0_ + 135
16 realm.node 0x00000001069cade4 _ZN5realm4util7network7Service14BasicStreamOpsINS1_3ssl6StreamEE16BufferedReadOperINSt3__18functionIFvNS8_10error_codeEmEEEE19recycle_and_executeEv + 212
17 realm.node 0x00000001069dde5c _ZN5realm4util7network7Service4Impl3runEv + 476
18 realm.node 0x00000001069fb6fd _ZN5realm4sync6Client3runEv + 29
19 realm.node 0x000000010697baf7 _ZNSt3__114__thread_proxyINS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN5realm5_impl10SyncClientC1ENS2_INS7_4util6LoggerENS4_ISB_EEEERKNS7_16SyncClientConfigEEUlvE0_EEEEEPvSJ_ + 42
20 libsystem_pthread.dylib 0x00007fff70510109 _pthread_start + 148
21 libsystem_pthread.dylib 0x00007fff7050bb8b thread_start + 15!!! IMPORTANT: Please send this log and info about Realm SDK version and other relevant reproduction info to help@realm.io.zsh: abort node adaptor.js
我最终编辑了类 https://github.com/realm/realm-object-store/blob/master/src/server/adapter.cpp 并更改了方法
void operator()(const Instruction::ArrayMove&)
{
if (!m_list_property_name.size())
return; // FIXME
REALM_TERMINATE("ArrayMove not supported by adapter.");
}
自
void operator()(const Instruction::ArrayMove&)
{
if (!m_list_property_name.size())
return; // FIXME
m_logger.warn("Adapter: Ignoring ArrayMove instruction");
return;
}
并将其作为 https://github.com/realm/realm-js 项目的一部分进行编译。
请参阅项目阅读我了解如何构建它。